Darknet YOLO——训练自己的数据集,检测指定的物体

                                Darknet YOLO——训练自己的数据集,检测指定的物体

一、获取训练集的txt、xml文件

(1)获取训练集样本(我这里训练集有两类,每一类10张)
Darknet YOLO——训练自己的数据集,检测指定的物体_第1张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第2张图片

(2)利用LabelImg标记训练样本,分别获得每张图片对应的.txt、.xml文件。
①添加自己的类
Darknet YOLO——训练自己的数据集,检测指定的物体_第3张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第4张图片
②打开工具,标记生成对应文件
Darknet YOLO——训练自己的数据集,检测指定的物体_第5张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第6张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第7张图片

Darknet YOLO——训练自己的数据集,检测指定的物体_第8张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第9张图片
ctrl+s保存
Darknet YOLO——训练自己的数据集,检测指定的物体_第10张图片
③改变保存的模式
Darknet YOLO——训练自己的数据集,检测指定的物体_第11张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第12张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第13张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第14张图片
这样就保存了一张图片的.txt、.xml文件。之后点击下一张,同样的操作。
Darknet YOLO——训练自己的数据集,检测指定的物体_第15张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第16张图片
④折耳猫训练数据集
Darknet YOLO——训练自己的数据集,检测指定的物体_第17张图片
哈士奇训练数据集
Darknet YOLO——训练自己的数据集,检测指定的物体_第18张图片

二、新建文件夹与数据整理

(1)在如图所示对应路径下新建VOCdevkit文件夹
Darknet YOLO——训练自己的数据集,检测指定的物体_第19张图片
(2)在VOCdevkit文件夹下创建两个文件夹:JEPGImages和VOC2019
Darknet YOLO——训练自己的数据集,检测指定的物体_第20张图片

1)将训练图片全部放到JPEGImages文件夹中
Darknet YOLO——训练自己的数据集,检测指定的物体_第21张图片
2)在VOC2019文件夹下再新建三个文件夹:Annotations;labels;ImageSets
Darknet YOLO——训练自己的数据集,检测指定的物体_第22张图片
2.1)将之前生成的.xml文件放入Annotations文件夹
Darknet YOLO——训练自己的数据集,检测指定的物体_第23张图片
2.2)将之前生成的.txt文件放入labels文件夹
Darknet YOLO——训练自己的数据集,检测指定的物体_第24张图片

2.3)在ImageSets文件夹下再新建一个文件夹Main
Darknet YOLO——训练自己的数据集,检测指定的物体_第25张图片
并在main文件夹下新建两个文本文档
Darknet YOLO——训练自己的数据集,检测指定的物体_第26张图片
(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()

Darknet YOLO——训练自己的数据集,检测指定的物体_第27张图片
得到的train.txt文件:
Darknet YOLO——训练自己的数据集,检测指定的物体_第28张图片
(4)修改 voc_label.py
Darknet YOLO——训练自己的数据集,检测指定的物体_第29张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第30张图片
(5)运行 voc_label.py,得到如下三个文件
Darknet YOLO——训练自己的数据集,检测指定的物体_第31张图片

(6)在如下路径新建两个文件夹:obj;weights
Darknet YOLO——训练自己的数据集,检测指定的物体_第32张图片

并将之前的训练图片样本和对应的txt文件放入obj文件夹;weights文件夹用来存放之后训练生成的权重文件
Darknet YOLO——训练自己的数据集,检测指定的物体_第33张图片
(7)修改2019_train.txt和2019_val.txt(2019_val.txt为空不用修改),改为obj中图片的绝对路径。
Darknet YOLO——训练自己的数据集,检测指定的物体_第34张图片

并把2019_train.txt复制到如下路径:
Darknet YOLO——训练自己的数据集,检测指定的物体_第35张图片

三、修改文件

(1)修改voc.data
Darknet YOLO——训练自己的数据集,检测指定的物体_第36张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第37张图片
(2)修改voc.names
Darknet YOLO——训练自己的数据集,检测指定的物体_第38张图片
(3)修改yolov3-voc.cfg
Darknet YOLO——训练自己的数据集,检测指定的物体_第39张图片
一共要改三处这样的地方,每处改如下两个参数,我这里类别数classes=2,filters=(classes+5)*3=21;
Darknet YOLO——训练自己的数据集,检测指定的物体_第40张图片

四、开始训练

(1)下载预训练的权重文件
Darknet YOLO——训练自己的数据集,检测指定的物体_第41张图片
(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;
Darknet YOLO——训练自己的数据集,检测指定的物体_第42张图片
②点击 视图==》显示符号==》显示所有字符
Darknet YOLO——训练自己的数据集,检测指定的物体_第43张图片
③点击 编辑==》文档格式转换==》转为Unix(LF)
Darknet YOLO——训练自己的数据集,检测指定的物体_第44张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第45张图片

修改后继续运行如下,接下来就是等待。。。。。。
Darknet YOLO——训练自己的数据集,检测指定的物体_第46张图片

部分参数指标 :

Avg IOU:当前迭代中,预测的box与标注的box的平均交并比。越接近于1越优。
Class:标注物体的分类准确率。越接近于1越优。
Obj:越接近于1越优。
No Obj:越接近于0越优。

五、结果测试

(1)训练结果如下图所示,我就训练到这里了。
Darknet YOLO——训练自己的数据集,检测指定的物体_第47张图片
(2)在weights文件夹下生成了相应的权重,并将迭代2000次的权重拷贝到如下目录:
Darknet YOLO——训练自己的数据集,检测指定的物体_第48张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第49张图片

(3)准备测试图片进行测试
1)测试图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第50张图片
2)测试 打开cmd窗口,输入 darknet.exe detector test data\voc.data yolov3-voc.cfg yolov3-voc_2000.weights -thresh 0.8
在这里插入图片描述
3)测试结果
Darknet YOLO——训练自己的数据集,检测指定的物体_第51张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第52张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第53张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第54张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第55张图片
Darknet YOLO——训练自己的数据集,检测指定的物体_第56张图片
当然,博客中训练的样本,迭代的次数都是不够的,这里只是将学习的方法总结记录,以后就不用到处找,一个一个试了(这个过程很痛苦…)。

参考:
①https://pjreddie.com/darknet/yolo/
②https://blog.csdn.net/maweifei/article/details/81148414
③https://blog.csdn.net/qq_36417014/article/details/88577729

你可能感兴趣的:(YOLO)