☀️机器学习实战☀️基于 YOLO网络 的人脸识别 |(文末送机器学习书籍~)

简介: 目录一、 项目进展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 YOLOv34.1.1 主干网络 Darknet-534.1.2 训练结果4.2 YOLOv54.2.1 输入端4.2.2 Backbone主干网络4.2.3 Neck4.2.4 结果演示4.3 YOLOv5 + MoblieNetV34.3.1 深度可分离卷积五、代码&参考文献六、福利送书最后

目录

一、 项目进展

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的原因之一。image.png

在YOLOv5的输出端中采用其中的GIOU_Loss做Bounding box的损失函数。


先计算两个框的最小闭包区域面积 (同时包含了预测框和真实框的最小框的面积)

再计算出IoU

再计算闭包区域中不属于两个框的区域占闭包区域的比重

最后用IoU减去

这个比重得到GIoU。


图片理解如下:

image.png

两个框的最小闭包区域面积 = 红色矩形面积

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)个特征向量。


【网络结构】

模型结构如下图:


image.png


4.1.2 训练结果

迭代100次后的mAP

image.png

迭代400次后的mAP


image.png


从测试结果我们可以看出这个网络的检测结果的问题:


当人脸堆叠的时候,会导致先验框的堆叠,这就是v3的nms算法的弊端

黑肤色的人无法进行识别检测,这应该是训练集中对这方面数据样本的确实,导致这方面权重偏小。


image.png

当检测目标处于不堆叠且非黑色肤种的时候,就有非常高的准确率。


image.png


当人脸在被遮掩的情况,也有很不错的表现。

image.png



在昏暗和有遮掩物的条件下也能进行识别,虽然准确率比较低

image.png


当我们调用摄像头,帧率稳定在30帧左右。

image.png

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模型的一个创新点。其中关键点就是进行切片操作。比如下图的切片操作。

image.png


CSP结构

Yolov4网络结构中,借鉴了CSPNet的设计思路,在主干网络中设计了CSP结构。v5与v4不同点在于,v4中只有主干网络使用了CSP结构。而v5中设计了两种CSP结构,以Yolov5s网络为例,CSP1_X结构应用于Backbone主干网络,另一种CSP2_X结构则应用于Neck中。


与yolov3的残差结构对比的话。CSPnet结构并不算复杂,就是将原来的残差块的堆叠进行了一个拆分,拆成左右两部分:


主干部分继续进行原来的残差块的堆叠

另一部分则像一个残差边一样,经过少量处理直接连接到最后。(Part 2)

因此可以认为CSP中存在一个大的残差边。(Part1)

image.png

4.2.3 Neck

Yolov5现在的Neck和Yolov4中一样,都采用FPN+PAN的结构,但在Yolov5刚出来时,只使用了FPN结构,后面才增加了PAN结构,此外网络中其他部分也进行了调整。

PANet结构

image.png


上图为原始的PANet的结构,可以看出来其具有一个非常重要的特点就是特征的反复提取,在(a)里面是传统的特征金字塔结构,在完成特征金字塔从下到上的特征提取后,还需要实现(b)中从上到下的特征提取。


Yolov4的Neck结构中,采用的都是普通的卷积操作。

Yolov5的Neck结构中,采用借鉴CSPnet设计的CSP2结构,加强网络特征融合的能力

4.2.4 结果演示

image.png

迭代训练完三百次后的模型结果还是很客观的,mAP不断向1收敛,我们为了防止过拟合,选择了停止训练,点到为止。

image.png


YOLOv5网络中的`数据增强

image.png

识别速度是非常快的,比v3模型要快。

image.png

当然识别率在物体遮掩的情况下是比v3模型稍微低一点。


4.3 YOLOv5 + MoblieNetV3


image.png

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编程水平的程序员。


image.png


【作者简介】


戴璞微,中国民航大学硕士,CSDN博客专家。曾获得全国大学生数学竞赛国家一等奖、北美数学建模二等奖,参与国家自然科学基金项目1项。对计算机视觉、机器学习和深度学习有深入研究。

潘斌,浙江大学应用数学系博士,现任辽宁石油化工大学理学院副院长。2018年入选辽宁省“兴辽英才计划”青年拔尖人才,2016年主持国家自然科学基金青年基金项目1项;2015年主持辽宁省自然科学基金项目1项;2016年主持浙江大学CAD&CG国家重点实验室开放课题2项。近年来,指导本科生获全国大学生数学建模竞赛国家一等奖。

【书籍优势】

1.与周志华编写的《机器学习》相比,本书多了对算法的数学原理详细严谨的推导。

2.与李锐翻译的《机器学习实战》相比,本书多了用面向对象思想将算法模块化,并且书中代码在 Python 3环境下运行。

3.为了照顾初学者,本书补充了全书涉及的高等数学、线性代数、概率论与数理统计、Jessen不等式等数学基础知识。


相关文章
|
16天前
|
机器学习/深度学习 数据采集 人工智能
Machine Learning机器学习之贝叶斯网络(BayesianNetwork)
Machine Learning机器学习之贝叶斯网络(BayesianNetwork)
|
8天前
|
存储 算法 Linux
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
【实战项目】网络编程:在Linux环境下基于opencv和socket的人脸识别系统--C++实现
24 6
|
25天前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
48 0
|
2天前
|
数据采集 机器学习/深度学习 数据挖掘
网络数据处理中的NumPy应用实战
【4月更文挑战第17天】本文介绍了NumPy在网络数据处理中的应用,包括数据预处理、流量分析和模式识别。通过使用NumPy进行数据清洗、格式化和聚合,以及处理时间序列数据和计算统计指标,可以有效进行流量分析和异常检测。此外,NumPy还支持相关性分析、周期性检测和聚类分析,助力模式识别。作为强大的科学计算库,NumPy在处理日益增长的网络数据中发挥着不可或缺的作用。
|
25天前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
46 2
|
25天前
|
机器学习/深度学习 自然语言处理 PyTorch
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
23 0
|
1月前
|
机器学习/深度学习 存储 搜索推荐
利用机器学习算法改善电商推荐系统的效率
电商行业日益竞争激烈,提升用户体验成为关键。本文将探讨如何利用机器学习算法优化电商推荐系统,通过分析用户行为数据和商品信息,实现个性化推荐,从而提高推荐效率和准确性。
|
16天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
1月前
|
机器学习/深度学习 算法 数据可视化
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
实现机器学习算法时,特征选择是非常重要的一步,你有哪些推荐的方法?
26 1
|
1月前
|
机器学习/深度学习 数据采集 算法
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
解码癌症预测的密码:可解释性机器学习算法SHAP揭示XGBoost模型的预测机制
96 0

热门文章

最新文章