一.简介
这篇博客侧重从项目具体实践,适合刚入坑yolov3的小白。
由于研究方向为计算机视觉方向,最近也是想把自己之前跑过的代码记录一下,方便自己以后查看,因而本文主要关于yolov3进行目标检测,具体原理大家可以参考大神的博客目标检测(九)–YOLO v1,v2,v3,我就不细讲了,直接进入正题,如何利用深度学习框架PyTorch对自己的数据进行训练以及最后的预测。
论文地址:https://link.zhihu.com/?target=https%3A//pjreddie.com/media/files/papers/YOLOv3.pdf
推荐博客:https://link.zhihu.com/?target=https%3A//blog.csdn.net/nan355655600/article/details/106246625
睿智的目标检测5–https://link.zhihu.com/?target=https%3A//blog.csdn.net/weixin_44791964/article/details/102646387
总结:
YOLOv3优秀的检测结果主要的得益于残差网络、反卷积和多特征层的思想,这些特点使其可以很好的提取特征,同时训练效果好,且对大目标和小目标都有很好的检测效果。相比于之前的yolov1和yolov2主要改进点:
1使用了残差网络Residual。其内部的残差块使用了跳跃连接,缓解了在深度神经网络中增加深度带来的梯度消失问题。
2提取多特征层进行目标检测。一共提取三个特征层,它的shape分别为(13,13,75),(26,26,75),(52,52,75)最后一个维度为75是因为该图是基于voc数据集的,它的类为20种,yolo3只有针对每一个特征层存在3个先验框。
3其采用反卷积UmSampling2d设计。逆卷积相对于卷积在神经网络结构的正向和反向传播中做相反的运算,其可以更多更好的提取出特征。
二.开发环境
本文是基于pytorch深度学习框架实现对建筑工地上安全帽和反光背心的检测识别。
编译器pycharm python3.6 pytorch1.6 Anaconda3 cuda10.1 cudnn7.6
参考:https://www.zhihu.com/people/shi-wo-89-57/posts
三.模型训练
3.1数据准备
首先我们要对自己的数据进行标注,标注的工具LabelImg,如果是windows用户的话,可以直接下载可执行文件,labelImg的下载地址以及使用,可以参考博客windows下使用labelImg标注图像https://link.zhihu.com/?target=https%3A//blog.csdn.net/python_pycharm/article/details/85338801。
这里我使用的是自己整理的建筑工人可穿戴照片,标签划分为四类hat、person、reflective_clothes、other_clothes,将数据集以voc格式处理。想要数据集小伙伴可以私信。
3.2代码及预训练权重下载
代码下载,本次没有采用官网的代码,使用一大佬代码:bubbliiiing/yolo3-pytorch https://link.zhihu.com/?target=https%3A//github.com/bubbliiiing/yolo3-pytorch
提前克隆下载项目代码并解压到本地,同时下载预训练权重yolo_weights.pth,并放到model_data文件夹下
3.3具体实现流程
训练前将标签文件放在VOCdevkit文件夹下的VOC2007文件夹下的Annotation中;
将图片文件放在VOCdevkit文件夹下的VOC2007文件夹下的JPEGImages中;
在训练前利用voc2yolo3.py文件生成对应的txt;
再运行根目录下的voc_annotation.py,运行前需要将classes改成你自己的classes,
此时会生成对应的2007_train.txt,每一行对应其图片位置及其真实框的位置;
注意不要使用中文标签,文件夹中不要有空格!
在训练前需要务必在model_data下新建一个txt文档,文档中输入需要分的类;
修改utils/config.py里面的classes,使其为要检测的类的个数;
运行train.py即可开始训练。
四.检测结果
第一步:将训练生成的权重会保存到logs文件夹下,比如Epoch100-Total_Loss13.2984-Val_Loss19.7170.pth将其在yolo.py中的相应位置进行修改。
第二步:运行predict.py进行图片预测,终端输入 img/demo.jpg
第三步:运行video.py进行视频检测
注:保护人物隐私,进行涂鸦处理。
参考:https://link.zhihu.com/?target=https%3A//github.com/bubbliiiing/yolo3-pytorch