小白train自己的YOLO v4
7 min readMay 4, 2020
- 本篇以我自己為例,我的項目只有一個類別,也就是“有”或“沒有”。
- 我自己是在終端機(terminal)進行操作。
- 其實本篇大部分就是我個人照個官網做,然後把英文翻成中文呈現給大家。
正文開始...
總需要新增3個檔案
- yolo-obj.cfg
- obj.names
- obj.data
下載
git clone https://github.com/AlexeyAB/darknet.git
- 或者到到YOLO v4大神的gihub網頁https://github.com/AlexeyAB/darknet下載程序代碼
開始設定
#建立一個資料夾用來放weights
mkdir weights
cd weights
# 下載預訓練模型 pre-trained weights-file
wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137
設定yolo-obj.cfg檔
創建文件yolo-obj.cfg,其內容與yolov4-custom.cfg中的內容相同(或將yolov4-custom.cfg複製到yolo-obj.cfg):
cd darknet/cfg
cp yolov4-custom.cfg yolo-obj.cfgvim yolo-obj.cfg
vim:用編輯器編輯的意思,你也可以用其他編輯軟件(vs,sublime…打開yolo-obj.cfg來編輯內容)
- 進入
darknet/cfg
資料夾 - 複製 yolov4-cusom.cfg 並命名為 yolo-obj.cfg
- 打開
yolo-obj.cfg
後會看到長這樣,然後修改他
- batch = 64
- subdivisions= 64
- max_batches = 種類數*2000, 但不少於4000
e.g.,
1類 -> max_batches = 4000
2類 -> max_batches = 4000
3類 -> max_batches = 6000
… - steps = max_batches * 0.8, max_batches * 0.9
e.g.,
max_batches = 4000 -> steps = 3200, 3600 - width=416
設定圖片寬度(需是32的倍數)
height=416
設定圖片高度(需是32的倍數)
width和height代表圖片讀進去後,被resize成多少,再餵給yolo
可以自行設定,這邊不用跟原圖一樣大小但當然愈接近愈好。
- 修改
[yolo]
區塊的 classes =1
- 你有n種類,就設 = n
- 總共有三個[yolo]
區塊需要修改。可以直接搜尋[yolo]
,然後往下看幾行就可以找到。(注意看,這些區塊很像,但行數不一樣)
設定obj.names檔
- 在
darknet/data/
資料夾中,新增obj.names
。 - 裡面放你想要物件的顯示的名稱,例如我只有一個物件:
cat
。
(2.) 如果有兩個物件: cat
, dog
設定 obj.data檔
先在 darknet/data/
資料夾中,新增 obj.data
。
- classes = 種類數
- train = 一個
.txt
,放訓練資料的詳細位置
3. valid = 一個 .txt
,放驗證資料的詳細位置
4. names = 剛剛我們製作的那個 obj.names
檔案的位置
5. backup = 你的weights 要存在哪裡
compile on Linux
在 darknet/
資料夾下
- 修改
Makefile
檔案
有一個已經存在的檔案Makefile
,因為我有使用GPU和opencv,因此需要稍做修改。
修改前
修改後
2. 直接在終端機輸入指令 make
然後等他跑完就可以了,需要一下子…
終於可以開始訓練了~
終端機在 darknet/
資料夾下,輸入指令
./darknet detector train data/obj.data cfg/yolo-obj.cfg yolov4.conv.137 -mjpeg_port 8090 -map -gpus 0,1,2
- data/obj.data
- cfg/yolo-obj.cfg
- yolov4.conv.137
其中以上三個部分,這三個檔案是前面我們所建立或下載的,需輸入你存放位置的完整路徑,不可以只有打檔名。
- mjpeg_port 8090 -map
則是讓你可以在 http://ip-address:8090 看到train的過程,可以不輸入這句指令,只輸入 - -gpus
指定使用哪幾顆gpu。
沒有則這整項都不用。
./darknet detector train data/obj.data cfg/yolo-obj.cfg yolov4.conv.137
例如,你的ip是140.112.00.00
那你就開個網頁,輸入網址http://140.112.00.00:8090,就可以看訓練過程了,但圖跑得很慢就是了,網頁沒壞,只是很慢。的圖了。
我要看訓練成果!!
./darknet test /obj.data cfg / yolo-obj.cfg yolov4.weights /img/test.jpg
注意這邊有幾處要根據你的情況作修改
- yolov4.weights
是你剛剛的train的weights,也就是obj.data
裡面backup那項存放的位置的weights,
例如backup = / weights
你的weights會存在/weights/
這個資料夾下,進到裡面後會看到系統自動幫你的weights命名。
yolov4.weights要改成/weights/xxx.weights
(xxx要看你該資料夾裡面哪一個weights) - /img/test.jpg
就是你的測試圖片,一樣要記得給完整路徑
例如,/img/test.jpg
- 關於標注圖片,大概又可以寫一篇了…(累)
等下次剛好要標註資料再來筆記吧~ - (好像有些段落會被自動英翻中 有發現的話再麻煩跟我說 謝謝)