YOU ONLY LOOK ONCE
相關(guān)鏈接:http://guanghan.info/blog/en/my-works/train-yolo/
本文是在寧廣涵博客的基礎(chǔ)上垃杖,添加一些自己在訓(xùn)練中遇到的問題及解決方式丈屹,僅供學(xué)習(xí)與參考,同時也通過這樣的方式把訓(xùn)練過程記錄下來脉漏,方便自己下次訓(xùn)練袖牙。
寧廣涵已將Gihub上的源文件做了一些修改,可以點(diǎn)擊下載Darknet司忱。
配置環(huán)境:Ubuntu 14.04, CPU;
1. 采集樣本和注釋
i. 錄制一段視頻,并利用Opencv對幀進(jìn)行保存鳍烁,這樣很快就能采集上千張樣本繁扎;
ii. 標(biāo)記圖片中目標(biāo)的坐標(biāo),利用Bbox-Label-Tool比較方便爹梁;
2. 以Darknet的格式創(chuàng)建注釋
在這一步驟提澎,我們會產(chǎn)生一個darknet注釋文件和一個訓(xùn)練列表,txt
經(jīng)過BBox-Label-Tool產(chǎn)生的注釋文件格式如下:
Class_number
Box1_x1 Box1_y1 Box1_width Box1_height
Box2_x1 Box2_y1 Box2_width Box2_height
......
經(jīng)過convert.py轉(zhuǎn)換之后的注釋格式變?yōu)椋?/p>
Class_number Box1_x1_ratio Box1_y1_ratio Box1_width_ratio Box1_height_ratio
Class_number Box2_x1_ratio Box2_y1_ratio Box2_width_ratio Box2_height_ratio
請注意盼忌,每個圖片都有一個注釋文件谦纱,但我們只需要一個圖像的訓(xùn)練列表,為了方便服协,將images和labels兩個文件夾放到darknet-master/data/下;
為了方便理解偿荷,鏈接是生成的文件的格式示例:
Q:運(yùn)行convert.py的時候會遇到這樣的錯誤
A:將lines = txt_file.read().split('\t\n')改成lines = txt_file.read().split('\n'),主要因為linux和windows的讀取方式不同忍饰,不過windows下改成這個格式也只能在圖中標(biāo)記一個物體寺庄,如何更好的修改這段代碼,之后有時間再做調(diào)整斗塘;
3. 修改一些代碼
i. 在src/yolo.c?中改變class num 和class name馍盟,還需要修改其中的讀取訓(xùn)練列表的路徑等等;
如果想要訓(xùn)練新的類別贞岭,為了顯示正確的png標(biāo)簽文件,我們還需要運(yùn)行data/labels/make_l abels.py 以生成新的標(biāo)簽话速,并加入到labels文件夾下;
ii. 在 ctg/yolo.cfg 文件乳讥,改變output為(5x2+number of classes)x7x7活合,例如物赶,一個類別的話改為539,并且修改222行的classes為1(要訓(xùn)練的類別)
iii. 還需要一個pre-trained weights文件
4. 可以開始訓(xùn)練了告嘲,
進(jìn)入darknet-master根目錄奖地,先sudo make編譯一下,然后運(yùn)行:
./darknet yolo train cfg/yolo.cfg extraction.conv.weights
如果幸運(yùn)仰楚,你就可以開始訓(xùn)練了犬庇!
不過,我還是遇到了一些些問題:
深陷在這個bug里找不到出路捂襟,最后終于在vim 訓(xùn)練列表文件的時候發(fā)現(xiàn)了:
咦欢峰,什么時候后面多了一個^M?真是其他編輯器都沒有發(fā)現(xiàn)這個問題,只有vim顯示出來了宠漩,怪不得圖片加載不了...
vim下 :%s/^M//g 或者 :1,$s/^M//g 均可
補(bǔ)充一點(diǎn): ^M是使用 "CTRL-V CTRL-M" 而不是字面上的 ^M
最后懊直,可以開始訓(xùn)練了,因為剛剛訓(xùn)練上就敲了這篇文檔瘦陈,只是中間個效果成截圖:
我也很緊張,不知道最后能不能訓(xùn)練出模型蛾默,不過聽說沒有GPU的情況下要訓(xùn)練很久捉貌,不過就當(dāng)是熟悉一下配置訓(xùn)練過程啦...把訓(xùn)練過程及時記錄下來,方便下次的訓(xùn)練...小編是菜鳥牧挣,一周的努力才調(diào)通這個訓(xùn)練過程...不過