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

小生凡一 小生凡一     2022-12-30     406

关键词:

  • 🎉粉丝福利送书:《机器学习入门:基于数学原理的Python实战》
  • 🎉点赞 👍 收藏 ⭐留言 📝 即可参与抽奖送书
  • 🎉本周五(9月10日)晚上20:00将会在【点赞区和评论区】抽一位粉丝送这本书~🙉
  • 🎉详情请看第六点的介绍嗷~✨

一、 项目进展

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_LossBounding box的损失函数。

  1. 先计算两个框的最小闭包区域面积 (同时包含了预测框和真实框的最小框的面积)
  2. 再计算出IoU
  3. 再计算闭包区域中不属于两个框的区域占闭包区域的比重
  4. 最后用IoU减去

这个比重得到GIoU

图片理解如下:

  • 两个框的最小闭包区域面积 = 红色矩形面积
  • IoU = 黄色框和蓝色框的交集 / 并集
  • 闭包区域中不属于两个框的区域占闭包区域的比重 = 蓝色面积 / 红色矩阵面积
  • GIoU = IoU - 比重

针对很多目标框的筛选,通常需要NMS操作。因为CIOU_Loss中包含影响因子v,涉及groudtruth的信息,而测试推理时,是没有groundtruth的。所以Yolov4DIOU_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是边界框中心坐标bxby,以及边界框 bwbh1代表预测值,C 代表预测类别。最终YoloV3可以获取(16×10+32×20+64×40)个特征向量。

【网络结构】
模型结构如下图:

4.1.2 训练结果

迭代100次后的mAP
迭代400次后的mAP

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

  1. 当人脸堆叠的时候,会导致先验框的堆叠,这就是v3的nms算法的弊端
  2. 黑肤色的人无法进行识别检测,这应该是训练集中对这方面数据样本的确实,导致这方面权重偏小。

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

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

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

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

4.2 YOLOv5

4.2.1 输入端

  1. Mosaic数据增强。
    V5的输入端沿用了V4的Mosaic数据增强的方式,通过随机缩放随机剪裁随机排布的方式进行拼接,对于小目标检测的效果有明显提高。
  2. 自适应锚框计算
    在传统的Yolo算法中,针对不同的数据集,都会有初始设定的长宽的秒框,那么在网络训练中,网络在初始锚框的基础上输出预测框,进而与真实框进行对比,计算两者差距,再反向传播,迭代网络参数。V5对于V3、V4再这方面并不是固定的,而是将这个功能嵌入到了代码当中,每次训练中,都会自适应计算不同训练集中最佳的锚框值。
  3. 自适应图片缩放
    在V5中对这方面进行了改进,首先是计算出缩放系数,原始图片的长宽都乘以最小的缩放系数,得到原本需要填充的高度。再对32(V5的网络经过5次下采样,而2的5次方=32。所以至少要去掉32的倍数) 取余,得到像素点,再除以2,即得到图片高度两端需要填充的数值通过这种简单的改进,推理速度得到了37%的提升

4.2.2 Backbone主干网络

  1. Focus结构
    V3、V4中并没有Focus结构,Focus结构是V5模型的一个创新点。其中关键点就是进行切片操作。比如下图的切片操作。

  2. 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。相比常规的卷积操作,其参数数量和运算成本比较低。

深度可分离卷积主要分为两个过程

  1. 逐通道卷积(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

  2. 逐点卷积(Pointwise Convolution)

    PC的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map。经过PC之后,同样输出了4张Feature map,与常规卷积的输出维度相同。

我们可以看出这个权重文件是非常小的

我们从v3模型的216M,到v5模型的16M,再到优化后的5M大小

五、代码&参考文献

[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不等式等数学基础知识。

最后

小生凡一,期待你的关注。

opencv⚠️实战⚠️人脸识别☢️建议手收藏☢️(代码片段)

【OpenCV】⚠️实战⚠️人脸识别☢️建议手收藏☢️概述模型获取detectMultiScale图片人脸识别视频人脸识别概述OpenCV是一个跨平台的计算机视觉库,支持多语言,功能强大.今天小白就带大家来实战一下,用OpenCV实现人脸识别.模型获取... 查看详情

小白同学高效入门目标检测之yolo实战系列精选|❤️1024专刊❤️

...理学AI】原创、在CSDN首发、各位大佬、开打开打❤️YOLO实战,你只看这一篇就够1024,你快乐了吗今年的冬天来早了一些,工地的砖也不那么烫手啦,开心1024,冲动消费了一把,开了C站2年会员,从此... 查看详情

计算机视觉项目-人脸识别与检测(代码片段)

...要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolo系列),pytho 查看详情

paddle入门实战系列:基于paddleocr的车牌识别(代码片段)

...优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。项目背景车... 查看详情

python初学者也可以实现的人脸识别系统-0x1(代码片段)

...必胜客(坤制作人),近十年开发经验,跨域学习者,目前于海外某世界知名高校就读计算机相关专业。荣誉:阿里云博客专家认证、腾讯开发者社区优质创作者,在CTF省赛校赛多次取得好成绩。跨领域学... 查看详情

深度学习系列资料总结

...优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。深度学习系... 查看详情

基于paddleocr的体检报告识别(代码片段)

...优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。基于PaddleOCR... 查看详情

基于paddleocr的体检报告识别(代码片段)

...优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。基于PaddleOCR... 查看详情

人脸识别完整项目实战:完整项目案例运行演示

...特征点标定的算法原理和实现机制,让大家对人脸识别与机器学习、深度学习进行有效关联;学习框架篇:系统介绍主流深度学习框架,重点就本课程用到Dlib深度学习框架进行介绍,通过dlib深度学习实战案例1和dlib深度学习实... 查看详情

基于yolo的人脸检测与人脸对齐(代码片段)

前言YOLO(YouOnlyLookOnce)是一种基于深度神经网络的对象识别和定位算法,yolo将对象定位作为回归问题求解,在one-stage中实现对象定位与识别,其最大的特点就是快!快!快!既然yolo本来就是通过... 查看详情

ocr文字识别方法综述

...优秀的人工智能学习网站,内容包括人工智能基础、机器学习、深度学习神经网络等,详细介绍各部分概念及实战教程,通俗易懂,非常适合人工智能领域初学者及研究者学习。➡️点击跳转到网站。 📝OCR... 查看详情

强化学习⚠️手把手带你走进强化学习1⚠️强化学习简介

...】⚠️手把手带你走进强化学习1⚠️强化学习简介概述机器学习的分类为什么要学强化学习强化学习的组成概述从今天开始我们会开启一个新的篇章,带领大家来一起学习(卷进)强化学习(ReinforcementLearning).强化学习基于环境,分析... 查看详情

强化学习⚠️手把手带你走进强化学习1⚠️强化学习简介

...】⚠️手把手带你走进强化学习1⚠️强化学习简介概述机器学习的分类为什么要学强化学习强化学习的组成概述从今天开始我们会开启一个新的篇章,带领大家来一起学习(卷进)强化学习(ReinforcementLearning).强化学习基于环境,分析... 查看详情

计算机视觉项目实战-基于特征点匹配的图像拼接(代码片段)

...要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolo),python网 查看详情

计算机视觉项目实战-基于特征点匹配的图像拼接(代码片段)

...要研究方向是人工智能和群智能算法方向。目前熟悉深度学习(keras、pytorch、yolo),python网 查看详情

基于yolo的人脸检测与人脸对齐(代码片段)

前言YOLO(YouOnlyLookOnce)是一种基于深度神经网络的对象识别和定位算法,yolo将对象定位作为回归问题求解,在one-stage中实现对象定位与识别,其最大的特点就是快!快!快!既然yolo本来就是通过... 查看详情

人脸识别实战:使用pythonopencv和深度学习进行人脸识别(代码片段)

在本教程中,您将学习如何使用OpenCV、Python和深度学习执行面部识别。我们将首先简要讨论基于深度学习的面部识别的工作原理,包括“深度度量学习”的概念。从那里,我将帮助您安装实际执行人脸识别所需的库。... 查看详情

ocr文字识别技术总结(代码片段)

...mage-basedSequenceRecognitionandItsApplicationtoSceneTextRecognition✨CRNN学习博客参考:CRNN文本识别网络详解CRNN是最早一批采用CNN与RNN结合的方式进行自然场景图片识别 查看详情