Skip to content

Latest commit

 

History

History
28 lines (18 loc) · 3.39 KB

README.cn.md

File metadata and controls

28 lines (18 loc) · 3.39 KB

DBFace

本项目只关注单尺度原图输入做推理,不会对比使用长边拉伸到1600、使用多尺度等等操作得出的mAP结果,因为考虑的是落地使用,不是为了刷分而存在。QQ群:936842116

经验

  • CenterNet这种基于高斯点的方式,对小目标天生友好,所以小目标很出众,也因此hard set的结果很容易做的很高,但是造成的结果通常是easy和medium不高

  • WiderFace的hard、medium、easy其实是按照人脸大小区分的,而hard打开后发现通常只有5*5甚至更小的脸

  • 如果过分追求hardset结果,只会导致检测器比较敏感,实际体验效果会差

  • CenterNet原始的模式,对大目标天生容易效果不好,官方版本DLA配了DCN来缓解这类问题,但是没有DCN的小网络就很明显感受到大目标的无力感。anchorbase和anchorfree的差距就在这里

  • CenterNet AnchorFree的特性是所有目标都一个点,正类贡献无论大小都一样,Anchor Base的特性是目标越大正类loss贡献越大,也正因此,大目标在CenterNet上训练效果总是不好

  • 解决大目标不行,本项目提倡增加pos_weights来处理,并且增加大目标的权重,实验证明有良好的提升大目标效果,具体可以参考代码。

  • 对于保留12*12,低于这个分辨率的直接做了负样本做法是不合理的,合理的做法是忽略,不应该对loss产生贡献,具体参考代码。这么做能够保证大目标的同时,提升hard小目标的精度

  • 对于landmark,我们倾向于不除以宽高,否则框的不准确直接导致点也存在累积误差而不准确,所以我们是基于中心的,同时使用了定制exp来做压缩值域操作

  • 双线性插值Bilinear+Conv+BN+Activation的上采样模块,优于用反卷积、最近邻插值等,所以比较推荐,但是不同框架对这个的支持不一样,造成使用困难。但是可能的情况还是建议使用这个搭配。他带来的时间消耗并不大,带来的效果却是很值得的。TensorRT可以使用插件实现bilinear,晚点我会发布到tensorRTIntegrate项目中,实现双线性插值

  • 检测的head模块,有个has_ext,是指是否有提取特征的部分,其实就是是否在每个head前面增加一个CBA(Conv+BN+Activation),如果需要提升效果,直接给True,效果是有明显提升的,但是会使得速度有点点降低,这个看具体需求场景。模型会大一点(比如400KB)

  • 测速这块儿因为工作太忙了,一直没来得及做速度比较。但是大概比较是我们的小模型(1.3MB)在selfie.jpg(2048 x 1150)上跑100次平均速度是8ms,比retinaface-mnet的6ms慢了2ms,(单独forward,tensorRT6.0,GTX1080Ti,没有预处理后处理),但是效果比他好,看指标就知道了

Hard高分策略

  • 对增广后的图像中,通常会设置保留最小的人脸大小,比如设置为12*12保留去训练,然而当你设置更低,例如8x8或者5x5时,hard提升非常明显
  • 如果做推理时把图像放大,这个很明显不用我说,对hard提升很大,也正因此本项目提倡采用原始分辨率单尺度,这种为了刷分骗自己没有什么意思
  • 但是如果是为了使用,hard通常太高并没有什么意义,我们应该追求easy和medium更高才对