《基于YOLOv3的口罩识别》答辩记录

写在前面

这是某个渣渣本科生的答辩记录,借鉴陈同学的,有需要的同学自取~,先给大家一些文件吧

源码(带数据集):https://pan.baidu.com/s/1zzo_tNBvnAsQBqU1LCARhg
提取码:p9ny

ppt:https://pan.baidu.com/s/169lSpuN-YipiOwXr5I3wOw
提取码:urhw

1.自我介绍

简要介绍姓名,指导老师,论文题目,然后这张ppt就直接过了,我看有些人还讲了感谢各位老师百忙之中balabala讲了一大串,看你答辩顺序吧,越到后面,老师基本不想听这些话,反正我是很反感。。。

2.目录

一般答辩时间应该是控制在7分钟到10分钟左右吧,目录这里的话建议还是不用讲,直接给评委看就行,反正后面也有大标题会讲,而且这里把目录说出来又浪费时间又有点空洞。

3.研究背景

这里就直接按照ppt里面文字讲就行,记得后面答辩老师问我的选题意义,就是把没戴口罩的人标注出来并提醒他。

4.技术分析

物体检测算法:

目前物体检测算法有以下三种:第一种是传统物体检测算法,使用人工设计特征以及机器学习的分类方式,但这种算法提取到的特征局限性较大且学习速度有限;第二种是结合候选框+深度学习分类法,这类Two-Stage方法解决了前者的问题,在精度上有很大突破,但在速度上很难达到实时检测的效果;第三种是基于深度学习的回归方法,在速度上达到了实时级别的突破,本文使用的YOLO就是属于One-stage,YOLO虽然在v1,v2版本准确率上有所欠缺,但到v3版本时准确率提高了很多。

YOLOv3分析:

YOLOv3网络由两部分构成,特征提取主干网Darknet-53与特征交互网络YOLO层。
Darknet-53是一个全卷积的结构,可以看到这边共有5个步长为2的卷积层,一共进行了5次下采样,每一次下采样都能提取到更高维度的特征。在每两个卷积层之后加入残差层,解决梯度爆炸与梯度消失问题。
再来看看YOLO层,它之所以被称为特征交互,实际上是因为YOLO层取前面5次下采样的后三次,将高阶的特征通过上采样的方式叠加在较低阶的特征上,让低阶特征获得其高阶特征的信息,从而更容易在上面检测微小物体。

模型对比:

为了确实得出YOLOv3在本次选题背景下的全面性,本文对比了一些跟它相似的模型
如表是在检测同样的100张测试图片下的对比,虽然ResNet50的速度只有12.7s,但是准确率是62.29%,相比于YOLOv3是比较低的,存在很多误检情况
YOLOv3-tiny是YOLOv3的简化版本,速度快,但精度低,只有33.19%,下面是YOLOv3和tiny在识别目标的表现,右边是tiny的检测结果,可以看到tiny基本识别不出。这是因为它的主干网络只有7层,无法提取出更高层次的语义特征。
我们看下YOLOv3,虽然速度相对于另外两个速度非常慢,但是检测一张图片是不到1s的时间的,这样的速度我们是可以接受的,因为它的准确率是比较高的,不容易出现误检的情况,所以在选择模型的时候,选择的还是准确率较高的YOLOv3。

5.本文核心工作

《基于YOLOv3的口罩识别》答辩记录_第1张图片

准备数据集:

首先是数据集的获取,本次采用的数据集来自多个方面,整合了网络上比较散的数据集,戴口罩是部分数据集,没戴口罩是另外一些数据集,由于数据集来自各个方面,且xml内容不符合本次训练,所以需要使用标注工具重新对所有照片进行标注。

下载labelImg工具,运行labelImg.py出现以下界面即为标注界面,将上一步获取到的图片进行标注,将整个脸部作为目标框标注出位置,并写入相应的数据标签hava_mask或者no_mask。

数据集处理按照ppt讲就行,物体类别加入“由于在存放图片时会有序的将两类图片分开,但是这样的顺序直接训练模型效果是不好的,所以在代码中需要随机打乱数据集进行训练"。

k-means聚类算法

左图是kmeans的具体算法,用来生成合适的先验框,
实际上,聚类的目的是先验框和真实框有更大的IOU值,IOU指的是先验框和真实框之间的交并比
最理想的情况下是IOU为1时,即先验框和真实框完全重叠,此时两者之间距离最小,聚类效果最好
k-means拿到数据里所有的目标框,得到所有的宽和高,在这里面随机取得9个随机中心,之后以9个点为中心得到9个族,不断计算其他点到中点的距离调整每个点所归属的族和中心,直到9个中心不再变即可。这9个中心的x,y就是整个数据的9个合适的anchors框的宽和高。

训练模型

有了数据集和合适的先验框后,开始训练模型了。
这是模型训练时输出的信息,这里有个重要的信息loss,loss能够反应模型的学习程度,loss下降幅度大,说明网络在正常学习,下降幅度变小,说明网络训练得差不多了
在每次迭代后都会输出模型权重文件,文件的命名使用loss和val_loss,这样方便后续查找比较好的模型

评估模型

训练完后需要对模型进行一个评估,由于keras没有实现对检测模型的评估代码,所以需要额外地引入mAP来评估模型的准确率,如图取的是loss值为15的模型,AP达到76.49%,准确率和召回率都是比较高的,如果都比较低的话就需要考虑对模型进行一个优化

模型优化

本文从以下两个方面,对模型进行优化
第一方面:反复实验先验框的尺寸和数量,右图是部分先验框数据,实际训练通过不断地修改先验框尺寸从而找到恰当的先验框,来加快训练收敛速度
第二方面:参数调整,通过控制变量法调整参数,包括学习率,epoch,batch-size等

这是通过调整学习率来优化模型,通过反复实验发现学习率为0.001的时候效果是比较好的。loss最终在12左右
另外尝试加入函数ReduceLROnPlateau来调整学习率,这个函数是用来监测某个指标的,本文通过监测loss值,
当指标不再提升时,减少学习率。当学习停滞时,减少2倍或10倍的学习率以此获得更好的效果。

具体流程

所以整个实现过程是这样的:
将训练的图片输入训练模块,训练后将网络的权重保存起来,便于预测与再次训练使用。
预测模块通过读取模型的网络权重,对输入的测试图片或视频进行预测,最终输出带有预测标注的图片或视频。

6.成果展示

这里可以演示一下自己的项目,答辩前准备好。

7.总结与展望

通过对比多个模型,YOLOv3在准确率和速度上相对较优秀,确定了YOLOv3为基础框架后开始训练模型,选取合适的先验框能够加快训练收敛速度,通过增加迭代次数,调整学习率等方式不断尝试以获取最优的模型
接下来是两个展望:
在成果展示的时候可以看到在检测密集和多角度的场景下,漏检情况会比较明显,所以在人脸识别和先验框选取的算法上还有待改进
第二个展望:目前只是通过笔记本调用自身摄像头进行的一个实时检测,希望后续有能力的情况下实现能在移动端和嵌入式系统中使用。

评审老师给的意见:

1.论文中对实验叙述太少,建议增加
2.建议对系统加个报警功能啥的
3.数据集1000多张还是太少,建议多增加些数据集

最后吐槽

临毕业真的好多繁杂事,又因为疫情没办法回学校,论文,一些毕业资料都得邮寄过去,又要搞什么实习协议,就业协议烦得要命(就业协议好像也不能保障学生的权益,公司反悔你拿这个协议也没多大用,纯粹就是学校为了保障就业率,还使劲地催你去完成。。。)
对了,选对指导老师真的很重要!!!我的指导老师就超牛逼!!!既腻害又负责仁,哈哈哈哈哈~~~

你可能感兴趣的:(人工智能)