关键点在于:弄清YOLOv3数据集的组织形式,需要按照这个生成数据。
一. 训练环境
1. YOLOv3编译:OpenCV+GPU
git clone https://github.com/pjreddie/darknet
cd darknet
vim ...
2. 下载预训练权重(只包含卷积层)
wget https://pjreddie.com/media/files/darknet53.conv.74
二. 数据准备
0. 因为YOLOv3提供了一个将VOC数据集转成自己训练的数据集格式的工具:scripts/voc_label.py,
因此,训练数据只需要按VOC数据集的格式准备就好, 再执行voc_label.py即可
另一种思路,直接生成YOLO格式的?YOLO的格式更简洁些。
1. VOC2012
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/
研究下文件组织结构
Annotations:用于存放与图片对应的XML文件
JPEGImages: 存放所有的图片,png是否可以?
2. 对自己的图片数据打标,按照YOLOv3的方式准备数据集
人工选取: l78z/projects/video_roi/video_roi_manual.py
自动保存: l78z/projects/video_roi/video_roi_crop.py
其他:labelImg: https://github.com/tzutalin/labelImg#macos
很多教程是基于次标注工具产出数据,再转成yolo训练数据
该工具支持直接生成YOLO格式,
基于cvui搞个工具?
ctrl+t , 打开新视频
左键选择,右键取消
3. 使用 scripts/voc_label.py 生成
三、 修改YOLOv3的配置文件
1. data/voc.names #修改成自己的分类
2. cfg/voc.data
classes = N #(N为自己的分类数量,如有10类不同的对象,N = 10)
train = /home/XXX/darknet/trainImagePath.txt # 训练集完整路径列表
valid = /home/XXX/darknet/validateImagePath.txt # 测试集完整路径列表
names = data/voc.names # 类别文件
backup = backup #(训练结果保存在darknet/backup/目录下)
3. cfg/yolov3-voc.cfg
classes = N (N为自己的分类数)
filters = 3*(classes+1+4), 修改每一个[yolo]层(一共有3处)之前的filters.
(可选) 修改训练的最大迭代次数, max_batches = N
四、 YOLOv3训练&测试
训练:
./darknet detector train cfg/voc.data cfg/yolov3-voc.cfg darknet53.conv.74
测试:
./darknet detector test cfg/voc.data cfg/yolov3-voc.cfg backup/yolov3-voc_final.weights 01.jpg
五、题外话,说说视频标注工具的设计
1. 读取video_list.txt,创建目录文件,下载视频,存放至约定的文件夹,文件价格结构:
video_list.txt, video_id \t video_download_url
Videos/ 用于存放下载的视频
Manual/ 用于存放用户选择的图片、区域、区域裁剪图
JPEGImages/ 存放自动生成的图片
Annotations/ 用于图片对应的选取信息
class.txt 所有分类汇总
class/ 选取区域的图像 ?
class1/file1.jpg
2. 自动定位至还没有标注数据的,显示标注进度。
3. 快捷键设定:按游戏的设定w前进帧,s后退帧,d下一个,a上一个(上下切换视频,左右调节帧,方向键位于右侧,影响鼠标操作),上下切换时,自动保存。
4. 拖拽选中区域,要有x/y辅助线,右键取消上一次选中,
5. 选中结束,弹窗,类名,设置类名时,除了文字外有对应的缩略图
6. 保存VOC格式, 全部结束后,自动生成YOLO格式。
参考文档:
https://blog.csdn.net/dcrmg/article/details/81296520
https://www.jianshu.com/p/f4518fe04da1
https://www.jianshu.com/p/91eafe0f3719
https://www.cnblogs.com/pprp/p/9525508.html
网友评论