九九热国产手机精品

人工智能・口罩佩戴检测(1)

202110月27日

人工智能・口罩佩戴检测(1)

本文首发于微信公众号“白草红叶黄鸭”。

爱学习、爱写文章的黄文彬·达克又上线了。

在《人工智能图像分割(7)》一文中,本黄亚只是要求宝宝们将函数keras.applications.vgg16.VGG16()的参数“weights”的值设置为“imagenet”来实现迁移学习,被小伙伴以闪电般的速度发现并“举起了豹子”。

这位小朋友告诉黄文彬,根据“keras.io/api/applications/”网站上引用的例子,只有设置可训练的False,VGG16、ResNet、incident v3等神经网络各层的成员变量,才能实现迁移学习。否则,这些神经网络将继续在ImageNet权重的基础上进行训练。

为了查明事情的真相,黄文彬鸭决定做一个实验。请打开FlyAI网站,下载一个名为“口罩佩戴检测”的项目。

去年新冠肺炎疫情改变了人们的出行方式。直到今天,地铁站工作人员不仅要负责背包的安检,还要检查乘客是否佩戴口罩。不戴口罩不能坐地铁。

为了防止乘客在列车运行时悄悄摘下口罩或把鼻子放在口罩外面,站台上的工作人员会经常走进列车内部,检查地铁何时到站。此外,我们还可以在地铁车厢内安装人工智能摄像头,实时监控乘客佩戴口罩的情况,如果有人未按规定佩戴口罩,就会发出生理警报。

虽然这种智能口罩佩戴检测摄像头还没有普及,但黄文彬鸭可以先用FlyAI上的数据集构建和训练一个模型,看看推断的效果如何。

鉴于最近在论文、官网、GitHub上看到的函数和面向对象编程越来越多,Ben Huangya觉得自己的编程习惯可以一步一步优化。也就是说,不要把读取的数据、训练模型和预测写成三个”。py "文件依次运行;您只能创建一个名为“maskdetection.py”的可执行文件,用不同的函数封装这三个步骤,然后在main()函数中控制它们的执行顺序。

下面是这只黄鸭写的代码:

1 读取数据

函数cv2_letterbox_image():在《人工智能?CT影像诊断新冠肺炎》一文中,本黄鸭曾经为大家重点介绍过这个函数。它的功能是统一图片的尺寸大小,使之能输入到神经网络中。功能cv2_letterbox_image():在《新冠肺炎人工智能CT影像诊断》一文中,本黄亚曾经为大家介绍过这个功能。它的功能是统一图片的大小,以便将它们输入神经网络。

如果模型是全卷积神经网络,训练集图片的大小必须是统一的,测试集图片的大小可以是任意的。如果模型包含完全连接的图层,输入图片的大小必须一致。因此,当数据集图片或大或小时,黄文彬鸭强烈建议宝宝调用这个函数。

函数read_images_and_labels():顾名思义,函数是从文件中读取图像信息和标签信息,然后保存到"。npz "文件或pickle/ joblib二进制文件,以便于后续步骤。

在这一点上,神圣而善良的黄文彬鸭必须解释从FlyAI下载的数据是什么样的。

首先打开口罩佩戴测试项目的数据集,可以看到两个文件夹和一个名为“dev.csv”的文件。在“影像”文件夹中,有100多张大小不一、场景各异、表情各异的JPG照片,有的只是一个人,有的是多人,有的戴着口罩,有的没戴口罩,还有的戴着防毒面具。总之,数据集中的照片非常多样。

其次,在“标签”文件夹中,有一百多个TXT文本文件。黄鸭随机打开几个,发现有五列数据,前四列依次是x _ min、y _ min、x _ max和y _ max,也就是人脸在照片中的位置,最后一列是label。Label == 0表示没有戴口罩,label == 1表示戴口罩。

此外,一些文本文件只有一行数据,而其他文件有几行数据。这是什么意思?这说明一行数据是一张脸,多行数据是因为照片中有很多张脸。

第三,既然有图片和标签,dev.csv文件给我们提供了什么信息?答案是图片和标签的对应关系。

黄亚用Excel打开这个文件,发现里面只有两列,一列是image_path,一列是label_path。以第二行“images/751031692 . jpg labels/502063384 . txt”为例。这一行信息显示“images”文件夹中“751031692.jpg”图片的标签在“labels”文件夹中的“502063384.txt”文本文件中。

因此,这个csv文件非常重要。当我们读取图片和标签的信息时,可以逐行遍历文件,然后分别按照image_path和label_path在images和label文件夹中查找对应的图片和标签。

2 Methodology

看到这,黄文彬鸭认为这个项目类似于面部表情识别神。首先,通过哈尔级联分类器或多任务CNN检测人脸,并用方框框住人脸。然后将盒子里的人脸输入图像分类神经网络,推断是否戴口罩。

推断是否戴口罩是一个简单的二元分类问题,甚至机器学习算法都可以解决,更不用说深度学习算法了。鉴于黄文彬鸭的主要任务是研究迁移学习的方法,他选择了“重型武器”VGG16。

因此,在调用函数cv2_letterbox_image()时,我们应该将框中的人脸大小统一为224* 224* 3,也就是VGG16输入的大小。

这一点也不聪明。

首先,几乎所有盒子里的人脸大小都小于224* 224* 3。函数cv2.resize()实际上放大了图片,使其更加模糊,增加了许多对预测没有帮助的特征,降低了模型训练和预测的效率。

其次,VGG16对于人脸表情识别的七大分类问题来说过于复杂,非常容易过拟合。据推测,当只有100多张脸的口罩出现两级问题时,会更容易过度贴合。这只黄鸭强烈建议宝宝们简化模型,以匹配数据规模和问题的复杂性。您也可以继续参考“keras.io/api/applications/”的例子,在定制的输入张量上构建vgg16。

最后,明智的做法是让模型适应数据,而不是让数据容纳模型。

还有一个模式需要补充,那就是多任务CNN。

1.在《人工智能多任务CNN》一文中,本黄亚强调了如何根据论文作者绘制的神经网络结构示意图,构建P网、R网和O网,以及与感受野相关的一些问题。

2.在训练中,可以并行训练P网、R网和O网。但在预测时,图像或特征图必须先通过P网,再通过R网,最后通过O网输出。

3.P-Net是黄鸭已知的第一个全卷积神经网络,其特点是输入特征图尺寸小,推理效率高,预测精度低。R-Net和O-Net都包含全连通层,具有输入特征图尺寸大、推理时间长、预测精度高等特点。

4.为什么多任务CNN类似于哈尔级联分类器,可以从一张图片中检测出多张人脸?答案是他们都建立了图像金字塔。

5.多任务CNN比哈尔级联分类器之所以强大,是因为它不仅可以接收彩色图片作为输入,而且具有很高的准确率,因为模型已经从机器学习的Adaboost变成了深度神经网络。而且,训练集是一个“Wider Face”公共数据集,包含多种人脸,包括但不限于戴口罩、蒙面、侧脸等。但是,一般来说,口罩、护目镜、游泳镜、防毒面具、眼罩会涵盖很多有助于人脸检测的特征,要100%检测所有这些人脸并不是那么容易的。

综上所述,只要能做出有根据的猜测,增加数据集中图片的类型和数量,模型的准确率就能不断提高,类似于人脸识别的准确率,达到99.99%。

3 训练模型

函数build_model():构建一个以VGG16为基线模型,全连接层的神经网络。

从上图中,我们可以看到function model.summary()统计了可训练和不可追踪的参数数量。其中,模型的可训练参数个数与最后一个全连通层相同。这说明雅的小伙伴是完全正确的。只有将可训练的False、VGG16、ResNet、InceptionV3等神经网络的各层成员变量设置为False,才能实现迁移学习。

Train_model():绘制标签分布直方图;分割训练集和测试集;并建立培训模式;训练集和测试集中统计模型的准确性;将训练好的模型和可训练参数值保存在本地。

从上图可以看出,标签的分布基本平衡,但阳性样本和阴性样本的数量并不完全相同。不想采样多数/少数样本的宝宝可以像这只黄鸭一样忽略这个小问题。也可以参考下图所示的代码,对模型进行一波运算,实现正负样本的平衡。据这只黄鸭所知,婴儿可能会被VSCode无情地抛出这样一个异常:type error:unhable type:' numpy。nd数组。

4 Predict 函数predict_face():输入一个只包含一张脸的图像,输出是否戴口罩。

函数predict_image():输入单张图片,调用mtcnn库中的函数进行人脸检测,然后推断是否戴口罩。

函数predict_video():从摄像头或局部区域输入一段视频,调用mtcnn库中的函数检测人脸,然后推断是否戴口罩。

从上图中,我们可以看出,从《山河令》客串过来的阿絮凭借一条紫色的纱巾成功地蒙骗了人工智能的“慧眼”,被推断为“Wearing Mask”。本黄鸭还做了一些其他实验,发现只要用一只手捂住口鼻,就能被推断为“Wearing Mask”。从上图可以看出,作为嘉宾来自凌的阿旭,用一条紫色围巾成功欺骗了人工智能的“眼睛”,被推断为“戴着面具”。黄鸭做了一些其他的实验,发现用一只手捂住口鼻就可以推断为“戴口罩”。

想要解决这个问题的宝宝们可以在网上多找一些“蒙面大侠”的照片,前四列标签用Labelimg软件确定人脸的位置,最后一列标注为没戴口罩,并且把它们加入到images、labels文件夹和dev.csv文件中。想要解决这个问题的宝宝可以在网上找到更多“蒙面英雄”的照片。前四列标签使用Labelimg软件确定人脸的位置,最后一列标记为未佩戴口罩,并添加到images、labels文件夹和dev.csv文件中。

5 Conclusion

综上所述,数据、模型、训练都有可以改进的地方。

在FlyAI的榜单上,以及在知乎和CSDN层出不穷的“保姆级”教程中,黄文彬鸭发现了一个真相,那就是很少有人会使用Multi-task CNN和图像分类神经网络来实现口罩佩戴检测。大多数人选择了经典的目标识别和目标检测模型,如Faster RCNN、YOLO V3等。

再者,大神还提到了两个口罩佩戴检测的公开数据集:AIZOO和RMFD。在模型部署方面,安利创建了一个名为PyQt5的库来实现图形用户界面。甚至在“github . com/AIZOOTech/FaceMaskDetection”网站上,Ben Huangya也能下载完整的开源代码和训练好的模型。

当然,无论是开放数据集、对象识别的模型,还是用户界面,都是一个说不完的、被发现的话题,与本文的主题,即迁移学习的操作方法,相去甚远,在此不再深入探讨。

最后但同样重要的是,不要忘记给接种了新冠肺炎疫苗的宝宝戴口罩~

回到顶部

Powered by 九九热国产手机精品 @2018 RSS地图 HTML地图

2013-2021 版权所有