摘要
Faster R-CNN是object detection的里程碑之作。它提出了RPN,即一种用CNN来提取proposal的网络。
为了更好地理解RPN的代码实现细节,充分理解它用到的SmoothL1Loss是很必要的。
本文简述了RPN的作用,讨论了RPN的loss以及SmoothL1Loss的语义及其作用,最后分析了RPN的代码实现。
RPN的原理
RPN简介
RPN是一个输入global feature map,输出许多可能RoI的网络。
RoI就是所谓的感兴趣区域,相当于是物体bbox的candidate。RPN输出的RoI也被称为proposal。
RPN的anchor
RPN的基本原理就是利用有一定stride(比如16像素)的滑动窗口在原图上枚举proposal中心,对每个中心产生多个不同长宽比(例如0.5,1,2三种),不同大小(比如大中小三种)的bbox。这些产生的bbox被叫做anchor。
如果对每个中心有三种长宽比、三种大小,我们就能得到9个anchor。
RPN的minibatch
下文中你会见到minibatch这种说法。
minibatch就是RPN每次输出的proposal的数量。
如果RPN对每一张图片输出了256个proposal,那么我们就说minibatch=256。
RPN的loss及其分析
RPN的loss如下。
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\{p_i\},\{t_i\}) = {1\over N_{cls}}\sum_i{L_{cls} (p_i,p_i^*)} + \lambda{1\over N_{reg}}\sum_i{p_i^*L_{reg}(t_i,t_i^*)} L({
pi},{
ti})=Ncls1i∑Lcls(pi,pi∗)+λNreg1i∑pi∗Lreg(ti,ti∗)
-
loss的结构。
这个loss是一种multi-task loss。所谓多任务loss。
这里,它是cls(proposal的分类)和reg(proposal的bbox的位置回归、微调)两个任务各自的loss之加权和。
之所以说是加权和,主要表现在reg项乘了一个 λ \lambda λ,它一个灵活的超参数,需要人为设定。原文提到 λ = 10 \lambda=10 λ=10。 -
loss的符号。
i i i 是一个minibatch中所有anchor的索引。
p i p_i pi是对anchor i i i的预测结果。 p i ∗ p_i^* pi∗是anchor i