现在,我已经使用yolo_mark标注好了自己的数据集,接下来就可以进行训练的工作了。
数据集的标注请参考:YOLO(二):Yolo_mark使用教程。
这里我使用的是darknet这个开源的项目,在linux上进行训练。
一、获取darknet
首先,在github上获取到darknet的源码。
git clone [email protected]:pjreddie/darknet.git
它的软件环境要求是:
- OpenCV 2.x.x 和 OpenCV <= 3.4.0
- cuDNN v5-v7
- CUDA >= 7.5
我配置的是CUDA9.0,cuDNN7.0.5,OpenCV3.4.0。
二、编译
修改Makefile,因为我想使用GPU进行训练,并且有更好的可视化效果,所以我将GPU,CUDNN,OPENCV都设置为1。
执行make,会在当前目录下生成darknet可执行文件。
三、训练
因为我想用yolov3网络进行训练,所以我拷贝一份cfg/yolov3.cfg,另存为my_yolov3.cfg。
这里需要针对自己的数据集对my_yolov3.cfg做一些修改。
可以打开my_yolov3.cfg,搜索classes,将它的值修改为2,因为我数据集只有dog和cat两个类别。
搜索filters,将其值修改为21,(classes + 5)*3。
接着需要下载预训练权重,我这个下载的是darknet53.conv74:http://pjreddie.com/media/files/darknet53.conv.74。
将标注的数据集拷贝到darknet/data目录下。
最后,标注数据集时使用的my_obj.data拷贝到darknet/cfg目录下。将my_train.txt和my_obj.names拷贝到darknet/data目录下。
一切准备就绪之后,就可以开始训练了。在终端输入如下命令:
darknet detector train cfg/my_obj.data cfg/my_yolov3.cfg darknet53.conv.74
训练过程中会在darknet/backup文件夹下保存若干个.weigths文件。
四、测试
训练完成之后,就可以对训练的模型进行测试了。我选择其中一个生成的.weights文件进行测试。
在终端输入:
./darknet detect cfg/my_yolov3.cfg backup/my_yolov3_10000.weights data/test.jpg
检测结果如下: