本网站使用Cookies 以优化阁下的用户体验。继续浏览网页,以示阁下同意本站使用Cookies。详情请参阅Cookie政策私隐政策

确定

首页 > 资源中心 > 网志

2020-05-29

如何实现AI人脸识别及口罩佩戴检测功能?

人工智能

我们依然采用以上三个阶段来逐步阐述实现细节。


第一阶段:资料收集

事实上,收集的原始口罩资料是包含多余的额外背景信息。为了仅保留面部区域的照片,我们用到了MTCNN算法进行人脸检测。MTCNN算法不仅可以判断当前照片是否有人,而且若有人出现,能相应地检测出人脸的坐标位置。

如何实现AI人脸识别及口罩佩戴检测功能?


通过MTCNN进行人脸检测,我们可以对所有的原始数据进行处理,仅保留脸部信息,最后还需要对图片的尺寸统一缩放到112×112。MS-Celeb-1M的图片数据也需要进行同样的检测、截取、缩放操作。


我们将口罩数据按如下划分为训练集(训练模型参数)和验证集(验证模型精度)

训练集:1,300张口罩照片、1,300张无口罩照片

验证集:300张口罩照片、300张无口罩照片

人脸识别数据的训练集使用了MS-Celeb-1M,验证集则选用了LFW (Labeled Faces in the Wild),后者是业界普遍用于评判一个识别模型精度的基准图像库。


第二阶段:训练

我们选用了MobileNet V2作为口罩判断模型的网络,MobileNet V2是一个轻量级的卷积神经网络,该网络的设计原则是预测精度有略微的减少的同时,显著地减少模型参数和数学计算量,最终使模型的运算性能达到较佳的状态。MobileNet V2的网络架构使用到的两种block设计,另外,我们把该网络的数据输入层的尺寸设定为112×112(原网络的输入为224×224),这也是在数据处理时需要把图片尺寸统一为112×112的原因。

如何实现AI人脸识别及口罩佩戴检测功能?


我们使用了MrCPlusPlus提供的预训练模型作为口罩检测模型的初始化模型,将原网络的输出层修改为2(因为只有戴口罩和没戴口罩两个类别),然后再进行微调训练。训练参数设置为batch size=32(每次取32张照片同时进行训练),使用ADAM优化器用作网络参数的更新,初始学习率设置为0.1,损失函数我们选用了Softmax Loss并加入了权重L2正则化。参数更新迭代了40次后,模型的验证集精度已经达到了98%,并趋于稳定。


在项目mask_wear_detection路径下,包含以下文件结构:

如何实现AI人脸识别及口罩佩戴检测功能?


./data/ 主要存放口罩的图片数据

./output/ 存放预训练的模型文件以及训练后得到的模型文件

至于目录下的Python脚本,则对应以下功能:

data_process.py: 将原有的jpg档转换成Tensorflow的特定文件格式tfrecords。

train_nets_transfer_learning.py: 训练口罩佩戴检测模型。

eval_ckpt_file.py: 评估模型的识别精度

freeze_graph.py: 冻结模型。将训练所得的.ckpt格式的模型转换成最终部署的.pb格式。

inference_predict_pb.py: 对单张图片进行推理运算。

common.py: 包含一些模型训练的设置。

MobileFaceNet.py: 使用的MobileNet V2神经网络结构。


首先需要进行文件格式转换,打开data_process.py可以看到:

如何实现AI人脸识别及口罩佩戴检测功能?

我们分别对使用预设定的clear_train.txt和clear_val.txt生成了没戴口罩的训练集和验证集,mask_train.txt和mask_val.txt生成了戴口罩的训练集和验证集。

打开train_nets_transfer_learning.py,我们需要在脚本的开头导入以下开发包

如何实现AI人脸识别及口罩佩戴检测功能?


我们设置了如下训练超参数

如何实现AI人脸识别及口罩佩戴检测功能?

优化器默认选择了Adam

如何实现AI人脸识别及口罩佩戴检测功能?

将data_process.py中已生成的训练集和验证集的tfrecords文件路径设置为train_file_path和validate_file_path,然后使用Tensorflow的iterator函数每次获取训练/验证数据。

如何实现AI人脸识别及口罩佩戴检测功能?


我们对网络的卷积权重参数进行了L2正则化处理,加上顶层的Softmax Loss,构成最终的总损失total_loss

如何实现AI人脸识别及口罩佩戴检测功能?
因为我们此次训练使用了迁移学习,我们需要导入设定的pretrained_model, 并且加载除了顶层以后的所有网络层参数作为初始化参数。


如何实现AI人脸识别及口罩佩戴检测功能?


通过执行Tensorflow的会话session,我们可以针对images_train(训练集图片数据)和labels_train(训练集标签)进行参数训练了。通过观察total_loss_train和acc_train获知当前训练集的损失值(越低越好)和准确率(越高越好)。

如何实现AI人脸识别及口罩佩戴检测功能?


我们设定了每训练次数达到10次(validate_interval的值),就进行验证集损失(inference_loss)和准确率(acc_val)计算,实时获知当前模型的泛化能力。

如何实现AI人脸识别及口罩佩戴检测功能?


若当前的验证集准确率有提升,则以ckpt的格式保存当前的模型。

如何实现AI人脸识别及口罩佩戴检测功能?


如何实现AI人脸识别及口罩佩戴检测功能?


我们选用了ResNet50作为人脸识别模型的网络, ResNet50 归属于Residual Network系列。 Residual Network的设计思路是首次提出了直连接,即底层的特征与高层的特征进行迭加融合,这种设计解决了训练过程中的梯度消失和梯度爆炸问题,使底层的网络参数也能得到有效的训练更新。同样地,网络的数据输入层也设定为112×112。。


我们参考了deepinsight的ResNet50模型,并选用了该模型作为预训练模型,然后进行微调训练。训练参数设置为batch size=8,epoch=10(训练集的数据训练10次),使用ADAM优化器用作网络参数的更新,学习率按下表设置:

epoch

1

2

3

4

5

6

7

8

9

10

学习率

0.1

0.01

0.01

0.01

0.001

0.001

0.0001

0.0001

0.00001

0.00001

损失函数我们选用了Softmax Loss并加入了权重L2正则化。最终训练得到的ResNet50在LFW的准确率能到达99.8%。


在项目InsightFace_Tensorflow路径下,包含以下文件结构:

如何实现AI人脸识别及口罩佩戴检测功能?


./data/ 存放了MS-Celeb-1M数据(train.rec和train.idx)、LFW数据(lfw.bin)以及tfrecords数据

./output/ 存放预训练的模型文件以及训练后得到的模型文件

至于目录下的Python脚本,则对应以下功能:

data_process.py: 将train.rec和train.idx转换成Tensorflow的特定文件格式tfrecords。

train_nets.py: 训练人脸识别模型。

eval_ckpt_file.py: 评估模型在LFW的识别精度

freeze_graph.py: 冻结模型。将训练所得的.ckpt格式的模型转换成最终部署的.pb格式。

inference_extract_pb.py: 对单张图片进行推理运算。

common.py: 包含一些模型训练的设置。

ResNet50.py: 使用的ResNet50神经网络结构。


首先需要进行文件格式转换,打开data_process.py可以看到:

如何实现AI人脸识别及口罩佩戴检测功能?

如何实现AI人脸识别及口罩佩戴检测功能?


我们把train.rec和train.idx文件路径赋值给idx_path和bin_path,可以生成Tensorflow指定的文件格式tfrecords,该生成的文件作为模型的训练集文件。

打开train_nets.py,我们需要在脚本的开头导入以下开发包

如何实现AI人脸识别及口罩佩戴检测功能?


我们设置了如下训练超参数

如何实现AI人脸识别及口罩佩戴检测功能?


如何实现AI人脸识别及口罩佩戴检测功能?

优化器默认选择了Adam

如何实现AI人脸识别及口罩佩戴检测功能?


将data_process.py中已生成的训练集tfrecords文件路径设置为tfrecords_file_path,然后使用Tensorflow的iterator函数每次获取训练数据。

如何实现AI人脸识别及口罩佩戴检测功能?


我们对网络的卷积权重参数和瓶颈层的特征进行了L2正则化处理,加上顶层的inference Loss,构成最终的总损失total_loss

如何实现AI人脸识别及口罩佩戴检测功能?


因为我们此次训练使用了迁移学习,我们需要导入设定的pretrained_model, 并且加载除了顶层以后的所有网络层参数作为初始化参数。

如何实现AI人脸识别及口罩佩戴检测功能?


通过执行Tensorflow的会话session,我们可以针对images_train(训练集图片数据)和labels_train(训练集标签)进行参数训练了。通过观察total_loss_train和acc_train获知当前训练集的损失值(越低越好)和准确率(越高越好)。

如何实现AI人脸识别及口罩佩戴检测功能?


我们设定了每训练次数达到10次(validate_interval的值),就评估模型在LFW的准确率,我们使用了verification.py的evaluate函数进行准确率评估。

如何实现AI人脸识别及口罩佩戴检测功能?


我们主要关注np.mean(accuracy)这项指标,假如该值有所提升,则以ckpt的格式保存当前的模型。

如何实现AI人脸识别及口罩佩戴检测功能?


值得注意的是,我们本次选用的MTCNN模型是源自OAID提供的预训练后的人脸检测模型。


第三阶段:部署

我们选用了FLIR C3作为本项目的图像采集摄像机,该款摄像头能通过热成像原理测量当前画面目标的表面温度。FLIR C3 SDK的开发语言是C#,因此我们选用C#作为软件开发语言,并将AI功能编译成dll的形式提供给软件加载并调用。

在上一阶段,我们已经训练得到了口罩判断模型、人脸识别模型以及现有的人脸检测模型。我们使用Neargye编译的Tensorflow C库对以上三个模型进行加载、推理等操作运算。最后,我们把这些C++实现的AI功能函数编译成了dll(因为C#调用C++源码,需要将后者编译成dll)。软件最终运行的系统平台是Windows 10。10。

< 返回阅读更多>





引用


[1] Guo, Yandong, et al. "MS-Celeb-1M: A Dataset and Benchmark for Large-Scale Face Recognition." european conference on computer vision (2016): 87-102.

[2] G. B. Huang, M. Ramesh, T. Berg, and E. Learned-Miller. Labeled faces in the wild: A database for studying face recognition in unconstrained environments. Technical report, 2007.

[3] Sandler, Mark, et al. "MobileNetV2: Inverted Residuals and Linear Bottlenecks." computer vision and pattern recognition (2018): 4510-4520.

[4] Open source code. Available from https://github.com/MrCPlusPlus/MobileFaceNet_Tensorflow_Pretrain.

[5] He, Kaiming, et al. "Deep Residual Learning for Image Recognition." computer vision and pattern recognition (2016): 770-778.

[6] Open source code. Available from https://github.com/deepinsight/insightface.

[7] Open source code. Available from https://github.com/OAID/FaceDetection.

[8] Open source code. Available from https://github.com/Neargye/hello_tf_c_api.


联络我们
公司名称:
联络人姓名:
职位:
联系电话:

-

邮箱:
备注

请向右滑动验证

产品与服务
网络连接 信息安全管理 云端运算方案 云数据中心 互联网服务 管理服务 欧洲解决方案
解决方案
建筑、工程及建造 汽车 银行、金融服务及保险业 物流及运输 制造 法律和会计服务 零售 医疗保健
技术与服务
咨询服务 客户服务
资源中心
产品单页 最新优惠 视频 白皮书 成功案例 网志
关于我们
我们公司 合作伙伴 新闻中心 认证及奖项 职位招聘
联络我们

一般查询 / 销售热线 +65 6220 6606

客户服务热线 +65 1800 226 8888

联络我们

关注我们

Copyright © 中信国际电讯(信息技术)有限公司 CITIC Telecom International CPC Limited

恭喜您提交信息成功


我们会尽快与您联系!
需要帮忙?联络CPC聊天机械人
浏览器支持:IE11、Firefox、Chrome和Safari 的最新版本
条款及细则
欢迎来到中信国际电讯(信息技术)有限公司。阁下与CPC聊天机器人的对话内容可能会被记录,以作培训、质量监控和纠纷处理之用。如阁下点击「继续」并使用CPC聊天机器人,即表示阁下接受并同意受本公司之私隐政策约束,并同意本站使用Cookies。详情请参阅Cookie政策私隐政策
继续