Darknet YOLO——訓練自己的數據集,檢測指定的物體
一、獲取訓練集的txt、xml文件
(1)獲取訓練集樣本(我這裏訓練集有兩類,每一類10張)
(2)利用LabelImg標記訓練樣本,分別獲得每張圖片對應的.txt、.xml文件。
①添加自己的類
②打開工具,標記生成對應文件
ctrl+s保存
③改變保存的模式
這樣就保存了一張圖片的.txt、.xml文件。之後點擊下一張,同樣的操作。
④折耳貓訓練數據集
哈士奇訓練數據集
二、新建文件夾與數據整理
(1)在如圖所示對應路徑下新建VOCdevkit文件夾
(2)在VOCdevkit文件夾下創建兩個文件夾:JEPGImages和VOC2019
1)將訓練圖片全部放到JPEGImages文件夾中
2)在VOC2019文件夾下再新建三個文件夾:Annotations;labels;ImageSets
2.1)將之前生成的.xml文件放入Annotations文件夾
2.2)將之前生成的.txt文件放入labels文件夾
2.3)在ImageSets文件夾下再新建一個文件夾Main
並在main文件夾下新建兩個文本文檔
(3)運行如下代碼,得到train.txt和val.txt。這裏明顯file_num<776,所以val.txt不會有數據。
import os
from os import listdir, getcwd
from os.path import join
if __name__ == '__main__':
source_folder='E:\\ck_tools\\darknet\\darknet-master\\scripts\\VOCdevkit\\JEPGImages'
dest='E:\\ck_tools\\darknet\\darknet-master\\scripts\\VOCdevkit\\VOC2019\\ImageSets\\Main\\train.txt'
dest2='E:\\ck_tools\\darknet\\darknet-master\\scripts\\VOCdevkit\\VOC2019\\ImageSets\\Main\\val.txt'
file_list=os.listdir(source_folder)
train_file=open(dest,'a')
val_file=open(dest2,'a')
for file_obj in file_list:
file_path=os.path.join(source_folder,file_obj)
file_name,file_extend=os.path.splitext(file_obj)
file_num=int(file_name)
if(file_num<776):
train_file.write(file_name+'\n')
else :
val_file.write(file_name+'\n')
train_file.close()
val_file.close()
得到的train.txt文件:
(4)修改 voc_label.py
(5)運行 voc_label.py,得到如下三個文件
(6)在如下路徑新建兩個文件夾:obj;weights
並將之前的訓練圖片樣本和對應的txt文件放入obj文件夾;weights文件夾用來存放之後訓練生成的權重文件
(7)修改2019_train.txt和2019_val.txt(2019_val.txt爲空不用修改),改爲obj中圖片的絕對路徑。
並把2019_train.txt複製到如下路徑:
三、修改文件
(1)修改voc.data
(2)修改voc.names
(3)修改yolov3-voc.cfg
一共要改三處這樣的地方,每處改如下兩個參數,我這裏類別數classes=2,filters=(classes+5)*3=21;
四、開始訓練
(1)下載預訓練的權重文件
(2)在如下路徑打開cmd窗口,輸入:darknet.exe detector train data\voc.data yolov3-voc.cfg darknet53.conv.74 data\weights
此時 如果出現can not open file xxxxxxxxxx
解決方法:
①用notepad++打開2019_train.text;
②點擊 視圖==》顯示符號==》顯示所有字符
③點擊 編輯==》文檔格式轉換==》轉爲Unix(LF)
修改後繼續運行如下,接下來就是等待。。。。。。
部分參數指標 :
Avg IOU:當前迭代中,預測的box與標註的box的平均交併比。越接近於1越優。
Class:標註物體的分類準確率。越接近於1越優。
Obj:越接近於1越優。
No Obj:越接近於0越優。
五、結果測試
(1)訓練結果如下圖所示,我就訓練到這裏了。
(2)在weights文件夾下生成了相應的權重,並將迭代2000次的權重拷貝到如下目錄:
(3)準備測試圖片進行測試
1)測試圖片
2)測試 打開cmd窗口,輸入 darknet.exe detector test data\voc.data yolov3-voc.cfg yolov3-voc_2000.weights -thresh 0.8
3)測試結果
當然,博客中訓練的樣本,迭代的次數都是不夠的,這裏只是將學習的方法總結記錄,以後就不用到處找,一個一個試了(這個過程很痛苦…)。
參考:
①https://pjreddie.com/darknet/yolo/
②https://blog.csdn.net/maweifei/article/details/81148414
③https://blog.csdn.net/qq_36417014/article/details/88577729