RetinaFace: Single-stageDenseFaceLocalisationintheWild
retinaface是一个鲁棒性较强的单阶段人脸检测器,比较突出的工作是加入了 extra-supervised 和 self-supervised ;
大部分人脸检测重点关注人脸分类和人脸框定位这两部分,retinaface加入了face landmark 回归( five facial landmarks)以及dense face regression(主要是3d相关);
加入的任务如下图所示:
retinaface结构特点主要以下几点:
feature pyramid,采用特征金字塔提取多尺度特征, (to increase the receptive field and enhance the rigid context modelling power)
single-stage,单阶段,快捷高效,用mobile-net时在arm上可以实时
Context Modelling, (to increase the receptive field and enhance the rigid context modelling power)
Multi-task Learning ,额外监督信息
结构图如下:
loss函数设计:Multi-taskLoss
第一部分是分类Loss, 第二部分是人脸框回归Loss, 第三部分是人脸关键点回归loss,第四部分是dense regression loss;
在实现的时候,还有些细节。
1.使用可行变卷积代替lateral connections和context modules中的3*3卷积 (further strengthens the non-rigid context modelling capacity);
2.anchor的设置,fpn每层输出对应不同的anchor尺寸。
3.Extra Annotations,数据集部分做额外的标注信息
3.1定义了五个等级的人脸质量,根据清晰度检测难度定义;
3.2定义人脸关键点。
结果:
在WIDER FACE dataset上,96.9% (Easy), 96.1% (Medium) and 91.8% (Hard) for validation set, and 96.3% (Easy), 95.6% (Medium) and 91.4% (Hard) for test set.
速度:
表格里面单位ms;轻量级网轻松达到实时检测。
主网络结构代码:
importtorchimporttorch.nn as nnimporttorchvision.models.detection.backbone_utils as backbone_utilsimporttorchvision.models._utils as _utilsimporttorch.nn.functional as Ffrom collections importOrderedDictfrom models.net importMobileNetV1 as MobileNetV1from models.net importFPN as FPNfrom models.net importSSH as SSHclassClassHead(nn.Module):def __init__(self,inchannels=512,num_anchors=3):
super(ClassHead,self).__init__()
self.num_anchors=num_anchor