本文转载自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
在看,让更多人看到