YOLO V3 训练自己的数据
网上的相关内容有不少,整个训练的过程大同小异:
- 数据收集
- 数据标定
- 数据类型转换
- 配置网络训练的文件
- 开始训练
下面分布说明。
数据收集
说到收集图像数据,首先想到的就是使用现成的,最好是标定过的数据库。常见的数据库,比如ImageNet, VOC, CoCo。不过当时并没有找到我想要的图片集,只能通过百度图片,谷歌图片下载了每类各400+图片。这里要强调的是,通常训练自己的数据集,是为了在实际的场景中使用的。因为工作环境不同(明暗,距离),相机不同,所以在实际场景中获取的图片通常与数据库或者是网络上的图片差别很大(网上搜集到的图片大多质量堪忧)。所以考虑到网络的实用性,还是需要训练集,测试集与实际使用图片相匹配;换句话说,在大多数情况下,特定的任务需要我们自己采集数据,创建图片集。(通常训练集可以混合网上图片,增加数据量;但测试集应该主要是自定义的数据)
数据标定
这里我们用到一个叫作Bbox_Labelling_Tool的标定工具。原工具只能1:1显示图片,当图片过大时(现在相机像素普遍很高),只有局部图像显示在屏幕上,给标定造成困难。为此,我向工具中添加了一个缩放的功能,能调节图像大小,完整显示图片。新的工具在这里:Bbox Labelling Tool。注意,要使用multi_classes的分支(branch)的代码。
数据转换
Bbox_Labelling_Tool生成的标注类型如下涂图所示:
简单解释一下:
第一行代表对应图片包含的边界框数量,之后的每行表示一个边界框的信息:
【边界框数量】
【左上角x坐标】【左上角y坐标】【右下角x坐标】【右下角y坐标】【物体类型】
【左上角x坐标】【左上角y坐标】【右下角x坐标】【右下角y坐标】【物体类型】
yolo接受的标注文件有一些差异。如下图:
简单解释一下:
每一行代表一个边界框:
【物体类型】【边界框中心x坐标】【边界框中心y坐标】【边界框宽度】【边界框高度】
【物体类型】【边界框中心x坐标】【边界框中心y坐标】【边界框宽度】【边界框高度】
要进行文件转换,这里同样提供一个简单的转换工具。将文件中的路径配置以下就可以使用了。