# YOLOv7 ###### tags: `YOLO` `YOLOv7` ### 前言 其實我是沒打算寫前言的,因為這個筆記本來是給自己做紀錄用,不過還是留下這個區塊說不定以後會需要加些什麼東西上去。 * 雖然文章是寫YOLOv7,不過基本上各版本大多差在下載路徑與Git網址上的不同 * 本文以Windows系統作為範例,不同的系統在指令或路徑結構上可能會有差異 ### 虛擬環境(非必要) 因為我不想直接用本機的環境來跑,安裝python後建一個python的虛擬環境,我這邊用的是python內建的虛擬環境功能,亦可以根據個人習慣選擇Anaconda或docker等 首先前往想要放置虛擬環境的路徑下輸入 ```python python -m venv "虛擬環境名稱" ``` 然後啟動該虛擬環境,輸入 ```shell tutorial-env\Scripts\activate.bat ``` 此時就會進入python的虛擬環境中,在這裡使用的python功能就只會作用在虛擬環境中,因此可以不用擔心把本機環境弄得亂七八糟 順帶一提,離開虛擬環境則輸入 ```shell deactivate ``` ### 取得YOLOv7 [王建堯](https://github.com/WongKinYiu/yolov7)老師的GitHub中clone YOLOv7下來,沒有git的話請先安裝 ```shell git clone https://github.com/WongKinYiu/yolov7 ``` 前往[此處](https://github.com/WongKinYiu/yolov7/releases),點開下面的Assets箭頭後下載想要的pt檔,我這邊用的是yolov7<area>.</area>pt [![](https://i.imgur.com/hPVDg3D.png)](https://github.com/WongKinYiu/yolov7/releases) 進入yolov7資料夾中,並將剛剛下載的檔案放進去(或是你要在裡面整理一個專門放pt檔的資料夾也行,將來使用的時候記得指定路徑) ```python cd yolov7 move "剛剛下載的路徑"\yolov7.pt yolov7.pt ``` 基本上到這裡就可以開始測試了,但是通常用python內建的虛擬環境會缺少很多套件, 這邊有兩個方法: 1. 用requirements.txt一次安裝完所有套件 ```python pip install -r requirements.txt ``` 不過有些人用這種方法會失敗,這時候可以用第2種方法 2. 每次報錯就安裝套件,輸入以下指令並觀察印出的內容 ```python! python detect.py --weights yolov7.pt --source inference/images/horses.jpg --view-img ``` 假設執行成功,應該會出現路徑`runs\detect\exp[*]`之類的提示,那麼可以省略安裝套件的步驟 若執行失敗並出現缺少套件的訊息,則根據訊息描述安裝缺少的套件,指令如下 ```python pip install "套件名稱" ``` 有些套件的名稱可能跟他提示的內容不太一樣,他會詢問你是不是指xxx套件,這時只要改成他說的名稱就行了。缺少的套件應該會有好幾個,重複輸入以上兩串指另就能把缺少的都補齊 ### 測試YOLOv7 基本上到此已經可以使用YOLOv7了,我們可以輸入以下指令來測試 ```python! python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg ``` 沒錯,基本上就跟安裝套件的方法2指令差不多,`--weight`部分可以更改成其他的pt檔(例如剛才在[此處](https://github.com/WongKinYiu/yolov7/releases)能下載其他的pt檔),`--source`則可以改成你要丟進去的圖片,還有其他可調整的參數可以用`--help`查看。執行完之後結果會保存在`..\yolov7\runs\detect\exp[*]`裡面。 ### 訓練自己的資料集 標住資料的部分大家可以自行上網找找教學,這邊直接用下載的資料集做範例,下載下來的資料集通常都會有train、valid、test三個資料夾,我個人為了方便整理把他放到`..\data\datasets`裡。接著新增datasets1.yaml檔案寫入訓練時需要的設定,檔案在`..\data`裡,可以複製一份現有的yaml進行修改: > train: ./data/datasets1/train/ val: ./data/datasets1/valid/ test: ./data/datasets1/test/ 這三行代表train、valid、test的路徑 > nc: 2 這是classes的數量,與下面的class names相關 > names: [ 'class_A', 'class_B' ] 這是每個class的名字,如果你有用其他程式標記資料或是下載下來的資料集有classes.txt的檔案,這邊的內容應該會跟檔案裡的一樣。然後到`cfg/training/`新增yolov7_training.yaml檔案,一樣複製一份同路徑下的yaml並修改其中一行: > nc: 2 最後輸入指令開始訓練: ```python! python train.py --workers 4 --device 0 --batch-size 4 --data data/datasets1.yaml --img 640 640 --cfg cfg/training/yolov7_training.yaml --weights 'yolov7_training.pt' --name yolov7-custom --hyp data/hyp.scratch.custom.yaml --epochs 10 ``` `--weights`的部分可以選擇要使用的權重檔,`--name`則是要幫他取什麼名字。然後給他一點時間跑,具體時間取決於資料集大小與電腦效能,出現最後的完成訊息及路徑就是結束了(對我花了30個小時...) ![](https://i.imgur.com/R4p0xBD.png) 最後使用前面的測試指令來跑一次,確認沒有問題以及效果好不好就行了 ```python! python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg ``` --- ### 參考資料 https://inside-machinelearning.com/en/use-yolov7/ https://github.com/WongKinYiu/yolov7 https://ithelp.ithome.com.tw/articles/10306298