TinaFace论文TinaFace: Strong but Simple Baseline for Face Detection。
官方代码:https://github.com/Media-Smart/vedadet/tree/main/configs/trainval/tinaface
TinaFace 该模型基于RetinaNet,相比RetinaNet只做了很小的改动:
- 将BN换成GN;
- 加了一个IoU预测分支;
- 在backbone上嵌入了DCNv1;
- 将框回归的loss从smooth l1 loss替换为DIoU loss。
TinaFace非常简单,基于RetinaNet,所添加的模块在在通用的目标检测框架(比如mmdetection、vedadet)中都是现成的。而且训练不需要大batch,即使你的显存只有11G,也可以复现TinaFace。也正因为TinaFace使用的模块都非常经典、成熟,TinaFace也会比较容易部署。
我们的代码开源地址为TinaFace,基于vedadet,里面提供当前最好结果的权重,以及训练、测试、推理代码,无论大家是想做研究、打比赛、还是仅仅想体验state of the art的效果,这个repo都能满足你。
vedadet能做到的不仅于此,vedadet是我们基于mmdetection开发的单阶段目标检测框架,适用任意目标检测任务,无论是人脸检测还是通用目标检测。vedadet提供训练、测试、推理特性,后续会支持转ONNX/TensorRT,以及基于TensorRT的Python前端SDK或者C++前端SDK。
摘要:
人脸检测和一般目标检测之间没有差距。
我们使用ResNet -50为骨干,所有模块和技术均在TinaFace构建在现有模块上,易于实现,基于通用对象检测。
在最流行和最具挑战性的人脸检测基准WIDER face的hard测试集上,通过单模型和单尺度,我们的TinaFace实现了92.1%的平均精度(AP),超过了目前大多数具有更大骨干的人脸检测器。
在使用了测试时间增强(test time augmentation,TTA)后,我们的TinaFace的性能优于目前最先进的方法,达到了92.4%的AP。
主要贡献:
(1)这表明人脸检测实际上是一类通用目标检测问题,可以用通用目标检测技术来处理;
(2)提供一个强大而简单的人脸检测基线方法TinaFace。TinaFace中使用的所有想法和模块都是基于通用的对象检测;
(3)在单尺度和单模型的情况下,我们在hard集的WIDER FACE测试子集上实现了92.1%的平均精度(AP),这已经超过了大多数最新的具有更大主干和测试时间增强(TTA)的方法。我们最终的模型在测试子集的hard集中获得92.4%的AP,并优于目前最先进的面孔检测方法。
网络结构:
(a)ResNet + FPN
(b)Inception 块,增强接受域;
(c)分类头;
(d)回归头;
(e)IoU头;
Inception Module
多尺度一直是通用目标检测中的一个难题。常用的处理方法有多尺度训练、FPN体系结构和多尺度测试。此外,我们在我们的模型中使用了inception模块[36]来进一步增强这种能力。inception模块使用不同数量的3×3卷积层并行形成不同接受域的特征,然后将它们组合在一起,帮助模型在多个尺度上捕捉对象和上下文
IoU-感知 分支
IoU感知的[43]是一种非常简单优雅的方法,可以缓解单级目标检测器分类分数与定位精度不匹配的问题,可以利用分类分数,抑制误报检测框(高分低IoU)
损失函数:
对应的论文:http://www.136.la/jingpin/show-141192.html
实验:
Training Setting。在3个GeForce GTX 1080 Ti上使用批量为3×4的SGD优化器(动量0.9,重量衰减5e-4)对模型进行训练。学习速率的过程是在630个epoch中每30个epoch用余弦衰减规则从3.75e-3退火到3.75e-5。在前500次迭代中,学习率从3.75e-4线性升到3.75e-3。
Testing Setting 。单尺度测试只包含保持比调整大小,保证图像的长短边缘不超过1100和1650。测试时间增强(Test Time Augmentation, TTA)由多尺度(图像的短边为[500,800,1100,1400,1700]),平移(方向为[(0,0),(0,1),(1,0),(1,1)]),水平翻转和框投票组成