CVPR19, 关注目标检测训练过程的优化, 而不是网络框架的改进。我觉得这是一个方向……
作者认为, 现在的检测训练中有三处不平衡:采样不平衡、 特征不平衡和目标函数不平衡:
1. 采样不平衡:存在的问题和前面讲的focal loss文章解决的问题一样: easy negtive example太多, 在梯度计算中占主导位置, hard negtive example得不到良好训练。
解决方法: 这种不平衡是由于随机采样造成的, 作者相对于随机采样, 提出一种新的采样方法:
N是我们要采集的negtive samples数量, K是我们把对应的候选集均匀分为K份, Mk则是每份对应数目。
2. 特征不平衡: 这部分其实是对FPN的特征金字塔做改进。作者认为FPN的金子塔生成过程有一个问题:融合的特征更多地关注相邻分辨率的特征, 但是理想的情况应该是关注所有分辨率的特征。
解决方法:
这个结构的指导思想就是想让每个分辨率获得相同的其他分辨率的信息。 左半边是FPN的经典结构, 然后我们把每一层特征resize到一个固定的分辨率, 比如C4的尺寸。 然后求平均,这就是Integrate获得的特征, 注意,这是不包含任何训练参数的过程。然后经过一个refine, 分别加到各自原来的特征上。
3. 目标函数不平衡:
典型的检测问题多任务目标函数:
前人的工作几乎都是调整, 一般是增大它, 但是这样会使得定位函数对outliers很敏感。 我们注意到, outliers的loss很大, 会一定程度淹没简单样本的loss。
解决方法: 在定位误差较小(easy example)时, 适当提升其梯度, 达到如下图的效果:
虚线时传统的Smooth L1 loss。 在[0,1]区间内, 我们让梯度提升, 大于1时, 保持不变, 遏制outliers的淹没效应。
具体loss设计:
这里x可以看作regression error。上式是我们设计的梯度。求不定积分得到loss function:
a, b 和满足如下关系(其实是x = 1时梯度公式的边界条件):
小结: 提出的特征不平衡改进方法可以试试; 在loss上考虑样本平衡问题的突破也是一个可以尝试的点。