测试 demo: https://github.com/Jack-CV/PCN
关键词: rotation-invariant face detection, rotation-in-plane, coarse-to-fine
核心概括: 该篇文章为中科院计算所智能信息处理重点实验室 VIPL 课题组, 邬书哲博士在 CVPR2018 上的论文. 论文主要针对的是在不同平面角度下的人脸检测, 主题思想可以概括为 Progressive Calibration Networks(PCN), 即逐步校正不同角度的人脸.
已有方法: 目前, 针对平面角度的人脸检测主要有 3 种策略, 即 data augmentation, divide-and-conquer, rotation router.
4. 改进: 作者为了快速地检测不同平面角下的人脸 (0°~360°), 通过逐级校正的路线, 针对第一级检测出来的人脸, 将为[-180°, 180°] 的人脸翻转到[-90°, 90°]. 这一步简单来说, 就是把朝下的人脸翻转为朝上, 这样就减少了一半的角度范围. 第二级再继续以两条 ±45° 的轴进行翻转, 将人脸的角度范围限制到[-45°, 45°]. 第三级, 使用角度偏差回归预测精准的角度. 校正流程如下:
5. 样本划分:
- Positive, IOU> 0.7
- Negative, IOU < 0.3
- Suspected, IOU [0.3, 0.7]
Positive 和 negative 用于人脸分类, positive 和 suspected 用于人脸框的回归和角度校正.
需要说明的是,
三级网络的训练样本输入分别为 24x24,24x24,48x48.
对于第一级网络, 人脸范围划分为 2 部分, 人脸朝上的角度范围是[65°,65°], 人脸朝下的范围是[-180°,-115°][115°,180°], 其他角度范围不作训练数据. 可以定义朝上的 label 为 0, 朝下的为 1.
对于第二级网络, 人脸范围划分为 3 部分, 分别为[-90°,-45°],[-45°,45°],[45°,90°], 可以定义 label 分别为 0,1,2.
对于第三级网络, 人脸范围为[-45°,45°], 与前两个网络不同, 训练的任务是人脸角度的回归.
6. 训练细节:
每个 batch 里的样本比例, positive: negative:suspected=2:2:1
- max_iters:100,000
- type:SGD
- lr_base:0.001
- gamma:0.1
- lr_policy:step
- step:70,000
- wd:0.0005
7. 网络结构:
8. 算法介绍:
8.1 PCN-1
对于每一个输入的滑窗, 第一级网络有 3 个目标: 人脸与非人脸的判断(f), 人脸框的回归(t), 角度的分类 score(g).
第一个目标 f, 使用 softmax-loss,y=1 if face else 0
第二个目标 t, 使用 l1 loss
人脸框的回归由 3 部分组成, w 代表宽度,(a,b)代表人脸框的左上角坐标
第三个目标 g, 和第一个类似使用 softmax-loss, y=1 if face is up else 0
最终的 loss 为,λ为各个 loss 的 weight
第一级的人脸角度划分, 根据预测的θ进行划分, 0° 表示人脸朝上, 不翻转; 180° 表示人脸朝下, 进行翻转.
8.2 PCN-2
第二级与第一级类似, 只是角度的校正范围发生了变化, 转变为[-90°,-45°],[-45°,45°],[45°,90°]
8.3 PCN-3
经过第二级的校正之后, 人脸的范围已经校正到竖直的一个区域. 通过直接对角度进行回归, 使用的 loss 变为 l1 loss.
最终的角度可以由 3 级网络检测的角度进行叠加得到.
9. 实验结果:
来源: https://www.cnblogs.com/danpe/p/8970758.html