人脸口罩识别的项目总结
最近一段时间,国内部分地区又爆发了新冠疫情,传播速度很快。但最近天气炎热,人们戴口罩的自觉性不如从前了,在商场等公共场所,需要专门的人员去提醒顾客佩戴好口罩。因此萌发了使用计算机视觉来做一个口罩识别模型的想法,以下是对近期工作的总结。
1、初步想法
一开始,我把这个当成了一个分类模型,使用佩戴口罩的人脸图像和不佩戴口罩的人脸图像来训练一个卷积神经网络,只要模型在测试集上的准确度达到要求即可。具体做法可以看这一篇文章。这篇文章最后训练的模型完全可以识别人脸是否佩戴口罩(在测试集上的分类准确度达到了0.9698)。
但还是存在以下几个问题:
- 模型是用裁剪后的人脸训练的,那么在实际的应用中也应当使用裁剪后的人脸。
- 模型只能识别佩戴口罩和不佩戴口罩,却不能识别当前口罩是否佩戴正确,如下图所示。
- (最大的坑)这个文章用的测试集中的图片有很多在训练集和验证集中已经用过了,有部分data leakage的问题,实际的模型准确度不一定能达到0.9698。
# 在测试集上的表现
model.evaluate(X_test, y_test)
31/31 [==============================] - 0s 9ms/step - loss: 0.2265 - accuracy: 0.9698
[0.22651898860931396, 0.9697580933570862]
2、进一步的工作
因为上一次用的数据集中有数据泄露,整个数据集较大,因此我在这一部分更换了数据集,从新训练模型。依然将卷积神经网络当成一个图像分类的模型。具体操作可以看这一篇文章。这里的主要改进是以下几个方面:
- 更换了数据集,自己来划分训练集、验证集和测试集,避免了数据泄露的可能。
- 该数据集中增加了“口罩佩戴不正确”的这个类别
- 使用了opencv中自带
CascadeClassifier()
的来裁剪图片中的人脸区域,从而让模型具备在实际中应用的能力。 - 使用了opencv调用摄像头采集的图像,交予模型预测,并实时返回信息。
经过以上的改进后,至少解决了第一节中的数据泄露问题,模型在测试集上的准确度是真实可信的,
# 模型在测试集上的表现
18/18 [==============================