DBFace升级,模型仅1.3M的轻量级高精度人脸检测模型

本文转载自DeepBlue深兰科技

已获原文作者授权转载,请勿二次转载

前段时间DBFace人脸检测库横空出世,被高度评价为:“这个仅7M大小的人脸识别模型几乎识别出了世界最大自拍照中的所有人像!”,而近来又进行了升级,最小模型仅1.3M!

DBFace系出名门:国内人工智能公司深兰科技(DeepBlue),这个模型的创建者,正是来自深兰科技下属深兰科学院算法研究所的两位“高手”——Libia和Wish。

据了解,该模型起初只是被放在了Github上,没想到被《机器之心》扒了出来,目前在Github上已有近700颗星。

今天

就跟随这两位算法大咖

一起来看看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来优化任务,其缺点在于:

  • 预测框bbox和ground truth bbox如果没有重叠,IOU就始终为0并且无法优化。其损失函数失去了可导的性质。

  • 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.实际运行

项目地址:https://github.com/dlunion/DBFace

下载代码后main.py提供基于图像和摄像头的案例,我们稍加修改后:

 

把图像放到datas目录下,执行后,结果在detect_result中,我们看到如我们预期的结果:

  

 

 

下图,对于戴口罩人脸的检测(训练时并未使用戴口罩数据,因此将会加入戴口罩数据进行训练以优化模型的效果)。

 

这个轻量级人脸检测模型可谓是业内的一股清流,不但识别准确率高、运行门槛低,实用扩展的空间也较大。欢迎更多感兴趣的朋友前往Github体验使用!

更多阅读:

大盘点|轻量级人脸检测算法实现,快到没朋友的都在这里了~

END

备注:人脸

人脸技术交流群

人脸检测、识别、对齐、重建、表情识别、表情迁移等技术,

若已为CV君其他账号好友请直接私信。

我爱计算机视觉

微信号:aicvml

QQ群:805388940

微博知乎:@我爱计算机视觉

投稿:amos@52cv.net

网站:www.52cv.net

在看,让更多人看到  

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值