一、获取数据集
1、如果可以下载好标注好的数据集,那就直接使用即可,注意查看一下数据集的组织格式是否和VOC的格式相同。
2、如果没有现成的数据集,那么可能需要自己去标注,这个以后有机会再细说吧。需要使用一些标注工具,如labelImg,具体使用方法可以参考以下两篇文章!!!
二、下载并编译darknet(Ubuntu下)
1、下载编译
git clone https://github.com/pjreddie/darknet.git
cd darknet
make
2、编译完成之后,可以使用下面的命令来检验一下
./darknet
如果没有问题,就会输出以下信息:
usage: ./darknet <function>
3、如果想要支持GPU和OPENCV,可以在编译之前修改Makefile
,将所需编译的项的值修改为1即可,如下所示:
具体可以参考官方文档: https://pjreddie.com/darknet/install/
三、VOC数据集格式转YOLO数据格式
上篇文章已经详细说明了,传送门:VOC格式数据集转yolov3(darknet)格式
另外说明一点,可以在转换好格式后,在VOCdevkit
同级目录下,运行以下命令:
cat 2007_train.txt 2007_val.txt > train.txt
目的是将训练数据和验证数据合并成一个文件,都用来做训练,这个不是必须的,不过我看别人都是这么弄的,emmm!!!
四、参数修改
需要修改的地方主要有以下几项:
1、cfg/voc.data
文件:根据自己的实际路径修改即可。backup是用来存放训练之后的权重的。
2、data/voc.names
文件:根据自己数据集的实际种类和类别的名字进行修改。
3、cfg/yolov3-voc.cfg
文件:
filters
和classes
参数;一共有三个部分,快捷的办法就是直接搜索yolo
,然后将其上面的filters
和classes
改为自己所需的实际值。这两个值满足以下公式:
filters = 3*(5+len(classes));
classes = len(classes)
- 其他基础参数:比如训练时,将6、7两行解注释,3、4两行注释掉。其他如迭代次数等参数也可以根据需要自己去修改。
五、训练
1、下载darknet53的预训练模型
wget https://pjreddie.com/media/files/darknet53.conv.74
2、开始训练:
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
六、小结
如果你不想使用yolov3-voc.cfg
也是可以的,只需要选择自己想要使用的配置文件,然后预训练权重也选择和模型结构匹配的即可。
不同的配置文件对应着不同的网络结构(所以才要选择匹配的预训练权重)或者参数,例如为了模型小一些,你可以选择yolov3-tiny.cfg
,只要记住训练完成之后产生的权重文件对应的是yolov3-tiny
即可。这样,你在加载该权重文件的时候,将加载该权重的模型的结构也设置成yolov3-tiny
就可以。