R-CNN
存在以下几个问题:
region proposals
要通过selective search
算法获取,还有针对每一个类别都训练一个SVM
分类器,最后还要用regressor
对bounding box
进行回归SVM
分类器和bounding box
回归器时需要用网络提取的特征作为输入,特征保存在磁盘上再读入的时间消耗是比较大的region proposals
都要卷积,重复操作太多Fast RCNN步骤如下:
selective search
算法提取region proposals
候选区域feature maps
region proposals
候选区域映射到feature maps
上,得到RoI projection
ROI Pooling Layer
将RoI projection
变成固定大小的特征图FC
层得到固定长度的特征向量输入到softmax
和bbox regressor
中。利用softmax loss
分类损失和smoothL1 loss
回归损失进行联合训练RoI池化层使用最大池化将任何有效区域内的特征转化成一个小的带有固定空间范围HxW(比如下图2x2)的特征图
与RCNN不同,Fast RCNN使用softmax作为分类器,其真实类别为 u u u的损失定义如下
L c l s ( p , u ) = − l o g p u L_{cls}(p,u)=-logp_u Lcls(p,u)=−logpu
其中 p u p_u pu代表预测为类别 u u u的概率
类别 u u u的真实边界框定义为: v = ( v x , v y , v w , v h ) v=(v_x, v_y, v_w, v_h) v=(vx,vy,vw,vh);类别 u u u的预测边界框定义为: t u = ( t x u , t y u , t w u , t h u ) t^u=(t_x^u, t_y^u, t_w^u,t_h^u) tu=(txu,tyu,twu,thu)。对于回归损失定义如下:
L l o c ( t u , v ) = ∑ i ∈ { x , u , w , h } s m o o t h L 1 ( t i u − v i ) L_{loc}(t^u, v)=\sum_{i \in \{x,u,w,h\}}smooth_{L1}(t_i^u-v_i) Lloc(tu,v)=i∈{x,u,w,h}∑smoothL1(tiu−vi)
其中:
s m o o t h L 1 ( x ) = { 0.5 x 2 i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e smooth_{L1}(x) = \begin{cases} 0.5 x^2 & if \quad |x| < 1 \\ |x|-0.5 & otherwise \end{cases} smoothL1(x)={0.5x2∣x∣−0.5if∣x∣<1otherwise
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p,u, t^u, v)=L_{cls}(p, u) + \lambda[u \geq 1]L_{loc}(t^u, v) L(p,u,tu,v)=Lcls(p,u)+λ[u≥1]Lloc(tu,v)
其中中括号项代表这样一个函数:当 u ≥ 1 u ≥ 1 u≥1时,返回1,否则返回0。根据约定代表全部剩余一切的背景类标注成 u = 0 u=0 u=0。所以对于背景而言,没有标注框信息,因而 L l o c L_{loc} Lloc就忽略了。
论文中还有采用SVD分解改进全连接层,Mini-Batch 采样和RoI 反向传播,在此只介绍较为重要的部分。
参考资料: