ConInst: Conditional Convolutions for Instance Segmentation 论文笔记

Conditional Convolutions for Instance Segmentation

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

一、 Problem Statement

目前主流的实例分割算法是Mask-RCNN,依赖于ROI(ROI Pool或者ROI Align)获取最后的masks。然而,ROI-based的方法有以下缺点:

  1. ROIs 通常都是 axis-aligned的包围框,对于不规则形状的目标,它们可能包含大量不相关的图像内容,如背景或者其他的实例。这个可能可以用rotated ROIs减缓,但是会有更复杂的pipeline。
  2. mask head 通常需要相对大的感知域去获取更好地获取语义信息。因此3x3 convolutions 会堆叠在mask head,导致计算量增大。
  3. ROIs 通常是大小不一的。为了能够有效地进行batched computation,会需要一个resizing的操作,使得cropped regions 变为14x14的大小,限制了实例分割输出的分辨率。如果是大的实例,需要的是更好的分辨率来保留边界的细节。

而对于FCN-based的方法,性能大多数比不上ROI-based的方法。主要是因为:相似的外观可能需要不同的预测,而FCNs很难达到。举个例子,A和B在输入图像上有着相似的外观,当预测A的时候,FCN需要把B当作背景,但是由于它们有相似的外观,这是很难的。因此,ROI 操作就会把感兴趣的区域进行裁剪,也就是裁剪A,过滤B。

所以实例分割需要两种类型的信息:

  1. appearance
  2. 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检测网络进行改进。

先来看一下网络结构:

主要分为四个部分:

  1. Backbone
  2. FPN
  3. Mask branch
  4. 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,y1{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好,速度也比它快。

Reference

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值