目录
一、 项目进展
1.1 第一阶段
1.2 第二阶段
1.3 第三阶段
1.4 第四阶段
二、 项目难点
三、解决思路
3.1 问题一
3.1.1 算法方面
3.2 问题二
3.2.1 数据集
3.1.2 YOLOv3 To YOLOv5
四、网络介绍
4.1 YOLOv3
4.1.1 主干网络 Darknet-53
4.1.2 训练结果
4.2 YOLOv5
4.2.1 输入端
4.2.2 Backbone主干网络
4.2.3 Neck
4.2.4 结果演示
4.3 YOLOv5 + MoblieNetV3
4.3.1 深度可分离卷积
五、代码&参考文献
六、福利送书
最后
一、 项目进展
1.1 第一阶段
由于是人脸识别,我们在打算使用OpenCV,通过进行一些的cv操作,例如将背景和人进行一个减法操作的运算,再进行高斯滤波降噪点,以及进行形态学的腐蚀与膨胀操作,但是这种算法只能应用于简单背景下的单人检测。无法应对多人情况下的检测识别。于是进入第二阶段。
1.2 第二阶段
在这个阶段,我们采取了YOLOv3 + OpenCV的方案,YOLO系列算法是目标检测领域的佼佼者。在YOLOv3强大的网络下,我们的人脸识别准确率达到了一个新的高度。当然由于YOLOv3的权重文件高达两百兆,无法实现多端部署(移动端等),于是我们寻求了更轻的网络结构—YOLOv5s,开启了我们的第三阶段。
1.3 第三阶段
麻雀虽小,五脏俱全。虽然YOLOv5s权重文件的大小仅有YOLOv3的二十分之一,但是在速度上却提高了两个量级,准确度的平均值比YOLOv3高出了6.3%。为了进一步扩大YOLOv5的长处,我们打算改进YOLOv5s的网络结构,将YOLOv5中的backbone结构更换成更轻量的结构,以为后续的多端协同操作打下基础。
1.4 第四阶段
在这个阶段,我们将YOLOv5s中的backbone更换成MoblieNetV3网络结构,我们的改进的模型,只有五兆,但是准确率降低了很多,在写这篇文章的时候,还没有很好的解决方案,还在研究当中。
二、 项目难点
目标在高速移动情况下的可能会失去检测,被堆叠情况下也可能会没被检测到。
数据集的制作,在各大网络上的数据集无法满足我们项目的需求。
优化YOLOv5的结构之后,准确率丢失。
三、解决思路
3.1 问题一
目标在高速移动情况下的可能会失去检测,被堆叠情况下也可能会没被检测到。
3.1.1 算法方面
由于在人脸堆叠的情况下,YOLOv3中的NMS算法对于目标堆叠状况下无法很好的进行检测,这也是我们更换YOLOv5的原因之一。
在YOLOv5的输出端中采用其中的GIOU_Loss做Bounding box的损失函数。
先计算两个框的最小闭包区域面积 (同时包含了预测框和真实框的最小框的面积)
再计算出IoU
再计算闭包区域中不属于两个框的区域占闭包区域的比重
最后用IoU减去
这个比重得到GIoU。
图片理解如下:
两个框的最小闭包区域面积 = 红色矩形面积
IoU = 黄色框和蓝色框的交集 / 并集
闭包区域中不属于两个框的区域占闭包区域的比重 = 蓝色面积 / 红色矩阵面积
GIoU = IoU - 比重
针对很多目标框的筛选,通常需要NMS操作。因为CIOU_Loss中包含影响因子v,涉及groudtruth的信息,而测试推理时,是没有groundtruth的。所以Yolov4在DIOU_Loss的基础上采用DIOU_nms的方式,而YOLOv5中采用加权nms的方式。这种方式能更好地识别出目标。
3.2 问题二
数据集的制作,在各大网络上的现成数据集无法满足我们项目的需求。
3.2.1 数据集
数据集方面,我们相对增强了堆叠状况的数据以及遮掩情况下的数据集。使得模型能够更好的迭代更新。
使用爬虫爬取网络的人脸图片,使用labelImg进行数据的标注,由于人工标注有限,我们总共标注了一千张左右的人脸图片,但是通过了YOLOv5的数据增强,例如上下翻滚,多图拼接等,使得了我们的数据集是原来的四倍。
3.1.2 YOLOv3 To YOLOv5
从YOLOv3到YOLOv5的过程并不是一蹴而就的,我们首先从YOLOv3转到YOLOv4,再转到YOLOv5。由于v4的网络结构与v3有部分的不同。而v5与前两代也不同,在这里就直接说一下v3到v5上的部分算法结构。
四、网络介绍
4.1 YOLOv3
4.1.1 主干网络 Darknet-53
【Darknet-53】
Yolo V3 采用了 Darknet-53 的网络结构(含有 5 组残差模块)来提取特征。其网络结构采用了横纵交叉结构,并采用了连串的 3×3 和 1×1 卷积。
其中,3×3 的卷积增加通道数,而 1×1 的卷积在于压缩 3×3 卷积后的特征表示,同时 Darknet-53 为了防止池化带来的低级特征的丢失,采用了全卷积层,并且引入了 residual残差结构。
这意味着网络结构可以更好地利用 GPU,从而使其评估效率更高、速度更快。Darknet-53 作为特征提取层,最终每个预测任务得到的特征大小为[3×(4+1+C)]。
每个grid cell预测 3 个预测框,4 代表 4是边界框中心坐标bx,by,以及边界框 bw,bh,1代表预测值,C 代表预测类别。最终YoloV3可以获取(16×10+32×20+64×40)个特征向量。
【网络结构】
模型结构如下图:
4.1.2 训练结果
迭代100次后的mAP
迭代400次后的mAP
从测试结果我们可以看出这个网络的检测结果的问题:
当人脸堆叠的时候,会导致先验框的堆叠,这就是v3的nms算法的弊端
黑肤色的人无法进行识别检测,这应该是训练集中对这方面数据样本的确实,导致这方面权重偏小。
当检测目标处于不堆叠且非黑色肤种的时候,就有非常高的准确率。
当人脸在被遮掩的情况,也有很不错的表现。
在昏暗和有遮掩物的条件下也能进行识别,虽然准确率比较低
当我们调用摄像头,帧率稳定在30帧左右。
4.2 YOLOv5
4.2.1 输入端
Mosaic数据增强。
V5的输入端沿用了V4的Mosaic数据增强的方式,通过随机缩放,随机剪裁,随机排布的方式进行拼接,对于小目标检测的效果有明显提高。
自适应锚框计算
在传统的Yolo算法中,针对不同的数据集,都会有初始设定的长宽的秒框,那么在网络训练中,网络在初始锚框的基础上输出预测框,进而与真实框进行对比,计算两者差距,再反向传播,迭代网络参数。V5对于V3、V4再这方面并不是固定的,而是将这个功能嵌入到了代码当中,每次训练中,都会自适应计算不同训练集中最佳的锚框值。
自适应图片缩放
在V5中对这方面进行了改进,首先是计算出缩放系数,原始图片的长宽都乘以最小的缩放系数,得到原本需要填充的高度。再对32(V5的网络经过5次下采样,而2的5次方=32。所以至少要去掉32的倍数) 取余,得到像素点,再除以2,即得到图片高度两端需要填充的数值通过这种简单的改进,推理速度得到了37%的提升
4.2.2 Backbone主干网络
Focus结构
V3、V4中并没有Focus结构,Focus结构是V5模型的一个创新点。其中关键点就是进行切片操作。比如下图的切片操作。
CSP结构
Yolov4网络结构中,借鉴了CSPNet的设计思路,在主干网络中设计了CSP结构。v5与v4不同点在于,v4中只有主干网络使用了CSP结构。而v5中设计了两种CSP结构,以Yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。
与yolov3的残差结构对比的话。CSPnet结构并不算复杂,就是将原来的残差块的堆叠进行了一个拆分,拆成左右两部分:
主干部分继续进行原来的残差块的堆叠
另一部分则像一个残差边一样,经过少量处理直接连接到最后。(Part 2)
因此可以认为CSP中存在一个大的残差边。(Part1)
4.2.3 Neck
Yolov5现在的Neck和Yolov4中一样,都采用FPN+PAN的结构,但在Yolov5刚出来时,只使用了FPN结构,后面才增加了PAN结构,此外网络中其他部分也进行了调整。
PANet结构
上图为原始的PANet的结构,可以看出来其具有一个非常重要的特点就是特征的反复提取,在(a)里面是传统的特征金字塔结构,在完成特征金字塔从下到上的特征提取后,还需要实现(b)中从上到下的特征提取。
Yolov4的Neck结构中,采用的都是普通的卷积操作。
Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力
4.2.4 结果演示
迭代训练完三百次后的模型结果还是很客观的,mAP不断向1收敛,我们为了防止过拟合,选择了停止训练,点到为止。
YOLOv5网络中的`数据增强
识别速度是非常快的,比v3模型要快。
当然识别率在物体遮掩的情况下是比v3模型稍微低一点。
4.3 YOLOv5 + MoblieNetV3
4.3.1 深度可分离卷积
【模型优化】
介于YoloV5的轻便小巧的特点,我们的优化方案是将V5小巧的优点继续发扬,将原生V5中的网络结构替换成MoblieNetV3。在mobilenet中,会有深度可分离卷积(depthwise separable convolution)
由depthwise(DW)和pointwise(PW)两个部分结合起来,用来提取特征feature map。相比常规的卷积操作,其参数数量和运算成本比较低。
深度可分离卷积主要分为两个过程
逐通道卷积(Depthwise Convolution)
DC的一个卷积核负责一个通道,一个通道只被一个卷积核卷积,这个过程产生的feature map通道数和输入的通道数完全一样。一张5×5像素、三通道彩色输入图片(shape为5×5×3),DC首先经过第一次卷积运算,DW完全是在二维平面内进行。卷积核的数量与上一层的通道数相同(通道和卷积核一一对应)。所以一个三通道的图像经过运算后生成了3个Feature map。
DC完成后的Feature map数量与输入层的通道数相同,但无法扩展Feature map。而且这种运算对输入层的每个通道独立进行卷积运算,并没有有效的利用不同通道在相同空间位置上的feature信息。因此需要Pointwise Convolution来将这些Feature map进行组合生成新的Feature Map。
逐点卷积(Pointwise Convolution)
PC的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map。经过PC之后,同样输出了4张Feature map,与常规卷积的输出维度相同。
我们可以看出这个权重文件是非常小的
我们从v3模型的216M,到v5模型的16M,再到优化后的5M大小
五、代码&参考文献
YOLOv3模型
YOLOv5模型
YOLOv5+ MoblieNetV3模型
[1] 张麒麟,林清平,肖蕾.改进YOLOv5的航拍图像识别算法[J].长江信息通信,2021,34(03):73-76.
[2] 江大白. 深入浅出Yolo系列之Yolov5核心基础知识完整讲解.2020
[3] 姜文志,李炳臻,顾佼佼,刘克.基于改进YOLO V3的舰船目标检测算法[J/OL].电光与控制:1-5[2021-04-21].http://kns.cnki.net/kcms/detail/41.1227.TN.20210322.1258.003.html.
[4] 王莉,何牧天,徐硕,袁天,赵天翊,刘建飞.基于YOLOv5s网络的垃圾分类和检测[J].包装工程,2021,42(08):50-56.
[5] 春枫琰玉. mobilenet系列之又一新成员—mobilenet-v3. CSDN.https://arxiv.org/abs/1905.02244
六、福利送书
点赞或评论,截至本周五(9月10日)在点赞区和评论区抽一位朋友,送这本《机器学习入门:基于数学原理的Python实战》书籍!!!
理论性与实用性兼备,既可作为初学者的入门书籍,也可作为求职者的面试宝典,更可作为职场人士转岗的实用手册。
《机器学习入门:基于数学原理的Python实战》
本书适合需要全面学习机器学习算法的初学者、希望掌握机器学习算法数学理论的程序员、想转行从事机器学习算法的专业人员、对机器学习算法兴趣浓厚的人员、专业培训机构学员和希望提高Python编程水平的程序员。
【作者简介】
戴璞微,中国民航大学硕士,CSDN博客专家。曾获得全国大学生数学竞赛国家一等奖、北美数学建模二等奖,参与国家自然科学基金项目1项。对计算机视觉、机器学习和深度学习有深入研究。
潘斌,浙江大学应用数学系博士,现任辽宁石油化工大学理学院副院长。2018年入选辽宁省“兴辽英才计划”青年拔尖人才,2016年主持国家自然科学基金青年基金项目1项;2015年主持辽宁省自然科学基金项目1项;2016年主持浙江大学CAD&CG国家重点实验室开放课题2项。近年来,指导本科生获全国大学生数学建模竞赛国家一等奖。
【书籍优势】
1.与周志华编写的《机器学习》相比,本书多了对算法的数学原理详细严谨的推导。
2.与李锐翻译的《机器学习实战》相比,本书多了用面向对象思想将算法模块化,并且书中代码在 Python 3环境下运行。
3.为了照顾初学者,本书补充了全书涉及的高等数学、线性代数、概率论与数理统计、Jessen不等式等数学基础知识。