我用的Ubuntu 16.04,Windows下面有些软件包不好装,后面就放弃了。
1.首先我们需要一些数据集。
如果是我们自己有数据集的话,我们就需要去打标签啥的(网上说的是用工具:LabelImg),具体一点的话可以参考文章。这里拿WiderFace数据集来把这个思想跑通。我们首先进入数据集官网WIDER FACE: A Face Detection Benchmark。之后我们下载一下文件:
红色框框住的是数据集,黑色框框住的是lable。下载完成后解压,放入文件夹下面,最总的文件目录如下图所示:
wider_face_train_bbx_gt.txt是边框数据集,格式如下:
数据说明:
第1行:图片的位置和名称;
第2行:边框的数量;
第3~n行:每个人脸的边框和属性:
- 其中1~4位是
x1, y1, w, h
- blur:模糊,0清晰、1一般、2严重;
- expression:表情,0正常、1夸张;
- illumination:曝光,0正常、1极度;
- occlusion:遮挡,0无、1部分、2大量;
- pose:姿势,0正常,1非典型;
2.之后我们需要将数据转化为我们需要的格式。
为了符合训练要求,需要转换wider数据集中的边框格式,为训练要求的边框格式。转换源码。遍历数据文件夹,逐行解析不同格式的数据,写入文件。注意:
- 物体框,Wider的数据格式是x,y,w,h,而训练的数据格式是xmin,ymin,xmax,ymax;
- 只检测人脸一个类别,则类别索引均为0;
具体参考工程的wider_annotation.py
脚本。总的来说的话就是用脚本将数据格式转化为YOLO支持的。
3.之后我们下载yolo3的官方权重,并将其转化为keras读取的格式。
在转化之前,我们需要安装一些软件包,这个是别人代码的一个要求,尽量满足的话最好,满足不了估计也没太大问题,我应该就有些没有满足,但是依然可以跑。
如果是GPU的话,那么这个也有一些要求:
先运行convert.py将cfg模型+weights文件转化为yolo.h5文件作为预训练模型,如果你这一步没有跑通的话,我之后会放百度云盘的链接,所以不要方,嘻嘻嘻嘻。
python convert.py yolov3.cfg yolov3.weights yolo_weights.h5
4.训练网络
修改这五个变量的路径,使其找到相应的文件。
annotation_path = 'wider_dataset/WIDER_train.txt' # 数据
classes_path = 'configs/wider_classes.txt' # 类别
log_dir = 'logs/' # 日志文件夹
pretrained_path = 'model_data/yolo_weights.h5' # 预训练模型
anchors_path = 'configs/yolo_anchors.txt' # anchors
创建模型:
input_shape
是输入图像的尺寸;- anchors是检测框的尺寸;
num_classes
是类别数;freeze_body
,模式1是全部冻结,模式2是训练最后三层;weights_path
,预训练权重的路径;- logging是TensorBoard的回调,checkpoint是存储权重的回调;
并且,如果电脑配置低的话,需要调小batch_size以及epoch的次数,否则会在unfreeze阶段产生out of memory的错误
更具体的代码的编写的话,可以参考文章:目标检测 YOLO v3 训练 人脸检测模型 - 简书。
5.验证
训练完成之后就可以跑测试的代码。yolo3_predict_pic.py测试图片,yolo3_predict_video.py测试视频。
如果你想入坑的话,下面有一些链接您可以深入入坑:GitHub - SpikeKing/keras-yolo3-detection: YOLO v3 物体检测算法。
参考链接:
WiderFace数据集用于训练人脸检测模型_wider face数据集数据说明-CSDN博客 人脸数据集下载。
目标检测 YOLO v3 训练 人脸检测模型 - 简书 讲的比较详细的简书教程。
GitHub - SpikeKing/keras-yolo3-detection: YOLO v3 物体检测算法 github代码加微信公众号代码详解。
目标检测:YOLOv3: 训练自己的数据_yolov3训练小目标-CSDN博客 csdn博客写的比较全面。
最后附上没有数据集的完整目录文件,以及权重文件等等,注意这里面是没有数据集的,您需要加数据集进去才可以跑通。链接:https://pan.baidu.com/s/1aYoA2mhsy0_a47_7HI8iLg 密码:z4gi
我的微信公众号名称:小小何先生
公众号介绍:主要研究强化学习、计算机视觉、深度学习、机器学习等相关内容,分享学习过程中的学习笔记和心得!期待您的关注,欢迎一起学习交流进步!