☀️机器学习实战☀️基于 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不等式等数学基础知识。


相关文章
|
3月前
|
机器学习/深度学习 人工智能 算法
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
乐器识别系统。使用Python为主要编程语言,基于人工智能框架库TensorFlow搭建ResNet50卷积神经网络算法,通过对30种乐器('迪吉里杜管', '铃鼓', '木琴', '手风琴', '阿尔卑斯号角', '风笛', '班卓琴', '邦戈鼓', '卡萨巴', '响板', '单簧管', '古钢琴', '手风琴(六角形)', '鼓', '扬琴', '长笛', '刮瓜', '吉他', '口琴', '竖琴', '沙槌', '陶笛', '钢琴', '萨克斯管', '锡塔尔琴', '钢鼓', '长号', '小号', '大号', '小提琴')的图像数据集进行训练,得到一个训练精度较高的模型,并将其
53 0
【乐器识别系统】图像识别+人工智能+深度学习+Python+TensorFlow+卷积神经网络+模型训练
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习模型之深度神经网络的特点
深度神经网络(Deep Neural Networks, DNNs)是一类机器学习模型,通过多个层级(层)的神经元来模拟人脑的工作方式,从而实现复杂的数据处理和模式识别任务。
14 1
|
21天前
|
机器学习/深度学习 安全 算法
利用机器学习优化网络安全防御策略
【8月更文挑战第30天】在信息技术迅猛发展的今天,网络安全问题日益突显,传统的安全防御手段逐渐显得力不从心。本文提出一种基于机器学习的网络安全防御策略优化方法。首先,通过分析现有网络攻击模式和特征,构建适用于网络安全的机器学习模型;然后,利用该模型对网络流量进行实时监控和异常检测,从而有效识别潜在的安全威胁;最后,根据检测结果自动调整防御策略,以提升整体网络的安全性能。本研究的创新点在于将机器学习技术与网络安全防御相结合,实现了智能化、自动化的安全防御体系。
|
6天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于NSCT非采样轮廓波变换和CNN网络人脸识别matlab仿真
本项目展示了一种结合非采样轮廓波变换(NSCT)与卷积神经网络(CNN)的人脸识别系统。通过NSCT提取多尺度、多方向特征,并利用CNN的强大分类能力实现高效识别。项目包括ORL人脸库的训练结果对比,提供Matlab 2022a版本下的完整代码及详细中文注释,另有操作步骤视频指导。
|
11天前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
12 0
|
1月前
|
机器学习/深度学习 自然语言处理 自动驾驶
【机器学习】神经网络的无限可能:从基础到前沿
在当今人工智能的浪潮中,神经网络作为其核心驱动力之一,正以前所未有的速度改变着我们的世界。从图像识别到自然语言处理,从自动驾驶到医疗诊断,神经网络的应用无处不在。本文旨在深入探讨神经网络的各个方面,从基础概念到最新进展,带领读者一窥其背后的奥秘与魅力。
40 3
|
20天前
|
Java 前端开发 Apache
Apache Wicket与Spring MVC等Java Web框架大PK,究竟谁才是你的最佳拍档?点击揭秘!
【8月更文挑战第31天】在Java Web开发领域,众多框架各具特色。Apache Wicket以组件化开发和易用性脱颖而出,提高了代码的可维护性和可读性。相比之下,Spring MVC拥有强大的生态系统,但学习曲线较陡;JSF与Java EE紧密集成,但在性能和灵活性上略逊一筹;Struts2虽成熟,但在RESTful API支持上不足。选择框架时还需考虑社区支持和文档完善程度。希望本文能帮助开发者找到最适合自己的框架。
27 0
|
20天前
|
机器学习/深度学习 自然语言处理 TensorFlow
TensorFlow 入门超简单!从零开始构建你的第一个神经网络,开启机器学习精彩之旅!
【8月更文挑战第31天】本文介绍了流行开源机器学习框架 TensorFlow,涵盖其安装与首个神经网络构建步骤。TensorFlow 由 Google 开发,适用于计算机视觉及自然语言处理等领域。掌握它不仅提升就业机会,还加深对机器学习的理解。通过安装 Python 并使用 pip 命令安装 TensorFlow,即可按照示例构建、训练并评估简单的线性回归模型,快速开启机器学习之旅。
21 0
|
1月前
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
47 2
|
1月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【8月更文挑战第3天】踏入人工智能领域,神经网络是开启智慧之门的钥匙。它不仅是一种技术,更是模仿人脑学习与推理的思维方式。从理解神经元间的连接到构建神经网络的基本概念,再到使用Python与TensorFlow搭建手写数字识别模型,每一步都揭示着机器学习的奥秘。随着深入学习,我们将探索更高级的主题,比如深度神经网络、卷积神经网络和循环神经网络,以及如何优化模型性能。掌握背后的数学原理,将帮助我们设计更高效准确的模型。在这个旅程中,Python将是我们的得力助手,引领我们探索AI世界的无限可能。
35 2