小白train自己的YOLO v4

jennyTurtle
7 min readMay 4, 2020

--

  • 本篇以我自己為例,我的項目只有一個類別,也就是“有”或“沒有”。
  • 我自己是在終端機(terminal)進行操作。
  • 其實本篇大部分就是我個人照個官網做,然後把英文翻成中文呈現給大家。

正文開始...
總需要新增3個檔案

  1. yolo-obj.cfg
  2. obj.names
  3. obj.data

下載

  1. git clone https://github.com/AlexeyAB/darknet.git
  2. 或者到到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.cfg
vim yolo-obj.cfg

vim:用編輯器編輯的意思,你也可以用其他編輯軟件(vs,sublime…打開yolo-obj.cfg來編輯內容)

  1. 進入 darknet/cfg 資料夾
  2. 複製 yolov4-cusom.cfg 並命名為 yolo-obj.cfg
  3. 打開 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檔

  1. darknet/data/ 資料夾中,新增 obj.names
  2. 裡面放你想要物件的顯示的名稱,例如我只有一個物件: cat

(2.) 如果有兩個物件: cat, dog

設定 obj.data檔

先在 darknet/data/ 資料夾中,新增 obj.data

obj.data
  1. classes = 種類數
  2. train = 一個 .txt,放訓練資料的詳細位置
/data/train.txt

3. valid = 一個 .txt,放驗證資料的詳細位置

/data/valid.txt

4. names = 剛剛我們製作的那個 obj.names 檔案的位置

5. backup = 你的weights 要存在哪裡

compile on Linux

darknet/ 資料夾下

  1. 修改 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
  • 關於標注圖片,大概又可以寫一篇了…(累)
    等下次剛好要標註資料再來筆記吧~
  • (好像有些段落會被自動英翻中 有發現的話再麻煩跟我說 謝謝)

--

--