SOLOv2: Dynamic and Fast Instance Segmentation 论文笔记

SOLOv2: Dynamic and Fast Instance Segmentation

论文链接: https://arxiv.org/abs/2003.10152

一、 Problem Statement

SOLO v1 有三个bottlenecks限制了其性能:

  1. inefficient mask representation and learning。
  2. not high enough resolution for finer mask prediction。
  3. slow mask NMS。

详细的SOLO v1 笔记可以查看这篇博客:https://blog.csdn.net/wuchaohuo724/article/details/119188353

二、 Direction

  1. 把mask learning 分成了两个部分:convolution kernel learning 和 feature learning。
  2. 构建一个unified 和 high-resolution的mask feature representation。
  3. 提出了matrix NMS。

最后达到的性能如图所示:
在这里插入图片描述

三、 Method

先来回顾以下SOLO v1,它有两个分支,一个是概率分支,一个是mask generation分支。我们来看一下mask generation 分支。一张图片会被分割成 S × S S \times S S×S个网格,每个网格代表一个实例。所以图像经过卷积等操作之后,最后会生成一个 S 2 S^2 S2通道数的feature map。作者认为,并不是所有网格中,都是存在目标实例的,而这个 S 2 S^2 S2计算量太大且冗余,因此在这方面进行了优化。提出的想法是:是否我们可以分别学习特征图 F F F和convolution kernel G G G,且最后的mask可以通过这两个来生成。

1. Dynamic Instance Segmentation

在这里插入图片描述

(1) convolution kernel learning

通过backbone和FPN之后,在每个FPN level上预测mask kernel G G G 首先会把输入的特征图 F I ∈ R H I × W I × C F_I \in \R^{H_I\times W_I \times C} FIRHI×WI×C 变成 F I ∈ R S × S × C F_I \in \R^{S\times S \times C} FIRS×S×C,然后通过4个卷积操作和一个 3 × 3 × D 3 \times 3 \times D 3×3×D的卷积,生成kernel G G G。需要添加spatial functionality 到 F I F_I FI中。Weights for the head are shared across different feature map levels。

对于每个grid,kernel branch的输出维度是D-dimensional,来表明预测的convolution kernel weights,D是卷积参数的数量。所以,为了生成1x1卷积(输入维度为E)的权重, D = E D=E D=E;如果为了生成3x3卷积, D = 9 E D=9E D=9E

(2) mask feature learning

有两个方式构建mask feature,一个是对每个FPN level预测mask features;一个是对所有FPN level预测一个统一的mask feature。通过对比,作者使用了后者。

使用feature pyramid fusion。通过多个 3x3 conv,group norm,ReLU和2x bilinear upsampling操作,FPN的P2到P5特征融合成一个1/4大小的输出。

在这里插入图片描述

在FPN Level最深处(在1/32大小那里),添加spatial functionality(在卷积操作和bilinear upsamplings操作之前),也就是使用coordconv 操作。

最后,通过element-wise summation,1x1卷积,group norm和ReLU生成最后的特征图 F F F

2. Matrix NMS

受到了soft-NMS的启发,作者提出了matrix-NMS。具体的soft-NMS分析,可以查看这篇博客

作者认为,对于一个 mask m j m_j mj它的衰减因子会被两个因素影响:

  1. 每一个预测在mask m j m_j mj 上的 mask m i m_i mi ( s i > s j ) (s_i \gt s_j) (si>sj)的惩罚(penalty), s i s_i si s j s_j sj是confidence scores。
  2. mask m i m_i mi被抑制的概率。

对于第一个来说,通过计算 f ( i o u i , j ) f(iou_{i,j}) f(ioui,j)来获得penalty。对于第二个来说, m i m_i mi被抑制的概率不是那么容易算得。但是,这个概率通常与IoUs是正相关的。因此,作者直接把这个概率近似成在 m i m_i mi上的重叠预测:
f ( i o u ⋅ , i ) = min ⁡ ∀ s k > s i f ( i o u k , i ) f(iou_{\cdot,i}) = \min_{\forall s_k \gt s_i} f(iou_{k,i}) f(iou,i)=sk>siminf(iouk,i)

所以最后的衰减因子就变成了:
d e c a y j = min ⁡ ∀ s i > s j f ( i o u i , j ) f ( i o u ⋅ , i ) decay_j = \min_{\forall s_i \gt s_j} \frac{f(iou_{i,j})}{f(iou_{\cdot,i})} decayj=si>sjminf(iou,i)f(ioui,j)

所以updated score就通过 s j = s j ⋅ d e c a y j s_j = s_j \cdot decay_j sj=sjdecayj计算。 f ( i o u i , j ) = 1 − i o u i , j f(iou_{i,j}) = 1- iou_{i,j} f(ioui,j)=1ioui,j 或者 G a u s s i a n f ( i o u i , j ) = e x p ( − i o u i , j 2 σ ) Gaussian f(iou_{i,j}) = exp(-\frac{iou^2_{i,j}}{\sigma}) Gaussianf(ioui,j)=exp(σioui,j2)

下面是matrix-NMS的伪代码:
在这里插入图片描述

3. Loss function

整体的Loss function:
L = L c a t e + λ L m a s k L= L_{cate} + \lambda L_{mask} L=Lcate+λLmask

其中 L c a t e L_{cate} Lcate是Focal Loss, L m a s k L_{mask} Lmask是Dice Loss。

四、 Conclusion

提升了SOLO v1的性能,提出了matrix-NMS。学习kernel权重的想法与Dynamic Filter Networks 想法相似。

五、 Reference

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值