本文主要记录使用COCO 数据集训练darknet网络获取yolo权重的过程,主要包括:数据集处理及训练过程。
参考资料:
推荐参考:Getting Started with Darknet YOLO and MS COCO for Object Detection

1 数据集处理

1.1 下载数据集
训练用的train数据集验证用的val数据集测试用的test数据集对应的annotations数据集标注
将所有image和annotations解压到各自文件夹内即可
1.2 处理标签文件
需要进行的处理:
使用COCO API从annotation的json中提取出单个文件的标注整合各个数据集中图片的绝对路径集合修改coco.data文件
自己整理了一个脚本:Github - coco2yolo。下载后将两个脚本放在数据集根目录,运行coco2yolo.py即可。
运行脚本前需要安装的库:
pycocotoolsCythonmatplotlib
其中Windows下是无法直接通过pip install安装pycocotools的(作者没有考虑Windows环境),可能会出现无效参数/Wno-cpp等错误,需要使用WIndows版本的pycocotools手动安装:
进入项目路径,执行python ./PythonAPI/setup.py install完成安装
成功运行后会生成coco.data,用其覆盖掉darknet/cfg/coco.data,并在darknet/cfg下创建一个新的文件夹backup。

2 使用darknet

Windows下使用AlexeyAB的darknet:项目地址。使用build/darknet下的darknet.sln即可,注意版本要求和opencv依赖配置(具体要求见Github的README)。最好设置成Realease x64版本需要将cudnn路径加入到环境变量中:示例截图。OpenCV最好安装在C:\\opencv_3.0,且不可以使用3.1及以上的版本,对应issue。编译完成后到C:\opencv_3.0\opencv\build\x64\vc14\bin里找到以下文件放到darknet/build/darknet/x64下面opencv_world320.dll / opencv_world340.dllopencv_ffmpeg320_64.dll / opencv_ffmpeg340_64.dll
如果提示找不到cudnn64_7.dll,到path/to/your/cudnn/bin路径下拷贝一份
确认C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.1路径是否存在且包含bin和include,如果没有就从自己的CUDA路径下面拷贝一份(默认路径C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vx.x)
根据实际情况更改yolov3.cfg,参考链接
使用darknet.exe进行训练:darknet.exe detector train cfg/coco.data cfg/yolov3.cfg,训练时可以设置初始权重或中断恢复权重:darknet.exe detector train cfg/coco.data cfg/yolov3.cfg backup.weight,一个很方便的预训练卷积层权重:wget https://pjreddie.com/media/files/darknet53.conv.74
错误记录:
1.错误 error C2054 在“using”之后应输入“(” (编译源文件...)opencv版本错误(3.4.1+)
2.错误 error MSB3721 ... 已退出,返回代码为 1更换VS 2015
3.错误 error : expected a ";"更换VS 2015
4.错误 error C1083: 无法打开包括文件: “cudnn.h”: No such file or directory未在path中设置cudnn或路径错误
正文完