Darknet YOLO——训练自己的数据集,检测指定的物体
(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,得到如下三个文件
并将之前的训练图片样本和对应的txt文件放入obj文件夹;weights文件夹用来存放之后训练生成的权重文件
(7)修改2019_train.txt和2019_val.txt(2019_val.txt为空不用修改),改为obj中图片的绝对路径。
(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