1.Introduction
目标检测经常转换为目标classification问题。这样做的后果就是导致标注的目标和背景的比例严重不均衡。
在使用滑动窗口时,背景与目标框的比例约为100000:1.虽然近年来的object-proposal-based
方法缓解了这一问题,但是这种不平衡依旧存在(如70:1,还是很是高)。通常的解决方法就是bootstraping
(也经常被称为难例挖掘方法)。
bootstrap方法是用当前训练集先训练出一个检测模型,然后使用该模型在训练集上进行检测,将检测错误的样本作为新的抚养本添加进负样本集中,再开始新一轮的训练。通过这种不断迭代的方式,不断提升检测模型的性能。在训练迭代开始时,使用所有的目标真值作为正样本,随机选取的背景框作为负样本。
Bootstraping技术被证明使用SVM时可以在整个数据集上收敛到最优。
Fast-RCNN和其相关的后继方法都没有使用Bootstrap技术。可能是由于使用SGD时固定模型来挖掘难例会速度很慢。
本文的贡献是提出了一种基于deenConv
的在线难例挖掘技术(OHEM)。该算法改进了SGD,样本采集时使用的方式是non-uniform,non-stationary
,依赖于每一个样本的的当前loss。
将OHEM应用于Fast-RCNN,与原有算法相比有3个优势:
1. 不用再使用很多在region-based ConvNet中使用的heuristics以及hyper-parameter
2. 在mAP性能上有很大的提升
3. 其有效性随着数据集的增大(难度和数量)而增大
2.Related work
Bootstraping技术在使用SVM做检测的方法中应用的很多。但是Fast-RCNN及其相关的方法并没有使用SVM,而是仅仅通过SGD的在线训练来实现检测。这使得当前的难例挖掘技术没有应用在这类方法上。
在这里简单的回顾介绍一下难例挖掘,ConvNet-based目标检测算法,以及深度学习与当前难例挖掘技术的关系。
Hard example mining
有2种难例挖掘技术,一种是用于优化SVM的。通过一个working-set,训练一个收敛于该working-set的SVM,然后使用该SVM,将一些easy的sample剔除(这些sample通常是远离SVM分类边界的),增加hard example到working-set中(这些hard-example是超出模型边界的错误分类样本)。注意,working-set只是整个训练集的一个子集。
另一种是用于优化non-SVM的。如被应用于浅层神经网络,boosted decision tree等,这种方法首先开始训练模型,训练的数据集开始是由所有的positive example和随机的negative samples组成的,训练出来一个模型后,将该模型应用于一个更大的数据集,将model检测错误的样本(false positives)添加到训练集中再继续训练。不断迭代训练。但是论文中提到这个过程通常只迭代一次,且没有收敛的迹象。
ConvNet-based object detection
介绍一下基于卷积神经网络和region-based目标检测方法
Hard example selection in deep learning
目前已经有用于深度学习网络的难例挖掘技术
3.Overview of Fast RCNN
介绍了一下Fast-RCNN的工作原理
选用Fast-RCNN作为本文算法的base-detector除了它是一种端对端的系统,还有以下3个原因:
1. Fast-RCNN中的conv和ROIpooling等结构在最近提出的很多网络中都有使用(如SPPNet,MR-CNN等),这样可以使本文提出的算法有更广泛的应用;
2. FRCNN允许整个卷积网络得到训练,但是MR-CNN,SPPNet网络则将卷积网络参数固定(没太懂)
3. SPPNet,MR-CNN都要求缓存ROI network输出的feature,而FRCNN则仅仅使用ROI network本身来讯分类器,试试证明unified system使用SVM是没有必要的
3.1 Training
FRCNN使用SGD方法训练。每个mini-batch,是从数据集中取N张图片,每张图片取B/N个ROI作为一个mini-batch(实际取B=128,N=2时效果较好)。
Foreground ROIs: 与标注目标框的IOU>0.5作为前景区域
Background ROIs: labeled as background(bg) :一个区域与GT的最大IOU在[bg_low,0.5)之间时,标记为bg。
这种生硬的使用bg_low固定值的方式在一些hard example中效果不是最优的,本文提出的方法不再使用bg_low这个参数。
Balancing fg-bg ROIs: 文献[14]提出一种将每个mini-batch中fg-bg比例rebalance到1:3的启发式方法:随机降采样背景样本,这样保证25%的mini-batch是fg-ROIs.这种策略是很重要的,如果不使用这种采样比例,增加或减少这种比例,都会使得mAP下降约3个百分点。
4.Our approach
我们会证明当前为SGD创建mini-batch的方法是次优的并且不是高效的。
4.1 Online hard example mining
交替训练:
- fixed model used to find new examples to add to the active trainings set
- fixed training set to train the new model
交替训练直到training set包含了所有的support vector。
传统的hard example mining无法使用在sgd中是因为在寻找新样本的时候无法进行训练模型,而深度网络需要的迭代次数较多,这样会导致训练很慢。
作者想到了一个新的方法:
在一个minibatch中和往常一样不升级模型,这时候选择样本(ROI),选择完再进行backwards,于是模型的更新次数和原来是一样的,只能是说想法比较简单,但是大家却没有向这方面想,这来源于作者扎实的基本功吧。
这样的方法,先讲RoI向前计算,挑选hard,然后反向传播,因为forward时RoI计算量的大部分是共享的,所以计算量不是很大,而且向后计算的时候计算量更小了(roi少了)。
但是,在向前计算的时候RoI可能会有较大的overlap,他们的loss 会相似,所以作者使用了NMS,threshold设置为0.7,比较松,每次都使用nms来选择样本。
这样做的另外一个好处就是不需要设定fg-bg的比例。
4.2 Implementation details
第一种实施方法:将easy example的loss设置为0,因此没有梯度传递,但是此时仍然需要占用内存和进行反向传播,这也是现有的框架的缺陷吧。
第二种实施方法:
ROI网络设置两个,一个只为read,只有forward占用内存,另外一个是标准的,
Rhard−sel
是指被选择的hard Roi,累计到其值等于batchsize B,反向传播,这样使用的内存差不多,但是收敛速度快了两倍。
5. Analyzing online hard example mining
FRCN with OHEM与baseline heuristic sampling方法比较;
FRCN with OHEM与一种不够高效的方法比较(使用所有available ROIs,而不是B hardest examples)
5.1 Experimental Setup
5.2 OHEM vs. heuristic
结果显示heuristic for hard example mining 得到的检测器性能是sub-optimal的。
5.3 Robust gradient estimates
N=2时,每个mini-batch使用的images太少,可能会导致训练收敛太慢以及梯度不稳定的问题。
实验了N=1,为了break本文提出的方法,发现mAP性能基本不会下降。这表明,有时候为了减少GPU内存压力,减少每个mini-batch中的图片数量不会导致性能下降,说明了OHEM算法对梯度估计得稳定性。
5.4 Why just hard examples, when you can use all?
B=2048,使用所有的RoIs,mAP性能仅仅提高了约1个百分点,但是本文的方法也提高了约1个点,且计算速度更快,因为使用更少的mini-batch size来做梯度计算。
5.5 Better optimization
作者比较了各种方法在不同迭代次数时所有的RoI的mAP
5.6 Computational Cost
作者比较了computational cost 比较起来内存和时间都有所升高。
6. PASCAL VOC and MS COCO results
在VOC2007和VOC2012, MS COCO数据集上都取得最好的mAP性能
在MS COCO数据集上的测试结果表明,OHEM对于小尺寸目标的检测有性能提高。
7. Adding bells and whistles
- Multi-scale: 设置一系列尺度(最短边长),训练和测试时随机选择一个
- Iterative bounding-box regression:
8.Conclusion
提出了一种用于 region-based ConvNet的难例挖掘训练方法。该方法可以使得训练过程收敛更加迅速并能提高检测性能。