Conditional Convolutions for Instance Segmentation
论文链接: https://arxiv.org/abs/2003.05664
一、 Problem Statement
目前主流的实例分割算法是Mask-RCNN,依赖于ROI(ROI Pool或者ROI Align)获取最后的masks。然而,ROI-based的方法有以下缺点:
- ROIs 通常都是 axis-aligned的包围框,对于不规则形状的目标,它们可能包含大量不相关的图像内容,如背景或者其他的实例。这个可能可以用rotated ROIs减缓,但是会有更复杂的pipeline。
- mask head 通常需要相对大的感知域去获取更好地获取语义信息。因此3x3 convolutions 会堆叠在mask head,导致计算量增大。
- ROIs 通常是大小不一的。为了能够有效地进行batched computation,会需要一个resizing的操作,使得cropped regions 变为14x14的大小,限制了实例分割输出的分辨率。如果是大的实例,需要的是更好的分辨率来保留边界的细节。
而对于FCN-based的方法,性能大多数比不上ROI-based的方法。主要是因为:相似的外观可能需要不同的预测,而FCNs很难达到。举个例子,A和B在输入图像上有着相似的外观,当预测A的时候,FCN需要把B当作背景,但是由于它们有相似的外观,这是很难的。因此,ROI 操作就会把感兴趣的区域进行裁剪,也就是裁剪A,过滤B。
所以实例分割需要两种类型的信息:
- appearance
- location
怎么通过FCNs获得上面两种类型信息是作者所考虑的。
二、 Direction
提出一个FCN-based的网络检测器,避免使用ROI操作。而mask-head上的filters 是根据实例来动态生成的,不是固定的,减少计算量。
三、 Method
本文的核心就是:对于一个含有K个实例的图像,网络需要动态地生成K个不同的mask heads,和每一个mask head在它们的filters中都包括目标实例的特征。CondInst使用instance-aware filters来表示实例,也就是把实例编码进mask head的参数里面。这就比较容易把不规则的目标进行编码,而不是类似与bounding box那样留存大量不相关的内容。本文基于FCOS检测网络进行改进。
先来看一下网络结构:
主要分为四个部分:
- Backbone
- FPN
- Mask branch
- Shared head
Backbone(ResNet-50) 和 FPN 在这里不再赘述, 和FCOS一致。对于在shared head上多了一个 controller head 和mask branch,下面分开说一下。
1. mask branch
首先 mask branch的网络结构是由四个3x3的卷积层组成(通道数分别为128,128,128和8), 连接在FPN的 P 3 P_3 P3层,因此它的输出是输入图像分辨率的 1 8 \frac{1}{8} 81。为了获得高分辨率的实例mask, 作者使用了bilinear upsampling 操作,將mask prediction 上采样4倍,输出分辨率为400x512(输入图像的分辨率假如为800x1024)。值得注意的是,我们的ground-truth label是800x1024,因此需要降采样2倍,对齐预测的mask,才能进行监督训练。四个卷积层之后得到输出结果 F m a s k F_{mask} Fmask,作者还把 coordinates map 拼接在 F m a s k F_{mask} Fmask,输出 F ^ m a s k \hat{F}_{mask} F^mask。Coordinates map 主要参考 CoordConv。在这之后,就到了mask head。mask head是由三个1x1卷积层组成的,且其filters参数由Controller head所提供。
2. Controller head
和FCOS的classification head结构一样,用于预测mask head的参数 θ x , y \theta_{x,y} θx,y。这个 θ x , y \theta_{x,y} θx,y是filters的参数,维度是N-Dimension。也就是有N个output channels,代表filters参数的个数。所谓的filters参数,就是用于mask head里面的。这个mask head在论文中总共有169个参数 ( w e i g h t s = ( 8 + 2 ) × 8 ( c o n v 1 ) + 8 × 8 ( c o n v 2 ) + 8 × 1 ( c o n v 3 ) , b i a s = 8 ( c o n v 1 ) + 8 ( c o n v 2 ) + 1 ( c o n v 3 ) ) (weights = (8+2) \times 8(conv1) + 8 \times 8(conv2) + 8\times 1(conv3), bias=8(conv1) + 8(conv2) + 1(conv3)) (weights=(8+2)×8(conv1)+8×8(conv2)+8×1(conv3),bias=8(conv1)+8(conv2)+1(conv3))
3. Classification head
上图是FCOS的prediction head。
像FCOS一样,输出一个C-Dimension向量
P
x
,
y
P_{x,y}
Px,y,C是类别数量(MS-COCO数据集为80),
(
x
,
y
)
(x,y)
(x,y)是第
i
i
i层特征图
F
i
F_i
Fi的位置。Bounding box regression 分支依旧保存在这个网络。尽管是实例分割网络,但是作者发现,使用box-based NMS能减少inference time。但是使用bounding box,并不涉及任何的ROIs操作。centerness的分支,也是依旧如FCOS那样,也保留在此网络。
4. Loss function
整体的loss如下:
L
o
v
e
r
a
l
l
=
L
f
c
o
s
+
λ
L
m
a
s
k
L_{overall} = L_{fcos} + \lambda L_{mask}
Loverall=Lfcos+λLmask
上面的
L
f
c
o
s
L_{fcos}
Lfcos代表着FCOS的三个loss:classification, centerness,和regression。所以这个网络多添加了一个分支mask branch loss:
L
m
a
s
k
(
{
θ
x
,
y
}
)
=
1
N
p
o
s
∑
x
,
y
1
{
c
x
,
y
∗
>
0
}
L
d
i
c
e
(
M
a
s
k
H
e
a
d
(
F
^
x
,
y
;
θ
x
,
y
)
,
M
x
,
y
∗
)
L_{mask}(\{\theta_{x,y} \}) = \frac{1}{N_{pos}}\sum_{x,y}1_{\{c^*_{x,y}>0\}}L_{dice}(MaskHead(\hat{F}_{x,y};\theta_{x,y}), M^*_{x,y})
Lmask({θx,y})=Npos1x,y∑1{cx,y∗>0}Ldice(MaskHead(F^x,y;θx,y),Mx,y∗)
L d i c e L_dice Ldice是dice loss,用来解决前景和背景样本不平衡的问题。这里不使用focal loss是因为focal loss需要特殊的初始化,而在参数是动态生成的时候,无法实现。
四、 Conclusion
个人觉得CondInst很大一部分的思想来自于dynamic filter networks和CoordConv。dynamic filters可以动态生成不一样的mask,而CoordConv的思想可以更好地提供位置信息.性能比Mask-RCNN好,速度也比它快。