---
# System prepended metadata

title: 運行YOLOv7-tiny

---

# 運行YOLOv7-tiny
:::info 
:bulb: 以下內容參考這幾個文章
:::
- [如果下面wheel找不到，可以來這裡找新的pytorch or torchvision ](https://qengineering.eu/install-pytorch-on-raspberry-pi-4.html)
- https://stephentcl.github.io/2021/12/07/Raspberrypi_with_deepsort/
- [C++ version](https://www.notion.so/YOLOv7-tiny-125b949b0dc3466c8b6d232973147da6?pvs=4#07fd6f50bd5647d9b5c5a49121a51b3c)
## 下載相關套件
### 1. 下載Pytorch 
- 方法一: 使用Wheel (建議這個，簡單又快，若無法成功再使用方法二)
    - 版本確認
    :::warning
    下載Torch 前需要確認系統是否相符，執行以下確認版本，若與圖中相同，可以直接繼續後面的下載，若不符，如果系統名稱跟gcc版本不同，需要重刷印象檔，可以參考環境架設篇內的文章進行印象檔重刷
    :::
    ```python=
    # 確認系統名稱是否為aarch64  
    $ uname -a 

    # 確認gcc版本
    $ gcc -v
    ```
    ![](https://hackmd.io/_uploads/S1rVCBEPh.png)
    <br>
    - 版本正確，執行下載
    ```python=
    # get a fresh start
    $ sudo apt-get update
    $ sudo apt-get upgrade
    # install the dependencies (if not already onboard)
    $ sudo apt-get install python3-pip libjpeg-dev libopenblas-dev libopenmpi-dev libomp-dev
    # above 58.3.0 you get version issues
    $ sudo -H pip3 install setuptools==58.3.0
    $ sudo -H pip3 install Cython
    # install gdown to download from Google drive
    $ sudo -H pip3 install gdown

    # Pytorch的版本是1.13.0，如果需要其他版本可以從最上面的網站找到相對應其他的wheel
    # download the wheel
    $ gdown https://drive.google.com/uc?id=1uLkZzUdx3LiJC-Sy_ofTACfHgFprumSg
    # install PyTorch 1.13.0
    $ sudo -H pip3 install torch-1.13.0a0+git7c98e70-cp39-cp39-linux_aarch64.whl
    # clean up
    $ rm torch-1.13.0a0+git7c98e70-cp39-cp39-linux_aarch64.whl
    ```
- 方法二: Torch
    - 增加Swap空間
    swap space是磁盤上的一塊區域，當系統物理內存吃緊時，Linux會將內存中不常訪問的數據保存到swap(虛擬記憶體)上，這樣系統就有更多的物理內存為各個進程服務，而當系統需要訪問swap上存儲的內容時，再將swap上的數據加載到內存中，這就是我們常說的swap out和swap in。
    
        **優點**: 當memory不足時，我們可以暫時使用swap空間作為memory使用，可以自己決定要分配多少的 swap memory 給系統。
        **缺點**: 磁盤的速度和內存比較起來慢了好幾個數量級，如果不停的讀寫swap，對系統的性能有影響，尤其是當系統內存很吃緊的時候，讀寫swap空間發生的頻率會很高，容易導致系統運行很慢，像死了一樣
        
        - 在Terminal進行Memory Swapping的設定
        ```python=
        # remove the old dphys version
        $ sudo /etc/init.d/dphys-swapfile stop
        $ sudo apt-get remove --purge dphys-swapfile

        # install zram
        $ sudo wget -O /usr/bin/zram.sh https://raw.githubusercontent.com/novaspirit/rpi_zram/master/zram.sh

        # set autoload
        $ sudo nano /etc/rc.local
        # add the next line before exit 0
        # save with <Ctrl+X>, <Y> and <Enter>
        /usr/bin/zram.sh &
        ```
        ![](https://hackmd.io/_uploads/BJRWbLVP2.png)

        - 修改zram.sh檔案
        ```python=
        $ sudo chmod +x /usr/bin/zram.sh
        
        $ sudo nano /usr/bin/zram.sh
        # alter the limit with * 3
        # save with <Ctrl+X>, <Y> and <Enter>
        mem=$(( ($totalmem / $cores)* 1024 * 3))
        
        $ sudo reboot
        ```
        - 確認Swap空間
        ```python=
        $ free -m
        $ htop
        ```
        ![](https://hackmd.io/_uploads/SJOo-U4Ph.jpg)
        
        ![](https://hackmd.io/_uploads/rJqs-L4w2.jpg)
    - 下載
    ```python=
    # 從github下載
    $ git clone --recursive https://github.com/pytorch/pytorch
    $ cd pytorch
    $ git submodule update --remote third_party/protobuf

    # 調整環境參數 (在terminal輸入)
    $ export NO_CUDA=1
    $ export NO_DISTRIBUTED=1
    $ export NO_MKLDNN=1
    $ export NO_NNPACK=1
    $ export NO_QNNPACK=1


    $ python setup.py build
    $ sudo -E python setup.py install
    $ sudo python setup.py develop && python -c "import torch"
    ```
### 2. 下載Torchvision 
```python=
# the dependencies
$ sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev
$ sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev

# install gdown to download from Google drive, if not done yet
$ sudo -H pip3 install gdown

# 注意Pytorch 1.13.0 相對應的Torchvision是0.14.0，如果要找其他的可以一樣在最上面的網站找
# 若選擇的兩個版本不對應，YOLO會跑不起來
# download TorchVision 0.14.0
$ gdown https://drive.google.com/uc?id=1AhbkLqKd8EZO2pZV_g9aFZGHZo2Ubc3O
# install TorchVision 0.14.0
$ sudo -H pip3 install torchvision-0.14.0a0+5ce4506-cp39-cp39-linux_aarch64.whl
# clean up
$ rm torchvision-0.14.0a0+5ce4506-cp39-cp39-linux_aarch64.whl
```
## 測試運行YOLO
```python=
$ python3 detect.py --source [資料的位置] --weights [訓練的Weights]
```