论文提出了简单高效的PSS分支,仅需在原网络的基础上添加两个卷积层就能去掉NMS后处理,还能提升模型的准确率,而stop-grad的训练方法也挺有意思的,值得一看 来源:晓飞的算法工程笔记 公众号
论文: Object Detection Made Simpler by Eliminating Heuristic NMS
当前主流的目标检测算法训练时大都一个GT对应多个正样本,使得推理时也会多个输出对应一个目标,不得不对结果进行NMS过滤。而论文的目标是设计一个简单的高性能全卷积网络,在不使用NMS情况下,能够进行完全的端到端训练。论文提出的方法十分简单,核心在于添加一个正样本选择分支(positive sample selector, PSS)。
论文的主要贡献如下:
FCOS$_{PSS}$的整体结构如图1所示,仅在FCOS的基础上添加了包含两个卷积层的SPP分支。
完整的训练损失函数为:
$\mathcal{L}_{fcos}$为原版FCOS的损失项,包含分类损失、回归损失和center-ness损失。此外,还有PSS分支损失和ranking损失。在训练时$\lambda_2$设置为0.25,因为ranking损失对准确率只有些许提升。
用上面的分数计算focal loss,与原本的FCOS分类的区别是,这里每个GT有且仅有一个正样本。
$\gamma$代表正负样本间的距离,默认设置为0.5。$n{+}$和$n{-}$为正负样本数量,$\hat{P}{i{+}}(c{i{+}})$为正样本$i{+}$对应类别$c{i{+}}$的分类分数,$\hat{P}{i{-}}(c{i{-}})$为负样本$i{-}$对应类别$c{i{-}}$的分类分数。在实验中,取top 100负样本分数进行计算。
一个GT选择多个anchor作为正样本进行训练是当前目标检测广泛采用的一种做法,这样的做法能够极大地简化标注要求,同时也能够兼容数据增强。即使标注位置有些许偏差,也不会改变选择的正样本。另外,多个正样本能够提供更丰富的特征,帮助训练更强大的分类器,比如尺寸不变性、平移不变性。因此,对于原生的FCOS分支的训练依然采用一对多的方式。
一对一的训练方式需要每次为GT选择最佳正样本,选择的时候需要考虑分类匹配程度和定位匹配程度,这里,先定义一个匹配分数$Q_{i,j}$:
$i$为预测框编号,$j$为GT编号,超参数$\alpha$用来调整分类和定位间的比值。$\Omegaj$表示GT $j$的候选正样本,采用FCOS的规则,在GT的中心区域的点对应的anchor均为候选正样本。最后,对所有的GT及其正样本采用二分图匹配,通过匈牙利算法选择最大化$\sum{j}Q_{i,j}$的匹配方案。
在论文提出的方案中,损失项$\mathcal{L}{fcos}$采用一对多的匹配方案,而损失项$\mathcal{L}{pss}$采用一对一的匹配方案,这意味着有部分anchor可能会被同时划分为正样本和负样本,导致模型难以收敛。为此,论文提出了stop-grad的概念,即阻止PSS分支的梯度回传到FCOS中。
stop-gradient操作在训练的时候将其中一部分网络设置为常数,定义$\theta={\theta{fcos},\theta{pss}}$为网络需要优化的参数,训练的目标是求解:
将上述求解分成两个步骤:
即在一轮迭代中,交替优化参数$\theta{fcos}$和$\theta{pss}$。比如在求解公式5时,$\theta{pss}$的梯度置为零,按作者的说法,这块直接用pytorch的detach()进行分离。另外一种方法是直接分开训练,当求解公式5时,设置$\theta{pss}=0$直到收敛,等同于原本的FCOS训练。而在训练PSS分支时,冻结FCOS参数直到收敛。论文通过实验发现分开训练可以极大地缩短训练时间,但性能稍差些。
从论文的实验来看,PSS分支+stop grad的效果还是不错的。论文还有很大对比实验,有兴趣的可以去看看。
论文提出了简单高效的PSS分支,仅需在原网络的基础上添加包含两个卷积层就能去掉NMS后处理,还能提升模型的准确率,而stop-grad的训练方法也挺有意思的,值得一看。
如果本文对你有帮助,麻烦点个赞或在看呗~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。