DBFace,被《机器之心》扒出来的轻量级高精度人脸检测模型
DBFace,被《机器之心》扒出来的轻量级高精度人脸检测模型上周末,一篇题为《模型仅有7M:轻量级高精度人脸识别方法DBFace》的文章在国内头部的专业人工智能媒体《机器之心》上首
上周末,一篇题为《模型仅有7M:轻量级高精度人脸识别方法DBFace》的文章在国内头部的专业人工智能媒体《机器之心》上首发后,即被新浪科技、CSDN、机器学习研究会等多家科技/垂直类(自)媒体进行了转载。
而对DBFace这个名字,业内人士更是很容易就能联想到人工智能头部企业深兰科技(DeepBlue)。果不其然,这个模型的创建者,这是来自深兰科技下属深兰科学院算法研究所的两位“高手”——刘安奇、杜金伟。
据了解,该模型起初只是被放在了Github上,没想到被《机器之心》扒了出来,而且短短3天时间,这个开源的模型就新增了近300次使用。
今天,就跟随这两位算法大咖,一起来看看DBFace是如何诞生的。
1. 网络选择
DBFace的初衷是设计一款轻量级的人脸检测器,能够在边缘计算上有效的使用,加上因为疫情缘故,对于hard类(例如戴上口罩)人脸检测显得尤为重要。因为CenterNet具有后处理的简洁高效性,以及对小目标友好等特点。综合性能和速度的考虑下,我们选择了CenterNet结构做检测任务, 采用MoblienetV3做backbone。相较于MobilenetV2, MobilenetV3在其基础上新增了 SE 、Hard-Swish Activation等模块,兼顾Infernce速度的同时并提升网络性能 。结构如下:
对于任务头的设计,我们引入了SSH的DetectModule和ContextModule,经实验验证该模块能有效的提升DBFace算法的检出性能
对于上采样设计,我们采用Upsample+Conv+Act的方式,避免使用反卷积造成可能的锯齿问题
2.Loss定义
整个网络由三部分Loss组成:热力图(HeatMap)损失, 位置坐标偏移量(BoundingBox)损失,关键点(Landmark)损失
2.1 HeatMap 损失:Focal Loss
Focal loss,该损失函数是在标准交叉熵损失基础上修改得到的。可以通过减少易分类样本的权重,使得模型在训练时更专注于难分类的样本,从而能有效的缓解类别不均衡带来的网络注意力偏差问题
这里γ取2,y=1时,α为正样本的权重,参照CenterNet,定义为目标周围半径处3*3范围为1,其他为0,目的是加强正样本的训练权重。y=0时,α为(1 - gt)4,此时GT是一个基于目标计算的椭圆高斯图,参照TTFNet(Training-Time-Friendly Network for Real-Time Object Detection)
2.2 位置坐标偏移量损失: GIoU Loss
目前大部分目标检测中主流的边界框优化采用的都是BBox的回归损失(MSE loss, L1-smooth loss等),该种方式通过距离计算损失值,从而忽略了检测框本身最显著的性质IoU。如下图所示,在L1及L2范数取到相同的值时,实际上检测效果却是差异巨大的,直接表现就是预测和真实检测框的IoU值变化较大,这说明L1和L2范数不能很好的反映检测效果。
通过IOU作为Loss来优化任务,其缺点在于:
a.预测框bbox和ground truth bbox如果没有重叠,IOU就始终为0并且无法优化。其损失函数失去了可导的性质。
b.IOU无法分辨不同方式的对齐,例如方向不一致等情况
GIOU则能很好的解决上面两个问题
假设现在有两个任意的bbox A和B,我们要找到一个最小的封闭形状C,让C可以将A和B包围在里面,然后我们计算C中没有覆盖A和B的面积占C总面积的比例,然后用A和B的IOU值减去这个比值。
2.3人脸关键点Landmark回归:WingLoss
由于SmoothL1 Loss对于较大误差时比较敏感,但是对中小误差则比较不敏感,而导致关键点无法得到精细结果,因此考虑加重对中小误差的关注,对比试验后,选择WingLoss(Wing Loss for Robust Facial Landmark Localisation with Convolutional Neural Networks)作为landmark训练loss
WingLoss
这里我们采用了w=10,e=2,同时为了避免landmark相对人脸中心和宽高带来的累积误差,因此我们对landmark是相对于人脸中心点的方式进行训练
3.数据增广
random filp、random scaling、color jittering、randomly crop square patch、image compress
检测结果及精度验证
4.实际运行
项目地址
下载代码后main.py提供基于图像和摄像头的案例,我们稍加修改后:
把图像放到datas目录下,执行后,结果在detect_result中,我们看到如我们预期的结果:
下图,对于戴口罩人脸的检测(训练时并未使用戴口罩数据,因此将会加入戴口罩数据进行训练以优化模型的效果)
上一篇:海信大规模裁员:都是疫情惹的祸?
-
优必选劳佩锋:导航和红外检测是机器人的核心,防疫复工机器人立下汗马功劳|算力大学视频公开课全文2020-04-15
-
自动检测!机械手自动化上下料就靠它了2020-04-12
-
MedGenome:D轮融资5500万美元,一家正在改变印度的基因组检测龙头企业2020-04-11
-
天有不测风云, 提前8小时预测! 谷歌提出基于深度学习的降水预测模型MetNet2020-04-10
-
抗击疫情!武汉大学提出口罩人脸识别数据集和模型, 95%精度不在话下2020-04-09
-
解禁有风险?中科院研发新冠病毒核酸快速检测系统2020-04-09
-
【首发】金橡医学完成逾亿元A轮融资,加速实体和血液肿瘤基因检测双领域升级2020-04-09
-
可燃气体检测模块FSM-T-601用于检测加油站气体泄漏情况2020-04-09
-
妈咪知道深圳儿科诊所业务接入企鹅杏仁,企鹅杏仁“城市模型”战略步伐加快2020-04-08
-
检测空气质量的车用空气质量传感器2020-04-07
-
先临三维全新推出AutoScan Inspec全自动桌面三维检测系统2020-04-04
-
硕世生物走上BD公司崛起之路:病毒检测快枪手,可否问鼎全球?2020-04-03
-
病毒检测“快枪手”硕世生物,如何保护中国女性健康?2020-04-02
-
董明珠:格力2月损失100亿、每天造50万个口罩2020-04-01
-
国外专家称无症状患者或有抗体 大规模抗体检测有助于群体免疫2020-03-31