我的Mask RCNN阅读笔记

Mask R-CNN

 Mask R-CNN在Faster R-CNN的bbox识别分支基础上,加入了预测Mask的分支,两分支是平行的,解决的是图像语义分割的任务。其创新点具体而言:

  • 1 Mask分支的加入:Mask R-CNN在Faster R-CNN基础上加入的预测分割Mask的分支,用于对每一个RoI进行分割Mask的预测。这个mask分支实际上是一个小型的FCN在RoI上进行预测,使得的达到像素级别的分割效果。有了Faster R-CNN,Mask R-CNN会十分简单地就可以实现,而且只会添加很小的计算成本。如何构建mask分支会很大程度上影响预测结果。

  • 2 RoIAlign改善空间对齐问题:Faster R-CNN并没有设计网络的输入像素到输出像素的对齐,这一点可以从RoIPool在空间上的特征提取的粗糙性可以看出。为了解决这一对齐问题,Mask R-CNN提出了一种简单、免量化的网络层,称为RoIAlign(虽然变化不大但却成效显著)。

  • 3 每个类别单独预测Mask:每个类别都单独进行Mask预测学习,使每个类的输出为目标和背景的二值Mask,而分类任务让分类分支进行类别预测,而不是进行多个类别和分类任务同时预测(实验说明这样效果糟糕)

回顾:

Faster-RCNN包含两个阶段:

  • 1 Region Proposal Network(RPN),提供候选的目标BBox;
  • 2 RoIPool处理每一个候选区,提取特征,分类和BBox回归。
    上面所述这两个阶段使用了相同的特征图,以达到加速处理速度的目的。

方法

损失函数

 和Faster R-CNN相同,分两阶段:

  • 1 Region Proposal Network(RPN),提供候选的目标BBox;
  • 2 RoIPool处理每一个候选区,提取特征,有两个并行分支进行分类和BBox回归;加入第三个并行分支,每一个RoI输出一个二值化的mask。(在效果上比同期将分类任务依赖于mask要好)。

这样的多任务下,对于每一个处理的RoI的损失函数为: L = L c l s + L b o x + L m a s k L=L_{cls}+L_{box}+L_{mask} L=Lcls+Lbox+Lmask
其中

  • 1 L = L c l s L=L_{cls} L=Lcls分类任务损失(u为真实类别,p为softmanx输出):
    L c l s ( p , u ) = − log ⁡ p u L_{cls}(p,u)=-\log{p_u} Lcls(p,u)=logpu

  • 2 L b o x L_{box} LboxBBox回归损失:
    L B o x ( t u , v ) = ∑ i ∈ { x , y , w , h } smooth ⁡ L 1 ( t i u − v i ) , L_{\mathrm{Box}}\left(t^{u}, v\right)=\sum_{i \in\{\mathbf{x}, \mathbf{y}, \mathbf{w}, \mathbf{h}\}} \operatorname{smooth}_{L_{1}}\left(t_{i}^{u}-v_{i}\right) , LBox(tu,v)=i{ x,y,w,h}smoothL1(tiuvi)
    其中
     smooth  L 1 ( x ) = { 0.5 x 2  if  ∣ x ∣ < 1 ∣ x ∣ − 0.5  otherwise  \text { smooth }_{L_{1}}(x)=\left\{ \begin{array}{ll} 0.5 x^{2} & \text { if }|x|<1 \\ |x|-0.5 & \text { otherwise } \end{array}\right.  smooth L1(x)={ 0.5x2x0.5 if x<1 otherwise 

  • 3 mask预测分支输出为 K × m 2 K\times m^2 K×m2维,其中 K K K为类别个数,每一个类别mask预测输出图片分辨率为 m × m m \times m m×m,mask上每个像素都使用 s i g m o i d sigmoid sigmoid函数处理,并定义 L m a s k L_{mask} Lmask为平均二值交叉熵损失。对于第i个mask的损失函数 L o s s m a s k i Loss_{mask^i} Lossmaski(设mask每个像素的真实标注为 y i ∈ ( 0 , 1 ) y_i\in (0,1) yi(0,1))可以表示为: L o s s m a s k i = − 1 m × m ∑ j = 1 m × m y j ⋅ log ⁡ ( p ( y j ) ) + ( 1 − y j ) ⋅ log ⁡ ( 1 − p ( y j ) ) Loss_{mask^i}=-\frac{1}{m\times m} \sum_{j=1}^{m\times m} y_{j} \cdot \log \left(p\left(y_{j}\right)\right)+\left(1-y_{j}\right) \cdot \log \left(1-p\left(y_{j}\right)\right) Lossmaski=m×m1j=1m×myjlog(p(yj))+(1yj)log(1p(yj))
    对于某个RoI已知真实类别 k k k L m a s k L_{mask} Lmask定义只在第 k k k类别上,换言之,其他非真实类别的mask输出并不会参与到到 L m a s k L_{mask} Lmask上。这也就意味着将会依赖于分类器的输出来确定将要使用的mask,从而计算 L o s s m a s k i Loss_{mask^i} Lossmaski,而且每一个mask之间的预测都是独立的,这要有利于输出更好的结果(其他使用混合交叉熵的就没有那么好的效果)。

Mask表示

 由于mask的输出不像是类别和BBox预测那样,最后需要坍缩到一个短向量形式,所以自然地就采用卷积的形式保留空间信息,其中mask预测分支使用的是FCN(Fully Convolutional Network)的模型,对于每一个RoI都进行处理,但是由于RoI都是从原图上进行的采样的小图形式,所以为了对齐,加入了RoIAlign的网络层来让Mask对齐到原图上。

RoIAlign层

 RoIAlign是为了解决由RoIPool中量化取整的操作带来的位置对齐偏差问题,所以为了更好第解释RoIAlign的原理,把RoIPool和RoIAlign同时进行说明。
无论是RoIAlign和RoIPool的作用都是为了让RoI图片映射为特定大小的feature map。

RoIPool

1
上图中,步骤:

  • 1 输入图像800*800,通过VGG16卷积层网络(feat_stride=32)后,输出800/32=25,25*25的feature map。
  • 2 假设原图中有一个region proposal大小后为665*665,经过VGG16后,映射到feature map上大小为655/32=20.78,即20.78*20.78大小,此时计算中取整,也就是在feature map上该region proposal的映射大小变为20*20(这一过程为量化取整)。
  • 3 进行pooling操作,设经过RoIPool以后输出的feature map大小为7*7,那么可以求得pooling的核大小为20/7=2.86,此时在计算中取整,那么可以得到pooling核大小为2*2(这一过程为量化取整)。RoIPool中使用了MaxPooling(kernel size=2*2,stride=2),即在每2*2(no overlapping)的区域内选取最大值像素作为输出。
  • 4 最后得到多个7*7大小的feature map,输出到后续网络中。

RoIAlign

2

  • 1 输入图像800*800,通过VGG16卷积层网络(feat_stride=32)后,输出800/32=25,25*25的feature map。
  • 2 假设原图中有一个region proposal大小为665*665,经过VGG16后,映射到feature map上大小为655/32=20.78,即20.78*20.78大小,也就是在feature map上该region proposal的映射后大小变为20.78*20.78,注意此时RoIAlign没有进行取整操作。
  • 3 设经过RoIAlign以后输出的feature map大小为7*7,也就是将map分为了49个bin,那么可以求得bin的核大小为20.78/7=2.97,此时在计算中取整,那么可以得到bin大小为2.97*2.97(同样在量化过程中不进行取整操作)。
  • 4 设采样点数为4,即对于每一个bin大小2.97*2.97,平分四份,每一份取其中心点位置,而中心点位置的像素,采用双线性插值法进行计算像素值,最后得到四个点的像素值。在得到这四个像素值基础上选取最大值作为该bin输出。
  • 5 最后得到多个7*7大小的feature map,输出到后续网络中。

可以看出,RoIAlign其实是在RoIPool上,完全去掉了量化取整的操作,从而避免了由于这个操作所造成的的空间精度下降问题。

如有理解错误,请多多包涵

猜你喜欢

转载自blog.csdn.net/Johnson_star/article/details/105321437
今日推荐