全部完成分为下面几个步骤:
1.制作自己的数据集-将visdrone转化为yolo所需的格式 (下面先完成这部分)
2.配置yolov3
3.训练验证及计算map
下篇链接:[https://blog.csdn.net/daisy_d_/article/details/105771633]
踩了很多坑,分享一下自己训练的经历~
我使用的visdrone数据集包含很多小目标,选择的darknet框架下的yolov3。也尝试了pytorch版本的不过刚开始效果不好,等的很着急后来放弃了,到后来才知道这个数据集现需要很长时间训练,我用的云服务器1080ti显卡,大概需要60个小时~~~
数据集下载链接:https://www.jianshu.com/p/62e827306fca
。使用的VisDrone2018-DET dataset 的trainset(1.44GB)和valset(0.07GB)
darknet的yolo下载链接:https://github.com/pjreddie/darknet.git
制作数据集
最终形成的数据集的格式:
images —— 存放.jpg图像
Annotations —— 存放图像对应的xml文件
ImagesSets/Main —— 存放用于train/test图像的名字列表txt
labels——标签
test.txt
train.txt
val.txt
我参考的链接:https://blog.csdn.net/qq_37775990/article/details/90145081
下面需要的代码我放在了百度网盘:
链接:https://pan.baidu.com/s/1QdTqD-T4zZ-0Vxuphtz_FA
提取码:gaiu
1.图片标注重命名(可做可不做,只是改变了名字)
使用 rename.py 对图像文件进行重命名,对标注文件进行重命名(两个步骤都要做,注意修改程序中的路径)会得到下面的效果,简单示例。
2.visdrone标注转换为VOC格式
运行main.py 进行转换,同样注意修改程序中的路径。注意需要新建对应文件夹Annotations_否则会报错。
visdrone的标注方式与yolo标注不一样。这个步骤是将annotations中的txt将标注转换为VOC格式的xml.
3.生成用于train、val的图像名字列表txt(生成于ImagesSets/Main下)
运行 trainnamelist.py 形成了列表txt。此处生成了四个文件(train.txt test.txt val.txt trainval.txt)可以根据自己需要修改生成相应的文件。
这个步骤是将数据库中的图像进行随机抽取,分成4部分,一部分作为train(训练),一部分作为validation(验证),一部分test(测试),(trainval暂时没明白。。)最后将这几部分图像的名字写入txt。
4.生成label文件夹和txt文件
运行label.py就会在目录下生成一个labels文件夹,三个txt文件。
lable.py下有类别,我这次只训练了10个类别,所以注释掉了第0类和第11类('ignored regions’和’others‘)加上了if判断语句,其他类别的id数值也需要-1。这样就少了第0类和第11类,整体只有10类了。 具体位置代码里注释了一下。
这个步骤是生成labels文件夹,里面就是适合yolov3的标注文件了,和图像名称一一对应,内容意义是:
(class, x_center , y_center , w , h)
目标类别 标注框中心x轴相对坐标 标注框长宽相对长度
因为坐标和长宽都是相对整幅图像长宽的比例,所以数值应该是0-1。
第一次写博客,有什么错误请多指教
我第一次转化数据集的时候花了一天多的时间才搞明白,如果你也是第一次不要着急。加油丫~~~