100小时从零开始:AI口罩佩戴检测系统

本文转载自:PYNQ开源社区微信公众号

感兴趣者可与 pynq_china@xilinx.com 联系,共同合作拓展项目。

本期为大家带来的是暑期学校优秀作品——口罩佩戴检测系统的介绍。在疫情防控期间,要好好佩戴口罩哦!

本项目已开源,详细内容请参照github库:https://github.com/seujingwei/Masking-Detection

项目介绍

日常生活中,面对经呼吸道传播的包括新冠肺炎等在内的传染性疾病,人们佩戴口罩进行防护可保护身体健康和生命安全。人脸佩戴口罩的自动化识别可以有效监督人们佩戴口罩,是抑制疾病在人流量大的公共场合快速传播和保护身体健康的重要技术手段。对于生活和生产中的口罩佩戴识别的需求,本文设计了基于深度学习的人脸口罩佩戴识别系统。该方法在利用自主设计的图像识别网络以及Xilinx最新的vitis-ai技术快速开发出符合要求的系统。利用近1万个公开数据,并采用数据增强等方法,在训练后得到95%的识别准确率,并可区分出正确佩戴口罩和捂嘴、带围巾等遮挡的情况。

作品功能

1. 对存储在SD卡内部的照片,进行口罩佩戴检测,检测到佩戴口罩则输出mask,否则输出nomask。

2. 通过usb摄像头,实时监测口罩佩戴情况,即是被检测者身处复杂背景下,依旧有良好的识别功能。

3. 通过实际测试,部署在u96平台上的神经网络相比较pc转换后的模型,转换精度损失小,测试集识别正确率依旧有88%以上。

4. 选取更加有代表性的数据集,网络模型训练更加充分,系统有较强的鲁棒性,不对测试环境有要求(如要求白色背景等等),此外口罩检测很容易出现用手捂住嘴巴,模型就认为是戴口罩的情况,本文通过数据清洗筛除了这些遮挡面部依旧算作佩戴口罩的数据,使得作品可以更加贴近现实情况,有更好的应用前景。

点击查看项目视频

项目系统框图与步骤

1、获取数据集

为了获得理想的训练效果,大量的优质数据集是非常重要的,可以说没有好的数据集作为支持,再好的网络结构也没有发挥全部的性能。我们获得数据的来源是网络爬虫技术。

2、网络训练

当口罩数据集准备好后,就可以进行神经网络模型的训练了。神经网络模型训练效果的好坏也会直接影响到最后模型部署到板卡上的效果。模型训练的过程基本上都在电脑(服务器)上进行。可以使用GPU来训练模型,如果没有GPU,也可以用CPU来训练,但训练速度会下降很多。

3、Vitis-AI

由网络训练获得的模型到后面部署在FPGA上,这一过程实现的方法有很多,如Verilog等rtl语言行为级描述设计整个加速器,包括卷积模块、池化模块等等;或者使用HLS高层级语言综合工具将C或者C++语言快速转换成相应的IP在vivado中调用,这种方法速度快于Verilog手写加速器。而本文则以第三种方式,即使用Xilinx公司最新生产力工具Vitis-AI,将训练获得的H5模型文件作为输入,通过模型的转化、模型量化、编译最后生成了一个可以部署在指定硬件平台的配置文件。

4、硬件部署

在Vitis-AI环境中,我们得到了elf部署文件,而在硬件平台ultra96V2上,需要使用类似于:

gcc -fPIC -shared dpu_dpuCarModel_0.elf -o libdpumodeldpuCarModel.so

这样的命令,调用pynq内部的编译器将elf文件编译成可被pynq识别的动态库文件,之后可以在python中使用

n2cube.dpuLoadKernel(KERNEL_CONV)

等API命令来调用之前编译生成的DPU动态库文件,如同vitis-ai的模型量化,读取的图片数据需要经过预处理才能输入到DPU的输入网络节点中,而输出节点输出的是softmax之前的网络输出,所以需要在pynq平台上用python手写一个softmax函数,使得网络结构保持完整(也可以通过节点连接dpu0的输出和dpu1的输入)。

项目结果示例




点击查看github库: https://github.com/seujingwei/Masking-Detection

推荐阅读