YOLOV3:You Only Look Once 目标检测模型在 Pytorch 当中的实现
2021 年 10 月 12 日更新: 进行了大幅度的更新,对代码的模块进行修改,加了大量注释。
目录
- 性能情况 Performance
- 所需环境 Environment
- 文件下载 Download
- 训练步骤 How2train
- 预测步骤 How2predict
- 评估步骤 How2eval
- 参考资料 Reference
性能情况
训练数据集 | 权值文件名称 | 测试数据集 | 输入图片大小 | mAP 0.5:0.95 | mAP 0.5 |
---|---|---|---|---|---|
COCO-Train2017 | yolo_weights.pth | COCO-Val2017 | 416x416 | 38.0 | 67.2 |
所需环境
torch == 1.2.0 详情请看 requirements.txt,文件具有一定兼容性,已测试 pytorch1.7 和 1.7.1 可以正常运行。
文件下载
训练所需的 yolo_weights.pth 可以在百度云下载。 链接: https://pan.baidu.com/s/1ncREw6Na9ycZptdxiVMApw 提取码: appk
VOC 数据集下载地址如下,里面已经包括了训练集、测试集、验证集(与测试集一样),无需再次划分: 链接: https://pan.baidu.com/s/1YuBbBKxm2FGgTU5OfaeC5A 提取码: uack
训练步骤
a、训练 VOC07+12 数据集
- 数据集的准备 本文使用 VOC 格式进行训练,训练前需要下载好 VOC07+12 的数据集,解压后放在根目录
- 数据集的处理 修改 voc_annotation.py 里面的 annotation_mode=2,运行 voc_annotation.py 生成根目录下的 2007_train.txt 和 2007_val.txt。
- 开始网络训练 train.py 的默认参数用于训练 VOC 数据集,直接运行 train.py 即可开始训练。
- 训练结果预测 训练结果预测需要用到两个文件,分别是 yolo.py 和 predict.py。我们首先需要去 yolo.py 里面修改 model_path 以及 classes_path,这两个参数必须要修改。 model_path 指向训练好的权值文件,在 logs 文件夹里。 classes_path 指向检测类别所对应的 txt。 完成修改后就可以运行 predict.py 进行检测了。运行后输入图片路径即可检测。
b、训练自己的数据集
- 数据集的准备 本文使用 VOC 格式进行训练,训练前需要自己制作好数据集, 训练前将标签文件放在 VOCdevkit 文件夹下的 VOC2007 文件夹下的 Annotation 中。 训练前将图片文件放在 VOCdevkit 文件夹下的 VOC2007 文件夹下的 JPEGImages 中。
- 数据集的处理 在完成数据集的摆放之后,我们需要利用 voc_annotation.py 获得训练用的 2007_train.txt 和 2007_val.txt。 修改 voc_annotation.py 里面的参数。第一次训练可以仅修改 classes_path,classes_path 用于指向检测类别所对应的 txt。 训练自己的数据集时,可以自己建立一个 cls_classes.txt,里面写自己所需要区分的类别。 model_data/cls_classes.txt 文件内容为:
python
cat
dog
...
修改 voc_annotation.py 中的 classes_path,使其对应 cls_classes.txt,并运行 voc_annotation.py。
- 开始网络训练 训练的参数较多,均在 train.py 中,大家可以在下载库后仔细看注释,其中最重要的部分依然是 train.py 里的 classes_path。 classes_path 用于指向检测类别所对应的 txt,这个 txt 和 voc_annotation.py 里面的 txt 一样!训练自己的数据集必须要修改! 修改完 classes_path 后就可以运行 train.py 开始训练了,在训练多个 epoch 后,权值会生成在 logs 文件夹中。
- 训练结果预测 训练结果预测需要用到两个文件,分别是 yolo.py 和 predict.py。在 yolo.py 里面修改 model_path 以及 classes_path。 model_path 指向训练好的权值文件,在 logs 文件夹里。 classes_path 指向检测类别所对应的 txt。 完成修改后就可以运行 predict.py 进行检测了。运行后输入图片路径即可检测。
预测步骤
a、使用预训练权重
- 下载完库后解压,在百度网盘下载 yolo_weights.pth,放入 model_data,运行 predict.py,输入
python
img/street.jpg
- 在 predict.py 里面进行设置可以进行 fps 测试和 video 视频检测。
b、使用自己训练的权重
- 按照训练步骤训练。
- 在 yolo.py 文件里面,在如下部分修改 model_path 和 classes_path 使其对应训练好的文件; model_path 对应 logs 文件夹下面的权值文件,classes_path 是 model_path 对应分的类 。
python
_defaults = {
#--------------------------------------------------------------------------#
# 使用自己训练好的模型进行预测一定要修改model_path和classes_path!
# model_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt
# 如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改
#--------------------------------------------------------------------------#
"model_path" : 'model_data/yolo_weights.pth',
"classes_path" : 'model_data/coco_classes.txt',
#---------------------------------------------------------------------#
# anchors_path代表先验框对应的txt文件,一般不修改。
# anchors_mask用于帮助代码找到对应的先验框,一般不修改。
#---------------------------------------------------------------------#
"anchors_path" : 'model_data/yolo_anchors.txt',
"anchors_mask" : [[6, 7, 8], [3, 4, 5], [0, 1, 2]],
#---------------------------------------------------------------------#
# 输入图片的大小,必须为32的倍数。
#---------------------------------------------------------------------#
"input_shape" : [416, 416],
#---------------------------------------------------------------------#
# 只有得分大于置信度的预测框会被保留下来
#---------------------------------------------------------------------#
"confidence" : 0.5,
#---------------------------------------------------------------------#
# 非极大抑制所用到的nms_iou大小
#---------------------------------------------------------------------#
"nms_iou" : 0.3,
#---------------------------------------------------------------------#
# 该变量用于控制是否使用letterbox_image对输入图像进行不失真的resize,
# 在多次测试后,发现关闭letterbox_image直接resize的效果更好
#---------------------------------------------------------------------#
"letterbox_image" : False,
#-------------------------------#
# 是否使用Cuda
# 没有GPU可以设置成False
#-------------------------------#
"cuda" : True,
}
- 运行 predict.py,输入
python
img/street.jpg
- 在 predict.py 里面进行设置可以进行 fps 测试和 video 视频检测。
评估步骤
a、评估 VOC07+12 的测试集
- 本文使用 VOC 格式进行评估。VOC07+12 已经划分好了测试集,无需利用 voc_annotation.py 生成 ImageSets 文件夹下的 txt。
- 在 yolo.py 里面修改 model_path 以及 classes_path。 model_path 指向训练好的权值文件,在 logs 文件夹里。classes_path 指向检测类别所对应的 txt。
- 运行 get_map.py 即可获得评估结果,评估结果会保存在 map_out 文件夹中。
b、评估自己的数据集
- 本文使用 VOC 格式进行评估。
- 如果在训练前已经运行过 voc_annotation.py 文件,代码会自动将数据集划分成训练集、验证集和测试集。如果想要修改测试集的比例,可以修改 voc_annotation.py 文件下的 trainval_percent。trainval_percent 用于指定(训练集 + 验证集)与测试集的比例,默认情况下 (训练集 + 验证集):测试集 = 9:1。train_percent 用于指定(训练集 + 验证集)中训练集与验证集的比例,默认情况下 训练集:验证集 = 9:1。
- 利用 voc_annotation.py 划分测试集后,前往 get_map.py 文件修改 classes_path,classes_path 用于指向检测类别所对应的 txt,这个 txt 和训练时的 txt 一样。评估自己的数据集必须要修改。
- 在 yolo.py 里面修改 model_path 以及 classes_path。 model_path 指向训练好的权值文件,在 logs 文件夹里。classes_path 指向检测类别所对应的 txt。
- 运行 get_map.py 即可获得评估结果,评估结果会保存在 map_out 文件夹中。
Reference
https://github.com/qqwweee/keras-yolo3 https://github.com/eriklindernoren/PyTorch-YOLOv3 https://github.com/BobLiu20/YOLOv3_PyTorch
参考文献
- 基于深度学习的人脸口罩佩戴正确性检测研究(重庆邮电大学·卢玥蒙)
- 局部遮挡三维人脸识别系统设计与实现(北京邮电大学·邓宇)
- 基于web的人脸识别登陆和管理系统设计与实现(郑州大学·王哲)
- 视频中人脸表情识别关键技术与应用(电子科技大学·黄弋)
- 基于MQTT的智能门禁物联平台设计与实现(华中科技大学·库博)
- 智慧社区人脸识别系统的设计与实现(华中科技大学·刘合鑫)
- 人脸识别布控系统的设计与实现(武汉邮电科学研究院·邓锋)
- 基于大余量余弦损失函数的口罩人脸识别算法研究(太原理工大学·冯子坚)
- 人脸识别算法及其在视频剪切中的应用研究(辽宁科技大学·刘旭)
- 基于改进YOLOv5的公共场景下口罩佩戴检测算法(广西民族大学·陈云)
- 基于深度学习口罩佩戴检测算法的研究与系统实现(青岛科技大学·宋金秋)
- 基于深度学习的戴口罩人脸识别研究(青岛科技大学·苏海涛)
- 视频中人脸表情识别关键技术与应用(电子科技大学·黄弋)
- 基于web的人脸识别登陆和管理系统设计与实现(郑州大学·王哲)
- 基于人脸聚类的图片管理系统的设计与实现(首都经济贸易大学·王子涛)
本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:代码工坊 ,原文地址:https://m.bishedaima.com/yuanma/35785.html