Darknet YOLO——訓練自己的數據集,檢測指定的物體

                                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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章