CVPR-2020
文章目录
1 Background and Motivation
实例分割方法的目标是识别场景中所有可计数的目标,并为每个目标生成一个 mask。
借助实例分割,我们可以更好地理解场景,设计能够完成复杂操作任务的机器人系统,改进自动驾驶汽车的感知系统。
目标的 wide variability in the scale and appearance 以及遮挡和运动模糊给实例分割任务带来了极大的挑战
目前,大多数方法是基于 two-stage process 来做实例分割的,也即先目标检测(锁定你的大概范围),然后在检测的框框内进行分割(让你显形)!这类方法是能很好的处理诸如目标被遮挡的问题,缺点是这类方法可能会 over-smoothed failing to capture fine-grained details(也就是分割结果过于圆润,没有棱角,不能很好描述物体边界,比如要分割五角星,你的预测是五角星五个顶点围起来的圆形)
另外一种思路是,利用 interactive annotation(polygon-based methods) 的方法(标注图片的 annotation 的方法),这类方法利用多边形来更好地捕捉目标的几何形状,而不是把实例分割当作 pixel-wise labeling task。此方法,可获得更为精确的 mask,以及更快速的 annotation 过程,因为可以在预测多边形顶点的偏移,来调整 mask,缺点是,这类方法处理遮挡导致不连通的目标时往往效果不好
作者融合上述两类方法,取长补短,提出了 PolyTransform 实例分割方法
2 Related Work
- Proposal-based Instance Segmentation
- Proposal-free Instance Segmentation
- Interactive Annotation
3 Advantages / Contributions
ranks 1st on the Cityscapes test-set leaderboard
4 Method
在语义分割网络的基础上,提初始 mask 和 bbox,上面分支从 mask 中提轮廓,以一定间隔取点后,用 CoordConv 的形式融入到 bbox 经过 FPN 提取出的特征图中(下面分支),配合 STN 和 self-attention 预测出多边形每个顶点的偏移量
deforming network,预测多边形每个顶点的位移
4.1 Instance Initialization
先用分割方法提取 mask,根据 mask,一方面裁剪并 resize 矩形框(分割方法要是预测出了框就用分割方法预测的框,上图向下箭头,resize 成 512x512),另一方面利用 opencv 中的 findcontour 方法来从 mask 中提取轮廓(上图向右箭头)
findcontour 方法参考 提取轮廓的原理和代码实例,来自论文《Topological structural analysis of digitized binary images by border following》
根据提取出来的轮廓,每隔10个 pixel 初始化一个顶点,形成 polygon init
4.2 Feature Extraction Network
上图中间网络结构部分,目的是 learn strong object boundary features,具体的网络结构如下图所示
是 FPN 结构(参考 【FPN】《Feature Pyramid Networks for Object Detection》),最后把各个 level 的结果 concatenate 起来了
4.3 Deforming Network
1)Vertex embedding
用 CoordConv 网络引入坐标特征,channel 从 320 变成了 322,CoordConv 更详细的结构如下图所示
这个 CoordConv 方法本身有一定的戏剧色彩,八卦的同学可以参考 要拯救CNN的CoordConv受嘲讽,翻译个坐标还用训练?
然后用 STN 网络,从 HxWx322 的特征中采样 N*322 的 vector z z z
STN 可以参考 论文笔记:空间变换网络(Spatial Transformer Networks)
描述来源:空间变换网络STN
目的就是对特征图进行一个位置矫正
2)Deforming network
对于初始化的多边形轮廓,我们修改一个顶点的坐标,两个相连的边也随之移动。这些边的移动取决于相邻顶点的位置!因此,每个顶点必须知道它的邻居,并需要一种方法来相互通信,以减少不稳定和重叠的行为。(比如上面的图,改变黑色顶点的位置,如果不知道相邻顶点的具体位置,很容易改变顶点后出现了重叠行为,显然这是我们不想看到了)
作者通过 self-attending Transformer network——来自《Attention is all you need》,来学习顶点的依赖关系(权重)。具体如下
输入 z z z(N*322 的 vector ),通过 self-attending Transformer network 可以得到 Query,Key,Value, Q ( z ) Q(z) Q(z), K ( z ) K(z) K(z), V ( z ) V(z) V(z),参考 【MoCo】《Momentum Contrast for Unsupervised Visual Representation Learning》,然后用下面公式计算出顶点之间的权重
公式如下
其中
d
k
d_k
dk 是 Q 和 K 的 dimension
什么意思呢,就是当前点和其它点的关系(权重),我可以用上述 attention 公式中 QK 计算出来,然后和 V 加权在一起,形成预测,相比于没有 self-attention 的网络,有 self-attention 的网络可以学习到不同顶点之间的关系!不是孤立的预测,而是学一个和不同顶点之间关系的权重,然后配合其他顶点共同预测(预测的是顶点的偏移量)
下面是一个更形象的例子,如果计算每个框框和标签之间的关系(对标签的贡献度),叫 attention,如果计算每个框框之间的关系(关联度,权重),叫 self-attention!所以本文计算顶点与顶点之间的关系,用的是 self-attention
4.4 Polygon Transforming Loss
1)Chamfer Distance loss
polygon
P
P
P closer to the ground truth polygon
Q
Q
Q
p
p
p and
q
q
q are the rasterized edge pixels(栅格化的边像素点) of the polygons
P
P
P and
Q
Q
Q
第一项,是预测的多边形任意一点,到GT最小距离的和
第二项,是GT上任意一点,到预测的多边形最小距离的和
目的就是让预测出的多边形和 GT 尽可能的逼近
2)the standard deviation loss
防止顶点的偏移过大
e
ˉ
\bar{e}
eˉ 表示边的平均长度,
e
e
e 表示边的长度,
n
n
n 应该是边的个数
5 Experiments
5.1 Datasets
- Cityscapes:1024 × 2048
5.2 Instance Segmentation
1)Instance Initialization
采用的是 UPSNet 实例分割方法,配合 WideResNet38 主干网络(参考 【WRNs】《Wide Residual Networks》)
2)Comparison to SOTA
榜首
3)Robustness to Initialization
对比用不同初始化分割方法的结果
DCN 是 deformable convolution network
PANet 应该值得是改进了 FPN 结构
6 Conclusion(own)
- 从 mask 中提轮廓,用到了 opencv 库
- CoordConv 具体细节(猜测,第一个特征图存x,第二个特征图存y,顶点的 x 坐标在第一个特征图对应行全为行号,顶点的 y 坐标在第二个特征图对应列全为列号,行列号可以归一化)
- STN 方法细节
- self-attention 来计算顶点之间的关系,更有利于预测顶点的偏移