darknet yolo标注、训练详细说明

文章目录

  • 1、标注数据
    • 1.1、标注
    • 1.2、生成训练列表文件train.txt
    • 1.3、转换数据标注格式
  • 2、训练数据整理
    • 2.1、修改train.txt路径
    • 2.2、修改yolov3.cfg
    • 2.3、obj.name和obj.data
    • 2.4、训练脚本文件trian.sh
    • 2.5、测试脚本文件test.sh
  • 3、训练

本文对应的脚本文件和程序下载链接 darkent yolo自定义数据标注训练全流程说明示例,也可发私信获取。

1、标注数据

使用labelImg.exe工具对数据进行标注,默认使用voc的数据集格式,之后使用脚本转换为yolo专用的数据格式,并且生成一些训练依赖的准备数据。
darknet yolo标注、训练详细说明_第1张图片

准备工作:

  • (1)执行脚本 0——清理train文件下的img、xml、txt文件文件 ,将上次训练的所有数据删除(需要的话进行备份)
  • (2)复制训练图片到 train/JPEGImages 目录下 (图片过大建议等比缩放到1080以下)

exe和train的目录结构
darknet yolo标注、训练详细说明_第2张图片darknet yolo标注、训练详细说明_第3张图片

1.1、标注

使用脚本 1——LabelImg.cmd 打开工具,
按钮 Open Dir 选择待标注的图片数据目录 这里为 to_path/train/JPEGImages
按钮 Change Save Dir,选择存放标注文件xml目录,to_path/train/Annotations
darknet yolo标注、训练详细说明_第4张图片

加载图片之后,点击 Edit label按钮 标注目标的类别标签
darknet yolo标注、训练详细说明_第5张图片
按键 a 、d 切换图片, 按键 w 开始绘制标准框, ctrl+s 保存当前标注图片数据。

详细参考互联网内容,搜索 yolov3标注自定义数据。标注完成后,目录下train/Annotations会得到每一张图片对应的的xml标注文件,
darknet yolo标注、训练详细说明_第6张图片darknet yolo标注、训练详细说明_第7张图片

1.2、生成训练列表文件train.txt

训练需要给出所有图片的绝对地址,这里注意,标注机器可能和后期训练不在一个机器,路径会变化,后期根据实际路径进行批量修改替换。

执行脚本 2——Label_generate_traintxt.cmd 即可,会在当前目录生成train.txt文件。如下
darknet yolo标注、训练详细说明_第8张图片
红框目录可能变化,可以通过修改脚本的参数,自动生成
darknet yolo标注、训练详细说明_第9张图片

1.3、转换数据标注格式

先修改脚本文件 exe/label_conver_voc_2_yolo.py 中的classes 列表为标注工具中的标签名,例如有4个标签 car,huoche,guache和keche,那么将之前行用#注释,修改如下图。
darknet yolo标注、训练详细说明_第10张图片

修改后保存之后,执行脚本 3——Label_conver_voc_2_yolo.cmd ,之后可以在目录 train\labels看到txt格式的标注文件
darknet yolo标注、训练详细说明_第11张图片
darknet yolo标注、训练详细说明_第12张图片
格式为 标签序号 x y w h :这里标签序号从0开始,值为python脚本中 classes 列表的下标;位置为相对图像宽高尺寸的百分比例。

这里实际是通过标注文件目录下train/Annotations的xml文件转换得到,一一对应(txt,xml,图片都要一一对应)。

可能出现的问题:

  • LabelImage.exe标注得到的xml文件中图像宽高尺寸为0,导致txt转换错误,训练时报错。脚本使用PIL库增加验证修复环节,保证转换正确无误。

    darknet yolo标注、训练详细说明_第13张图片
  • 提示标签不存在:因为标注时lable输入错误,和脚本中的classes列表元素不一致

2、训练数据整理

在训练机器上的训练工具目录darknet下,拷贝标注文件目录train和列表文件train.txt新建训练目录如data-vehicle-0926-772,这里的目录结构如下
darknet yolo标注、训练详细说明_第14张图片darknet yolo标注、训练详细说明_第15张图片

2.1、修改train.txt路径

修改图片列表文件路径的真实路径,前面 1.2、 生成训练列表文件train.txt 已经说明。注意要换行格式,要求unix、utf8格,否可能在训练出错、但会提示STB类似错误。

2.2、修改yolov3.cfg

从darknet目录复制一份原始yolov3.cfg文件到当前训练目录。修改地方有两快

  • (1) 修改网络结构参数

    找到cfg文件中的 所有[yolo]标签段(共3个),修改红框中的数据
    darknet yolo标注、训练详细说明_第16张图片
    classes修改为标注时的类别数量,例如4类,filters修改 (类别数+5)*3,这里就修改为(4+5)*3 = 27。(后期其他类别对应修改即可)
    注意,一共是修改3组数据。

  • (2) 修改训练参数

    这里参数比较专业,在大量数据训练时,需要不断调参设计。当前我们使用默认设计。训练时使用 batch=64, subdivision=16,如果机器GPU性能好显存足够,可以将subdivision降低为8、4、2等(3090可以修改为2)。
    darknet yolo标注、训练详细说明_第17张图片

2.3、obj.name和obj.data

照着修改即可
darknet yolo标注、训练详细说明_第18张图片

2.4、训练脚本文件trian.sh

脚本内容为

cd ..
./darknet detector train data-vehicle-0926-772/obj.data data-vehicle-0926-772/yolov3.cfg /yolov3.cfg darknet53.conv.74 -i 0 -clear

例如机器上已有的脚本文件为
在这里插入图片描述

2.5、测试脚本文件test.sh

(训练完成后进行)使用训练的指定模型文件对图片进行测试,并生成结果图片。
例如在服务器的darknet目录下执行

./darknet 
	detector 
	test 
	car-0612-400/obj.data 
	car-0612-400/yolov3-tiny.cfg 
	car-0612-400/weights/yolov3-tiny_best.weights  
	-i 0 -thresh 0.25 
	./car-0612-400/train/JPEGImages/11.jpg 
	-ext_output

控制台会打印检测的结果,运行完成后,会生成一个 predictions.jpg 的文件,
darknet yolo标注、训练详细说明_第19张图片

3、训练

训练数据目录下,执行train.sh训练脚本即可,根据控制台训练数据输入检查是否存在错误,进行针对性调整。
正式训练时,后台执行,使用 命令 nohup train.sh & 即可, 生成nohup.out 的训练日志。

darknet yolo标注、训练详细说明_第20张图片
训练中间的输出,关注中间的 avg loss,直观上一般越低越好。
darknet yolo标注、训练详细说明_第21张图片
后面可以使用脚本drawLossPlot.py绘制loss(train)曲线
darknet yolo标注、训练详细说明_第22张图片

你可能感兴趣的:(深度学习框架,#darknet,YOLO,深度学习,lableme,标注,训练)