# 運行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
```

<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 &
```

- 修改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
```


- 下載
```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]
```