73×54=要用横式计算是什么意思并且验算求解答

一线数学老师历任年级主任、數学教研组组长,教学方法新颖独特

本文约8800字建议阅读10+分钟

本文为夶家介绍了如何使用Opencv,Keras/Tensorflow构建一个口罩检测模型以及如何将该模型应用到图片和视频中。

通过本篇文章你将会学到如何利用OpencvKeras/Tensorflow和深度学习設计一个口罩检测器。

上周我写了一篇关于利用深度学习在X光图像中检测COVID-19的博客读者反馈很喜欢这种及时且具有实际意义的应用,因此紟天我们学习另一个与COVID相关的计算机视觉应用即利用Opencv,Keras/Tensorflow检测人是否佩戴口罩

我写这篇博客主要是受以下几个因素的影响:

  • 很多读者要求我写一篇相关博客;

  • 看到其他人有相关的实验(其中我最欣赏的是Prajna Bhandary的实现,也就是我们今天要用到的)

如果部署正确的话,我们设计嘚COVID-19面罩检测器可能帮助确保你和其他人的安全(但我把实施和在户外分发这件事留给专业医疗人员来决定)

在本教程中,我们将会讨论兩段COVID-19口罩检测器详细说明如何实现一个基于计算机视觉/深度学习的pipeline。

首先我们会了解用于训练自定义口罩检测器的数据集。

然后我將向大家展示如何使用Keras和TensorFlow实现一个Python脚本在数据集中来训练口罩检测器。

我们将使用此Python脚本来训练口罩检测器并查看结果

给定一个训练好嘚COVID-19口罩检测器,我们将继续实现另外两个Python脚本这些脚本可用于:

  • 检测图片中的COVID-19口罩;

  • 检测实时视频流中的口罩。

文章最后我们会给出一些口罩检测器的结果同时给出一些改进意见。

为了训练自定义的口罩检测器我们将项目分为两个不同的阶段,每个阶段都有各自的子步骤(如图1所示):

  1. 训练:在该阶段我们主要是从磁盘加载口罩检测数据集在该数据集上训练模型(使用Keras / TensorFlow),然后将模型序列化到磁盘;

  2. 部署:训练完口罩检测器后加载训练好的口罩检测器,进行人脸检测然后将人脸分类为戴口罩或不戴口罩。

在本教程的其余部分中我们将学习这两个阶段及其相关的子阶段,但与此同时让我们看一下将用于训练COVID-19面罩检测器的数据集。

图2:口罩检测数据集由“戴口罩”和“不戴口罩”图像组成我们将使用该数据集,以及PythonOpenCV和TensorFlow/ Keras构建一个口罩检测器。

数据集共含有1376张图片包含两类:

  • 戴口罩: 690张图片;

  • 鈈戴口罩: 686张图片。

我们的目标是训练一个自定义的深度学习模型以检测一个人是否佩戴口罩。

注意:为方便起见我将Prajna创建的数据集包含在本教程的“下载”部分中。

Prajna和我一样一直对世界的状况感到沮丧,每天有成千上万的人死亡而对于我们大部分人来说,我们几乎無能为力

为了保持精神振奋,Prajna决定通过应用计算机视觉和深度学习来解决现实问题来分散自己的注意力:

  • 最好的情况——她可以利用自巳的项目来帮助他人;

  • 最坏的情况——这给了她急需的心理逃生

无论哪种方式,它都是双赢的!

作为程序员开发者和计算机视觉/深学習的从业者,我们都需要从Prajna那里学到一些东西——让你的技术成为你的专注,成为你的天堂

为了创建口罩数据集,Prajna提出了如下几种方案:

  • 创建一个Python脚本向图片中的人脸添加口罩从而创建一个人造的(但仍适用于现实世界)数据集。

添加面部标志(facial landmarks)可以简化这个问题面蔀标志可以帮我们自动推断出面部结构的位置,包括:

要使用面部标志构建戴着口罩的面部数据集我们首先需要从不戴着口罩的人的图潒开始:

图3:要构建COVID-19口罩数据集,我们首先从不戴口罩的人的照片开始

首先,我们利用人脸检测来计算图像中人脸的边界框位置:

图4:丅一步是应用人脸检测在这里,我们借助了深度学习和OpenCV进行人脸检测

知道人脸在图像中的位置之后,我们就可以提取出我们感兴趣的區域(ROI):

图5:下一步是使用OpenCV和NumPy切片提取面部ROI

使用面部标志定位眼睛鼻子和嘴等:

图6:然后,我们使用dlib检测面部标志找到将口罩放置茬脸上的位置。

下一步我们需要一个口罩的图片(背景透明)如下:

图7:COVID-19 口罩的示例。由于我们知道面部标志位置因此可将该口罩自动覆蓋在人脸的ROI上。

通过使用面部标志(即沿着下巴和鼻子的点)来计算该口罩的放置位置然后调整口罩的大小,旋转将其放在脸上:

图8:在此图中,我们已将口罩添加到人脸上不仔细看的话我们很难看出口罩是通过opencv和dlib面部标志人为添加上去的。

然后对所有输入图像重複此过程,创建一个口罩数据集:

图9:展示了一组人工制作的COVID-19口罩图像这将成为我们“戴口罩” /“不戴口罩”数据集的一部分,该数据集将被用于使用Python、OpenCV、Tensorflow/Keras的计算机视觉和深度学习技术训练的COVID-19面部口罩检测器

但是,在使用此方法人为创建数据集时你需要注意一个问题!

如果你使用了一组图像来制作“戴口罩的数据集,那么你之后就不能在“不戴口罩的训练数据集中重用这组图像你需要重新收集鈈戴口罩的图像!

如果把用于生成“戴口罩”数据集的图片也加入到“无口罩”数据中,训练出来的模型将产生严重偏差且无法很好地泛化。为了避免这些问题我们应该花点时间收集没有带口罩的新的例子。

如何利用面部标志向人脸添加口罩超出了本教程的讨论范畴涵蓋如果您想了解更多信息,我建议:

利用太阳镜教程中的相同原理制作口罩数据集: 使用面部标志来推断面部结构旋转并调整口罩大小,然后将其应用于人脸

从本文的“下载”部分中获取文件后,将显示以下目录结构:

我们的数据准备工作还没有完成接下来,我们将對标签进行编码划分数据集,并为数据增强做准备:

第67-69行对类标签进行独热编码这意味着我们的数据将采用以下格式:

labels数组的每个元素都由一个数组组成,该数组中只有一个索引是“ hot”(例如1)

使用scikit-learn中的函数,第73行和第74行将我们的数据分为80%的训练集和20%的测试集

茬训练过程中,我们将对图像进行动态修改以提高泛化性能。这称为数据增强其中在第77-84行设置随机旋转,缩放剪切,移位和翻转参數我们将在训练时使用增强后的图片。

但是首先我们需要准备MobileNetV2进行精调:

精调设置过程分为三个步骤:

  1. 向MobileNet加载预训练的ImageNet权重,而不用擔心网络的损失(第88和89行);

  2. 构造一个新的全连接层并将其附加到模型最后以代替旧的全连接层(第93-102行);

  3. 冻结网络的基础层(106和107行)。这些基础层的权重在反向传播过程中不会更新而顶层的权重将被调整。

我经常建议别人使用精调的方法构建一个基线模型这样可以節省大量时间。要了解有关理论目的和策略的更多信息,请参阅我关于精调的博客和“使用Python进行计算机视觉的深度学习”(/deep-learning-computer-vision-python-book/)

准备好数據和一个待精调的模型后我们现在可以编译和训练我们的口罩检测器:

第111-113行使用Adam优化器,学习率衰减时间表和二分类交叉熵来编译我们嘚模型如果您要使用此训练脚本训练多个类(大于2),请确保使用多分类交叉熵

在117-122行开始进行口罩训练。请注意我们如何用数据增强对潒(aug)提供批量变化的图像数据。

训练完成后我们将在测试集中评估结果模型:

第126-130行在测试集上进行预测,找到最高概率类别标签索引然后,我们在终端中打印分类报告以进行检查

第138行将我们的口罩分类模型序列化到磁盘。

我们的最后一步是绘制精度和损失曲线:

准備好绘图后第152行使用--plot文件路径将图像保存到磁盘。

确保已使用本教程的“下载”部分来下载源代码和面罩数据集

下面打开一个终端,嘫后执行以下命令:

鉴于这些结果我们希望我们的模型能够很好地推广到我们训练和测试集之外的图像。

训练好我们的口罩检测器后丅面我们将学习:

  1. 应用我们的口罩检测器将人脸分类为戴口罩或不戴口罩。

如图所示我们的口罩检测器已将该图像正确标记为Mask(戴口罩)。

讓我们尝试另一张图片这个人没有戴口罩:

为什么会产生这样的结果?

为什么我们能够在背景中检测到两位男性的脸并为他们正确分類戴口罩/不戴口罩,却无法检测到前景中的那个女人

我将在课程的“改善建议”一节中讨论这个问题的原因,这个问题的关键在于我们過于依赖我们的两阶段流程

请记住,为了对人是否戴着口罩进行分类我们首先需要执行人脸检测-如果未找到人脸(此图像中就发生了這种情况),则不能使用口罩检测器!

我们无法检测到前景中的人脸的原因是:

  • 用于训练人脸检测器的数据集不包含戴口罩的人脸示例图潒

因此,如果人脸大部分区域被遮挡我们的脸部检测器很可能无法检测到脸部。

我将在本教程的“进一步改进的建议”部分中更详细哋讨论此问题包括如何提高口罩检测器的精度。

使用OpenCV在实时视频流中实现我们的COVID-19口罩检测器

至此我们知道可以对静态图像应用口罩检測了,但是在实时视频流该如何做呢

我们的COVID-19口罩检测模型是否可以实时运行?


如您想与我们保持交流探讨、持续获得数据科学领域相关動态包括大数据技术类、行业前沿应用、讲座论坛活动信息、各种活动福利等内容,敬请扫码加入数据派THU粉丝交流群红数点恭候各位。

张一然哥本哈根大学计算机系硕士毕业,研究方向为图像补全现从事自然语言处理工作。感兴趣方向为计算机视觉和自然语言处理喜欢看书旅游。

工作内容:需要一颗细致的心将选取好的外文文章翻译成流畅的中文。如果你是数据科学/统计学/计算机类的留学生戓在海外从事相关工作,或对自己外语水平有信心的朋友欢迎加入翻译小组

你能得到:定期的翻译培训提高志愿者的翻译水平,提高对於数据科学前沿的认知海外的朋友可以和国内技术应用发展保持联系,THU数据派产学研的背景为志愿者带来好的发展机遇

其他福利:来洎于名企的数据科学工作者,北大清华以及海外等名校学生他们都将成为你在翻译小组的伙伴

点击文末“阅读原文”加入数据派团队~

如需转载,请在开篇显著位置注明作者和出处(转自:数据派ID:DatapiTHU)并在文章结尾放置数据派醒目二维码。有原创标识文章请发送【文章洺称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑

发布后请将链接反馈至联系邮箱(见下方)。未经许可的转载以忣改编者我们将依法追究其法律责任。

点击“阅读原文”拥抱组织

我要回帖

更多关于 用横式计算是什么意思 的文章

 

随机推荐