---
# System prepended metadata

title: Yolo-Firi Training Environment Setting

---

# Yolo-Firi Training Environment Setting 
`by 許承壹`
註：此份文件為YoloV5系列(YoloV5, Yolo-FIRI)訓練的操作說明，其中，環境與ROS端的環境相同，若ROS端已經建置完畢，則直接略過，由第四點開始即可。
註2：需特別注意，若先完成此處的環境建置，在ROS端的建置中，仍需重新執行一次ROS端與本文相似的步驟，以確保沒有遺漏未安裝之python package。
## Environment Prerequisites
* 作業系統：Ubuntu 18.04
* ROS版本：ROS Melodic
* 虛擬環境：Anaconda3
* Cuda10.0 and corresponding driver
* YoloV5版本為V5.0的branch，本文採用YOLOv5s進行平台建置與實作驗證
## 1.簡介
本文所使用的檔案，是參照YoloV5,Tags為V5.0的版本進行修改。
 YoloV5官方Github：https://github.com/ultralytics/yolov5
 我們的Github(main branch): https://github.com/amtommy/thermal_detection_offline/ 
## 2.重要檔案與根目錄之介紹
1. `yolov5/train.py`
訓練所使用之python檔案，通常輸入資料會自訂數個參數進行訓練
2. `yolov5/data/thermal_dataset.yaml`
此檔案為資料集路徑設定與偵測類別相關設定。
3. `yolov5/0928_dataset`
此處為我方所使用資料集，訓練集包含3637張照片、驗證集則包含570張照片。
4. `yolov5/runs`
此處為預設存放偵測結果及訓練結果的位置。
5. `yolov5/data/images`
此處為預設之detect.py讀取照片的位置，可將想辨識的照片放入，detect.py可以協助輸出偵測結果。
6. `yolov5/0928_dataset`
此處為資料集存放位置
7. Nas上資料集與model weight放置處
NAS: http://140.96.109.23:32110/cgi-bin/
資料集:`Data_1/Dataset/DriveNet/Thermal_Dataset/0928_dataset`
weight檔:`Data_1/Dataset/DriveNet/Thermal_Dataset/Yolov5_model`

## 3.Anaconda 安裝教學
如果你的電腦上沒有安裝Anaconda的話，會建議可以安裝使用，其功能是建立一個虛擬環境，方便你管理python的版本以及packages。
安裝步驟：
1. 到官方網站下載對應你的作業系統的Anaconda並安裝
https://www.anaconda.com/products/distribution
2. 建立新環境
`conda create -n <env_name> python=x.x`
   * example:
   `conda create -n test_env python=3.6` 
3. 切換到該環境
`conda activate <env_name>`

至此就可以開始使用，並安裝你想要安裝的packages了！

## 4.環境建置
1. 進行Yolo_v5套件安裝，由於過新版本的pytorch與torchvision會造成error，因此我們先行安裝這兩個python package,請參考以下步驟：
   * `cd <your path to>/yolov5`
   * `conda install pytorch==1.9.0 torchvision==0.10.0 torchaudio==0.9.0 cudatoolkit=10.2 -c pytorch`
2. 安裝剩餘之python package
   * `pip install -r requirements.txt`
3. 安裝python的Opencv package
   * `conda install -c conda-forge opencv`
4. 環境建置完畢後，可以使用detect.py進行測試，觀察是否有結果，結果會被存放於runs/detect當中。
   * `python detect.py`
* 註：若出現RuntimeError: The size of tensor a (80) must match the size of tensor b (56) at non-singleton dimension 3是因為目前是V5.0版本，而跑detect.py在找不到weight的情況下，預設會下載V6.0的weight，所造成的tensor問題，壓縮檔內有附上符合V5.0的權重檔，若想嘗試其餘的版本，可以去github的model zoo找V5.0版本的權重檔即可。

## 5.模型訓練及參數
1. 找到存放在yolov5/data當中的thermal_dataset.yaml，將train與val的路徑修改為要使用的資料集存放位置
 ========================================================================
  train: `<path to your dataset>/train.txt`  # train images (relative to 'path') 128 images
  val: `<path to your dataset>/val.txt`  # val images (relative to 'path') 128 images
 ========================================================================
範例如下：
  ========================================================================
  train: /home/lian/yolov5/0928_dataset/train.txt  # train images (relative to 'path') 128 images
  val: /home/lian/yolov5/0928_dataset/val.txt  # val images (relative to 'path') 128 images
  ========================================================================
2. 訓練參數如下所示，上面步驟皆設定完成後，即可開始進行yolo_FIRI訓練
`python train.py --data thermal_dataset.yaml --cfg yolov5_firi.yaml --hyp hyp.finetune.yaml --batch-size 8 --epochs 150`
其中:
    * thermal_dataset.yaml為我方所提供之資料集相關設定；
    * yolov5_firi.yaml則為Yolo_FIRI的相關backbone設置
    * hyp.finetune.yaml為模型微調的資料夾，包含一些事情的data augmentation也在裡面