YOLO3 Windows训练自己的数据集

本文详细介绍了如何使用YOLOv3进行目标检测训练的步骤,包括数据集准备、配置文件调整、预训练权重下载及训练过程。强调了数据集质量的重要性,如每个类别的图片数量、迭代次数、负样本的使用以及小目标检测技巧。
部署运行你感兴趣的模型镜像

下载VOCdevkit置于darknet-master\build\darknet\x64目录下

1.xml放Annotations img放JPEGImages
2.cd到VOCdevkit\VOC2007 运行
python test.py
在C:\darknet-master\VOCdevkit\VOC2007\ImageSets\Main生成train.txt test.txt val.txt(所有图像名字的序号)
3.cd到VOCdevkit同一目录下 运行

修改voc_label.py中的sets年份
修改voc_label.py中的classes名字
python voc_label.py

结果1.生成图像的绝对路径 2007_train.txt 2007_test.txt 2007_val.txt(所有图像的绝对路径)放到C:\darknet-master\build\darknet\x64\data
结果2.生成txt标签文件,在labels下

修改cfg/voc.data中的classes数目  voc.data中指定了train.txt test.txt路径  voc.name路径 训练结果保存路径
修改data/voc.name中的类别名字
修改cfg/yolov3-voc.cfg中的
[net]
# Testing
# batch=1        #这里的batch跟subdivisions原来不是注释掉的,但是训练后没成功,有的blog上说为1的时候太小难以收敛,但是不知道下面训练模式的 batch=64 subdivisions=8 会不会覆盖掉,总之注释掉后就成功了,不过这个脚本不是很明白,还来不及验证 
# subdivisions=1
# Training
 batch=64            
 subdivisions=8    
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改为3*(classes+5)即3*5+5=30
activation=linear
[yolo]
mask = 6,7,8
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改为标签类别个数,5类
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0            #1,如果显存很小,将random设置为0,关闭多尺度训练;(转自别的blog,还不太明白)
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改同上
activation=linear
 
[yolo]
mask = 3,4,5
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改同上
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0       
......
[convolutional]
size=1
stride=1
pad=1
filters=30        #---------------修改同上
activation=linear
 
[yolo]
mask = 0,1,2
anchors = 10,13,  16,30,  33,23,  30,61,  62,45,  59,119,  116,90,  156,198,  373,326
classes=5        #---------------修改同上
num=9
jitter=.3
ignore_thresh = .5
truth_thresh = 1
random=0        

5.下载卷积层的预训练权重(154 MB),然后放到目录中build\darknet\x64中
6.训练语句

cd C:\darknet-master\build\darknet\x64
darknet.exe detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74  -map

经验

  1. 数据集最好每个类有2000张图片,至少需要迭代2000*类的个数
  2. 数据集最好有没有标注的对象,即负样本,对应空的txt文件,最好有多少样本就设计多少负样本

为了小目标:

  1. 提升分辨率
  2. 在测试时候提升分辨率
  3. 数据集添加跟正样本数量一样多的负样本
  4. 数据集每个类至少2000张,训练迭代次数2000*classes个数
  5. 设置自己数据集的anchor

关于数据集的信息

  1. max_batches 最大训练次数:classes*2000 但不少于 4000
  2. 生成的txt标签文本 形如
<object-class> <x_center> <y_center> <width> <height>

然而:
- 代表物体类别的整数 ,从 0 到 (classes-1)
<x_center> <y_center> - 相对于整张图像长和宽的浮点数, 等同于区间 (0.0 to 1.0]
例如: = <absolute_x> / <image_width> or = <absolute_height> / <image_height>
注意: <x_center> <y_center> - 矩形框的中心 (并非左上角)

关于过拟合

形如你可以检测到数据集中训练过的图像,但是不能检测任何其他的图像. 你应该从Early Stopping Point:获得最终的权重
在这里插入图片描述
2.1. 首先,在文件 obj.data中你应该指定验证集的路径 valid = valid.txt (format of valid.txt as in train.txt),并且如果你没有验证集图像 , 就拷贝 data\train.txt 到 data\valid.txt.

2.2 如果训练在 9000 iterations后停了下来,为了验证之前的权重 使用命令行:

(If you use another GitHub repository, then use darknet.exe detector recall… instead of darknet.exe detector map…)

darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_7000.weights
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_8000.weights
darknet.exe detector map data/obj.data yolo-obj.cfg backup\yolo-obj_9000.weights

并且比较每个权重最后的输出曲线
选择拥有最高的mAP (mean average precision) 或 IoU (intersect over union)的权重文件
或者干脆训练的时候 命令行加上后缀 -map

darknet.exe detector train data/obj.data yolo-obj.cfg darknet53.conv.74 -map

mAP 值每4 Epochs会被计算一次,使用在obj.data file指定的valid=valid.txt 文件中的内容
(1 Epoch = images_in_train_txt / batch iterations)

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值