RON
论文信息
Tao Kong, Fuchun Sun, Anbang Yao, Huaping Liu, Ming Lu, Yurong Chen. RON: Reverse Connection with Objectness Prior Networks for Object Detection. CVPR 2017.
https://arxiv.org/abs/1707.01691
前言
本文的突出贡献是设计了一种reverse结构, 设法(反卷积)将深层信息加入浅层feature map中.
Introduction
作者羡慕two stage方法可以reject most samples, 也就是说本文会采用类似的方法实现其目的. 提一点是训练和推理时间大多花在分类网中.
SSD使用低分辨率图像取得了state-of-the-art的成绩, 但作者认为还有以下几点缺陷:
- 没有proposal阶段, 也就是说detector必须处理大量的negative examples.
- 小物检测性能较差, 一个重要原因是浅层的信息量有限.
本文主要面对两个问题:
- multi-scale localization. 同一个物体在不同的scale的feature map中位置各不相同.
- negative sample mining.
Network Architecture
Network preparation
使用VGG-16作为backbone, 使用ImageNet预训练, 通过使用\(2 \times 2\)的卷积核并设这stride为2缩小尺寸, 这样就获得了一系列原尺寸1/8, 1/16, 1/32, 1/64的feature map.
Reverse Connection
将深层和浅层信息结合毫无疑问会提升feature map的表现力, 作者从残差网络中获得启发, 设计了如下结构的reverse connection block:
其中此block生成的map这里称作rf-map, 我们可以看见, 首先对深层(第n+1层)的rf-map反卷积, 其后对前一层卷积后各元素相加, 得到上一层(第n层)的rf-map.
将此block应用到网络中最终结构如图所示:
这样就得到了具有各个scale的各融合map.
这种方法除了multi-scale的优势之外, 还因为具有多层次语义信息因为获得较好的结果.
Reference Boxes
因为不同语义层次和scale的feature map中的感受野各不相同, 而本文产生的rf-map语义层次和scale各不相同, 本文设计bbox用来使每个feature map location可以对各个object有响应. 假设最小的scale为\(s_{min}\), 每个feature map中的bbox的scale是:
同时使用不同的aspect ratio: \({1/3, 1/2, 1, 2, 3}\), 那么每个feature map都有2个scale, 5个aspect ratio的共计10(请一定记号这个数字)个bbox, 同时本文中\(s_{min} = 0.1\).
Objectness Prior
很遗憾, 光是这样操作只有一小部分的bbox包含object, 也就是说class imbalance问题很严重.
本文与R-CNN等生成proposal并进行二分类的方法相反, 本文加一个objectness prior模块来进行类似二分类的行为, 此过程不会生成proposal. 具体方法是先加入一个\(3 \times 3 \times 2\)的卷积层, 其后跟softmax来判断每个box是否含有object, 输出通道是10, 代表每个location有10个bbox.
我们可以看到进行了不同物体相应不尽相同, 其后进行类似mask的操作, 选择已有的proposal.
Detection and Bounding Box Regression
detection module会预测K+1个class, 本文在预测前加入inception, 目的我认为是减少维度, 两个inception之后跟卷积层预测, 具体如下图:
至于bbox regression也照旧没什么特别值得提的.
Combining Objectness Prior with Detection
对于训练网络, 首先对bbox指定有无object的label(objectness label), 其后对于有object的bbox再指定具体的class label.
对于每个bbox, 在确定有无object时:
- 有最高IOU的.
- 有IOU超过0.5的.
都认为有object, 这样就保证每个GT至少有一个bbox对应.
另外对于IOU小于0.3的bbox视其为negative.
到现在为止, 每个bbox都有了其objectness label和class-specific label, 接下来就是见证奇迹的时刻, 接下来将对class-specific label利用上文提到的objectness prior动态更新.
-
在前向传播过程中, 网络同时运行objectness prior和detection.
-
在反向传播过程中, 网络首先运行objectness prior, 其后选择为objectness score大于阈值的样本进行detection.
这样, 就只有反向传播选择样本时会增加额外的计算(这里我保留了作者原来的说法, 但我个人认为与其说是增加计算不如说是时间, 作者可能想表达的意思是正向传播因为同时计算, 即使不加objectness prior也不会影响时间, 但反响传播不是同时计算, 因此也就多出这里所说的选择样本的时间). 值得一提的是, 只要将阈值设置的很小就能达到很好的reduce的效果.
Training and Testing
Loss Function
首先有输出的objectness score - \(p^{obj} = {p_0^{obj}, p_1^{obj}}\), 是根据objectness prior的\(2 \times A\)输出softmax得来, 其中A = 10, 因为每个位置有10个bbox.
除此之外还有bbox regression损失\(L_{loc}\), 本文会先不利用class-specific信息, 直接regress location, 这和此前大多数对每个class单独regress的模型都不同.
最后是classification loss, 我们要注意在进行classification之前都是把非object的bbox去掉, 这样score就变成条件概率了, loss也是条件概率的loss - \(L_{cls | obj}\).
那么最终loss形式我们就得到了:
\(\alpha, \beta\)是调节权重的超参, 本文设置为1/3使权重相同.
Joint Training and Testing
每个batch都是均匀地从样本集取出, 每个batch:
- negative example随机抽取, 且保证negative: positive = 3: 1.
- detection阶段首先借助objectness prior选出positive examples, 同样再对negative随机抽取限制negative: positive = 3: 1.
实验发现训练初始objectness prior一片混乱, 其后逐渐能正常工作.
Data augmentation
- 使用原图像和翻转后的图像.
- 随机从图像中截取部分patch, 并且保证object的中心落入至少一个patch中.
但还是观察到检测小物体表现较差, 为了解决此问题就加入一个small scale(但我觉得这并没有什么用).
Inference
利用条件概率公式简化计算最终score:
当然为了生成bbox, 也肯定要使用bbox regressor的输出, 最后使用NMS缩减重叠bbox.
Results
我已经至少三四篇文章没有认真分析实验了, 这一篇还是太懒, 直接贴结果, 也挺直观的, LOL~
Ablation Analysis
Do Multiple Layers Help?
这还用说?
Objectness Prior
其实最想在这里给大家引入卷积层的实际意义: 对特定形状的物体激活, 因此浅层便是轮廓等低层次信息, 当卷积层数加深, 激活内容越来越复合, 那么它的语义层次也就越来越深.
从实验来看使不同的scale激活的内容不尽相同, 这样能大大缩减negative example.
Generating Region Proposals
新方法基本就是血虐Faster R-CNN, 一句话概括就是少量proposal就能实现原先很多proposal的性能.
Conclusion
突出贡献是多层次语义的尝试, 可以看成一种残差, 不能说独创但是有一定新意, 另外一点贡献是构建卷积网络, 并行选择proposal以提升速度.