To Be Continued..........................
本系列文章目的是分享并记录自己在目标检测领域的个人理解, 内容包括论文翻译和个人分析。纯粹是为了个人学习,不具有参考意义
既然是为了入坑目标检测,那么faster-rcnn系列则是绕不过去的一个点。下面这段话是fasterrcnn论文中对检测任务本质的探讨。
The R-CNN method [5] trains CNNs end-to-end to classify the proposal regions into object categories or background. R-CNN mainly plays as a classifier, and it does not predict object bounds (except for refining by bounding box regression). Its accuracy depends on the performance of the region proposal module (see comparisons in [20]).
RCNN系列主要是训练一个端到端CNN网络对候选区域进行分类(背景或目标类型)。他其实可以看做一个分类器,因为他并没有去预测目标边界。检测精度取决于区域候选模块的表现。作者提出了一个叫做fasterrcnn的检测器,它包括两个模块,一个是用来提出候选区域的深度全卷积网络,另一个是使用提供的候选区域的fast-RCNN检测器。这个RPN其实就类似于attention一样,告诉网络应该朝哪看,哪里可能有object。
RPN输入是任意尺寸的图片,而输出则是一堆矩形框并带有object score.为了和detector部分共享计算,作者使用卷积网络去实现这个模块。为了产生候选区域,作者在feature map 上弄了一个滑动窗口, 每一个窗口映射到低维feature,这个feature然后fed到a box-regression layer (reg) and a box-classification layer (cls).
上面这张图特别清晰的展示什么是anchors,在每个窗口的位置,同时预测多个候选区域k,回归层有4k输出(坐标),分类层有2k个probability scores. anchor位于窗口中心,与scale, aspect ratio有关。anchor另外一个重要的性质就是平移不变性,当图片发生旋转的时候,网络依然还能够预测位置。
Multi-Scale Anchors as Regression References
多尺度预测有两种方法,一个是(a)中将图片resize,比较常用但是特别费时。第二个(b)就是利用窗口的scale, aspect ratio。
Libra-RCNN解决的三个问题
Sample level imbalance
第一个是采样问题,这个是目标检测的老大难问题,当训练一个目标检测器时,那些难例对提升检测性能是很有价值的,但是真实的样本easy sample是占绝大多数并且主导着最终的性能。过去几年,有不少的方法尝试去解决这个问题,比较著名的是OHEM,但是OHEM容易受到noise labels的影响还增加了计算负担。Focal loss比较好的减轻了这个问题,但是只是在一阶段检测器效果比较好,当扩展到RCNN系列时,却并没有多少提升。因此,这个问题需要更加优雅的被解决!
Feature level imbalance
第二个是高维feature和low level feature 如何进行融合的问题,之前比较常用的有FPN,PANet.作者认为通过上述方法融合后的feature 更容易关注临近的像素而不是其他的level。所以不相邻level的语义信息就被稀释掉了。
Objective level imbalance
最后一个问题是回归和分类之间的平衡问题,这两个任务在训练时候是放在一起的,如果没用被很好的平衡的话,最终的结果可能是sub-optimal.
针对上面提到的三个问题,作者分别提出了对应的解决策略。第一个是hard examples的IOU数值分布
We find that more than 60% hard negatives have an overlap greater than 0.05, but random sampling only provides us 30% training samples that are greater than the same threshold. This extreme sample imbalance buries many hard samples into thousands of easy samples.
作者发现了如果是随机采样的话,随机采样到的样本超过70%都是在IoU在0到0.05之间的,有人会问不是随机吗?为什么大部分样本都落在了IOU较小的部分了呢?因为样本的分布在IoU上并不是均匀分布的,生成候选框时随机采样会造成背景框远远大于框中GT的框,一张图这么大,是目标物体的区域只占很小一部分,背景占了绝大多数的位置,所以大部分样本都挤在了IoU在0到0.05的区间了,作者觉得这里就是不科学的地方,统计得到的事实是60%的hard negative都落在IoU大于0.05的地方,但是随机采样只提供了30%。所以作者提出了IoU-balanced Sampling,
随机采样就是比如你要选N个hard negative,有M个候选框,选中的概率就是:
如果一共还是要采样N个,通过IoU的值划分为K个区间,每个区间中的候选采样数为
,则
IoU-balanced sampling的采样公式即为:
作者通过在IoU上均匀采样, 把hard negative在IoU上均匀分布,在COCO数据集上达到的效果比
OHEM的要好,并且这样简单很多。
如图所示,如何利用不同分辨率的特征,分为了四步:rescaling,integrating,refining,strengthening。
rescaling & integrating :
假设
表示第
层特征,越高层分辨率越低,若有
的多层特征,
分辨率最高,我们知道低层特征分辨率高往往学习到的是细节特征,高层特征分辨率低学习到语义特征,把四层特征resize到中间层次的
的size,然后后面再做简单的相加取平均操作:
就是这样简单的操作并没有引入什么计算就可以实现,最终在AP上也得到了验证是有效的。
refining & strengthening:
rescaling后取平均提取到的的特征还可以进一步地refine成更discriminative,作者这里用到了non-local模块,paper中使用了
Gaussian non-local attention [4]增强integrate后的特征。
就像
Figure 4画的一样,这样提取的特征其实与FPN可以一同使用,是作为feature pyramid的补充,作为一种增强手段。
我感觉整个过程其实跟FPN没太大的修改,只是把特征resize成了中间层,然后再反过来resize回去,感觉主要是non-local的作用大一点。
Fast R-CNN [5]中是通过multi-task loss解决Classification(分类)和Localization(定位)的问题的,定义如下:
和
分别对应着分类和定位的损失函数,
,
分别是
的预测和目标,
是对应
类的回归结果。
是回归目标。
用于在多任务学习下调整损失权重。
之所以会提出Balanced L1 loss,是因为这个损失函数是两个loss的相加,如果分类做得很好地话一样会得到很高的分数,而导致忽略了回归的重要性,一个自然的想法就是调整
的值。我们把样本损失大于等于1.0的叫做outliers,小于的叫做inliers。由于回归目标是没有边界限制的,直接增加回归损失的权重将会使模型对outliers更加敏感。对于outliers会被看作是困难样本(hard example),这些困难样本会产生巨大的梯度不利于训练得过程,而inliers被看做是简单样本(easy example)只会产生相比outliers大概0.3倍的梯度。
首先我们看Smooth L1 Loss:
所以作者从常见的Smooth L1 Loss中推导出了Balanced L1 Loss:
它的梯度计算遵从下面的准则:
作者从需求出发,想要得到一个梯度当样本在
附近产生稍微大点的梯度,作者设计了下面这个函数,从
Figure 5可以看出
大于x。
根据梯度反求出
表达式:
还有很重要的一点就是为了函数的连续性,需要满足x=1时
即
其实意思就是
.