# YOLO-V5 使用教學
## 環境建置與安裝
載點 -> https://drive.google.com/file/d/1Ih2BUDCViSypOkKviQYydmyPzs-TScC-/view?usp=sharing
安裝流程 :
**Step1 創建conda環境(python建議3.8以上版本)**

---
**Step2 啟用環境並進入yolov5資料夾內**

---
**Step3 安裝pytorch框架**
pytorch官方載點->https://pytorch.org/get-started/previous-versions/
如果有安裝CUDA與CUDNN可以選擇對應的cudatoolkit版本,沒有的話則選CPU Only即可

---
Step4 cmd進入YOLO資料夾內執行指令
指令->pip install -r requirements.txt

完成以上步驟沒有任何報錯就完成安裝囉~
## 數據標籤製做
線上Label工具連結->https://www.robots.ox.ac.uk/~vgg/software/via/via.html
---
Step1 數據Label
先對Attributes進行多分類設定,在對物品進行Label

---
Step2 完成所有框選後進行輸出(JSON格式)

輸出JSON檔案打開如下,

---
Step3 資料格式化

---
## 模型訓練
### Dataset設定
將資料切分為train跟val兩個資料夾,每個資料夾內再建置images與labels兩個資料夾,分別放入原始的圖像(jpg, png格式)與標準化後label檔(txt格式)


---
### YAML檔案編寫
將圖片與標籤整理成上述格式後,編寫YAML檔案,指定Dataset路徑位置與標籤種類

---
### 模型權重檔與遷移學習
權重檔載點->https://github.com/ultralytics/yolov5/releases
★★不論是訓練或是偵測對應的模型都必須選擇對應的權重★★

---
遷移學習投影片連結->
https://docs.google.com/presentation/d/1IQFng534WrtFGkFcph5wDfmJUh_PygGS/edit#slide=id.p7
遷移學習參考資料
* https://hackmd.io/@allen108108/H1MFrV9WH
* https://blogs.nvidia.com.tw/2019/02/07/what-is-transfer-learning/
---
### 數據增強(data augmentation)
是一種讓有限的數據產生更多的等價數據來人工擴展訓練數據集的技術。它是克服訓練數據不足的有效手段,也能有效的避免訓練模型Overfitting問題。
常見數據增強方法->https://www.zhihu.com/question/319291048
Yolo Mosaic增強->https://ppfocus.com/0/tr11fd978.html

---
### Training
開啟train.py設定需要更改的參數如learning rate、optimizer、epoch等等...,最後指令指定Dataset位子(Data資料夾內的".yaml檔"),以及選擇模型大小以及對應的模型權重。


---
### wandb
wandb官方網址->https://wandb.ai/site
wandb教學網址->https://yanwei-liu.medium.com/wandb-weights-and-biases-a-better-choice-over-tensorboard-6c75b5f972b1
wandb為訓練模型的可視化工具,能夠即時觀察train與val的loss,並觀察模型是否收斂且大概在哪個區間收斂,雖然不安裝也能跑yolov5訓練但建議安裝,使用上安裝後進行註冊並登入,與帳號連動即可使用。

---
### Yolov5 Loss
Yolov5中的三個loss指標分別為cls_loss、box_loss與obj_loss
cls_loss用來判斷模型是否能夠準確分出目標屬於哪類,如貓狗等等..。
box_loss則是模型回歸出的x, y, w, h座標點數值。
obj_loss則是除了考慮座標數值外還要考慮與目標物的iou面積,來確保整體模型框的位置是否準確。

---
## 模型的評估與偵測
### 模型評估計算
評估指標投影片連結->
https://docs.google.com/presentation/d/1IL8NBYhnOByD9mor7tCrGJAzsKZNGJlz/edit#slide=id.p1
mAP與IoU計算參考資料:
* http://yy-programer.blogspot.com/2020/06/iouapmap.html
* https://chih-sheng-huang821.medium.com/%E6%B7%B1%E5%BA%A6%E5%AD%B8%E7%BF%92%E7%B3%BB%E5%88%97-%E4%BB%80%E9%BA%BC%E6%98%AFap-map-aaf089920848
### Detect
當模型完成訓練後會於資料夾內的runs建立對應專案名稱的資料夾,進入後會看到訓練完成後各項評估的可視化圖以及weight的資料夾,weight資料夾內除了存取模型訓練的最後權重檔之外,也會根據loss指標來儲存訓練過程中最佳的一次權重檔。


---
最後執行python detect.py並帶入所需的參數,Data可為單一圖片(jpg, png)或整個資料夾,weight則選擇訓練內的權重檔可選last或best,偵測完成的圖片則會儲存在runs/detect內對應專案名稱的資料夾內。


---
Pokemon Dataset->https://drive.google.com/file/d/1IdMhRD2aCh-yHeG6gNLK1DiQNYMmZ_or/view?usp=sharing