Libra R-CNN理解

原文链接:https://blog.csdn.net/sinat_37145472/article/details/93903922
论文链接:Libra R-CNN: Towards Balanced Learning for Object Detection

总览

论文主要讲述了三个贡献:

  • IoU-balanced sampling—— reducing the imbalance at sample,让选择的样本更representative;
  • balanced feature pyramid—— reducing the imbalance at feature,更加有效地整合利用多尺度特征;
  • balanced L1 loss—— reducing the imbalance at objective,设计了一个更优的loss,引导整体训练更好的收敛;

在这里插入图片描述

1.IoU-balanced Sampling

在anchor-base的目标检测中,网络head输出大量的anchors(或者叫default boxes),这些box对于匹配到的ground truth有各自不同iou,而大部分iou都很小(负样本比例巨大),如果直接将所有正负样本送入loss的计算将会导致模型往背景的方向过拟合,因此前人做了很多解决正负样本不平衡的工作(例如在faster rcnn的RPN层中随机采样保证正负样本1:1;SSD中采用了难样本挖掘;OHEM等等),但是作者认为之前的方法多少还是有各自的缺点,比如OHEM对不干净的数据集不够鲁棒,focal loss不适合two-stage任务。

注意,难样本是训练中具有代表性的样本哦(类似于学生时代的错题回顾),那么如何在避免上述问题的情况下,让模型更关注于此呢?

作者的思路:既然选择box的方式是sampling,那么sampling的时候能不能找到一些规律呢。因此做了下面的统计:
在这里插入图片描述

上面统计了随机采样和难样本随iou的分布。

可以知道:超过60%的hard negative与gt超过0.05的iou;但随机采样只有30%超过0.05iou;说明困难样本并不根据iou均匀分布在原有样本中,也就是两者分布不match!既然说要让模型更关注于hard example,那怎么结合这样的规律来做点事情呢?

作者的思路:分层抽样替换随机抽样
在这里插入图片描述

K:将原有对负样本的采样区间分成K个区间(不一定要均匀);
N:总共采的负样本数;
M_k:每个区间sampling candidates数量;
p_k:最终算出每个区间采样的概率。

可以看出后两个变量反相关,candidates越少,越倾向于sample,这样做,表面上是有效提高了高iou区间的样本比例,但深层原因是给了一个先验的分布,将hard example与sample的分布match起来(注意这个分布也算是hyper-parameters,跟数据集有关的)。

2.Balanced Feature Pyramid

最近FPN、PANet、ZigZagNet,真是把特征融合变着花样玩,可以说特征融合是接下来的一个大趋势了。但是,上述这些方法都是top-bottom,bottom-top等方式,更多的是关注相邻分辨率,并且非相邻层所包含的语义信息在信息融合过程中会被稀释一次,所以作者认为这样的过程也是imbalance的。

思路:以FPN(faster-rcnn)为基础,对四个level的特征进行rescale,integrate和refine进一步融合特征信息,最后再和原特征相加,增强原特征。
在这里插入图片描述

关键的refine操作使用的是kaiming大神的non-local。
在这里插入图片描述
non-local借鉴传统图像去噪算法,整合了全局信息,计算量少,并且输入输出维度相同,可以整合进目前各种baseline中(事实上已经有很多在这么做了),这边由于篇幅原因就不展开叙述。

而Libra RCNN利用FPN与non-local各自优势很好的解决了imbalance问题。

3.Balanced L1 Loss

目标检测实质上是多任务学习(cls&reg),那么如何平衡两者的权重应该是一个值得探讨的话题。通常都是人为手动调整各任务之间的权重(比如对回归loss乘以系数),但是由于回归任务unbounded的特性,直接增大回归loss常导致对outliers更加敏感(类似于噪声)。这边把样本损失大于等于 1.0 的叫做 outliers,小于的叫做 inliers。这也不是胡乱猜测,经过统计,发现outliers贡献了70%以上的梯度,而大量的inliers只有30%的贡献。作者从损失函数的角度增大了inliers贡献的梯度,从而在分类、整体定位和准确定位方面实现更加平衡的训练。具体就是将原来的smooth L1 loss 的梯度替换为:
在这里插入图片描述

其中
在这里插入图片描述

γ可以调整梯度的上界,用以balance各任务所贡献的梯度。
梯度和损失函数如图:
在这里插入图片描述

可以看到随着α的减小,inliers的梯度能够很好地增强。

总结

三个方法都很干净,尤其是sampling和loss,即使没有改变网络结构仍然可以有效涨点。其实思路都是一样的,通过试验或统计看到潜在的imbalance现象,根据样本或loss或feature的分布来做一些事情,非常实用。

附飞桨课件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页