本文主要记录使用COCO 数据集训练darknet网络获取yolo权重的过程,主要包括:数据集处理及训练过程。
参考资料:
1.CSDN – 在COCO数据集中制作Darknet的训练集
2.Github – COCO_forYOLO
3.Github – hwrenx/coco2yolo
4.Github – philferriere/cocoapi (windows)
5.Github – AlexeyAB/darknet
6.博客园 – darknet-训练自己的yolov3模型
推荐使用:java – coco-to-yolo(包含完整流程)
推荐参考:Getting Started with Darknet YOLO and MS COCO for Object Detection
1 数据集处理
1.1 下载数据集
下载COCO 数据集,主要部分:
- 训练用的
train
数据集 - 验证用的
val
数据集 - 测试用的
test
数据集 - 对应的
annotations
数据集标注
将所有image
和annotations
解压到各自文件夹内即可
1.2 处理标签文件
需要进行的处理:
- 使用
COCO API
从annotation
的json
中提取出单个文件的标注 - 整合各个数据集中图片的绝对路径集合
- 修改
coco.data
文件
自己整理了一个脚本:Github – coco2yolo。下载后将两个脚本放在数据集根目录,运行coco2yolo.py
即可。
运行脚本前需要安装的库:
- pycocotools
- Cython
- matplotlib
其中Windows下是无法直接通过pip install
安装pycocotools的(作者没有考虑Windows环境),可能会出现无效参数/Wno-cpp
等错误,需要使用WIndows版本的pycocotools手动安装:
- 下载pycocotools(即cocoapi):philferriere/cocoapi (windows)
- 进入项目路径,执行
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)。
- 编译完成后到
C:\opencv_3.0\opencv\build\x64\vc14\bin
里找到以下文件放到darknet/build/darknet/x64
下面
opencv_world320.dll / opencv_world340.dll
opencv_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或路径错误
正文完