望舒  个推 Android 高级开发工程师

 

前言

 

史上最长春假结束,全国各地企业陆续复工。机场、火车站等地又将迎来人流高峰,我们对疫情防护仍然不能有所懈怠。如何实时检测人群口罩佩戴情况从而快速发现未按要求佩戴口罩的人,对于防疫工作来说,是个头大的问题。


目前AI人脸口罩检测方案已成为返工潮中众多社区、企业、商场解决该问题的首选方案,并得到了较好的应用。各大企业也积极为AI战“疫”做出贡献,百度开源了业界首个口罩人脸检测及分类模型,滴滴随后也免费开放了口罩佩戴识别技术。那么,它们是如何建立口罩检测模型的呢?其背后原理是什么?今天小编将为你揭开TensorFlow模型训练的秘密,让你看完本篇文章,就能学会自己训练模型。

 

知识点

 

TensorFlow™ 是一个采用数据流图(data flow graphs)对数值予以计算的开源软件库。数据流图根据“节点”(nodes)和“线”(edges)的有向图来描述数学计算。“节点” 一般表示施加的数学操作,但也可以代表数据输入(feed in)的起点/输出(push out)的终点,或者是读取/写入持久变量(persistent variable)的终点。“线”表示“节点”之间的输入/输出关系。这些数据“线”可以传递“size可动态调整”的多维数据数组,即“张量”(tensor)。一旦输入端的所有张量准备好,节点将被分配到各种计算设备完成异步并行运算。

 


(图片来源于TensorFlow社区)

 

Faster R-CNN主要包括两个模块:一个是深度全卷积网络RPN,该网络用来产生候选区域;另一个是Fast R-CNN检测器,它依赖RPN网络产生的候选区域进行分类与边框回归计算。

 

(图片来源于arxiv.org)

 

FasterR-CNN网络的核心点就是RPN候选区域生成网络的设计。RPN网络结构的设计基于卷积神经网络,输入一张图像,RPN网络便会输出一系列的候选物体矩形框,每个矩形框附带一个分数来表示其属于真实物体的信念值。RPN由一个全卷积网络构建,方便与Fast R-CNN共享参数,RPN与Fast R-CNN共享卷积层。

 

(图片来源于doutugou)

 

开始动工

 

问题:


如何基于TensorFlow训练口罩检测模型?

相关资源

 

1、TensorFlow Models

 

下载地址:https://dwz.cn/nw3xPTLZ
配置参见:https://dwz.cn/9vJY5MKs

 

2、COCO数据集预训练模型

 

下载地址:https://dwz.cn/KD9mWgQA

 

3、LabelImg

 

下载地址:https://dwz.cn/KWrIjpAk

 

准备样本数据

 

使用Labellmg工具对每张图片的目标位置进行框选,随后打上分类标签(mask,nomask),保存后输出XML文件。

 

(图片来源于UnSplash)

 

2、将用于训练的XML文件转换为CSV格式

 

调用xml2csv.py,并更改数据输入和输出目录,从而将数据分为三部分(训练集、验证集、测试集),最后运行脚本,即可完成CSV文件转换。

 

3、将CSV文件转换为TFRecord格式

 

TFRecord格式由TensorFlow制定,是结合图片和标签数据产生的二进制文件,能更好地利用内存机制,实现快速读取、复制、移动、存储等功能。我们使用generate_tfrecord.py指定输入、输出路径便可完成转换。

 

配置标签文件

 

前文已经把用于训练集和验证集的record文件准备好了,接下来我们需要仿照TensorFlow Models 中 models/research/object_detection/data/pet_label_map.pbtxt 创建一个标签文件mask.pbtxt,用于定义模型的分类。

 

 

配置训练参数

 

仿照TensorFlow Models 中models/research/object_detection/samples/configs/faster_rcnn_resnet101_coco.config创建 mask.config将num_classes修改为当前的分类数量;

 

 

将所有PATH_TO_BE_CONFIGURED改为本机路径;

 

 

开始训练

 

调用model_main.py训练

 

 

动态监测

 

使用tensorboard工具进行训练情况监测

      

 

训练结果

 

场景人脸口罩检测(图片来源于pixabay)

 

 

 

注意

 

准备样本时,为什么要对待检测目标进行分类?

 

图片分类是将图片分为某一类别,理论上,正确答案只有一个;而物体检测则是将待检测图片中所出现的全部物体用矩形进行框选标注,物体的类别除了我们文中提到的口罩,还可以有其他选择,例如人、手机、车、楼等。换句话说,这是个多选题,答案不止一个。

 

结语

 

口罩检测模型训练,首先要准备充足的样本数据,其次将待检测样本予以标注分类,分为佩戴口罩和未佩戴口罩两类;然后通过大量的样本数据训练得出检测模型;最后针对训练得到的模型进行验证评估和相关参数调优。

 

抗击疫情,我们在行动。小编希望,这项技术的运用可以减少公众场所的安全隐患,让开发者的力量影响到更多人,从而为疫情防护做出贡献。

 

如何获取口罩训练项目源代码

 

关注【个推技术学院】微信公众号

(微信号:getuitech)

回复关键词“口罩”

即可获取源代码