前言
要跑实验,所以我就看了Deep Snake的论文。之后会补充用自己的数据集复现代码的过程。
Deep Snake是一个新颖的用于实例分割的基于轮廓的方法。不像最近的一些方法直接回归一个图像中物体的边界坐标,Deep Snake是迭代变形的初始边框以匹配对象边界。是通过基于学习的方法实现蛇算法的经典思想。
我们使用循环卷积因为与通用的图卷积相比,它更好地利用了轮廓的循环图结构。
这个方法分为两步:初始轮廓提议和轮廓变形。
一、介绍
很多最先进的分割方法是在对象检测器给出的边界框内执行像素级分割,但是该边界框可能对不准确的边界敏感,并且将图像形状表示为密集的二进制像素通常会导致昂贵的后处理。边界检测的话,是沿对象轮廓的一组点,与像素及表示相比,一个轮廓不会局限于一个边界框里,而且有更少的参数。
给定初始轮廓,在每个顶点 (a) 处提取图像特征。由于轮廓是循环图,因此将循环卷积应用于轮廓 (b) 的特征学习。蓝色、黄色和绿色节点分别表示输入特征、循环卷积核和输出特征。最后,在每个顶点处对偏移进行回归,以使轮廓变形以匹配对象边界 (c)
创新点是引入循环卷积,以便在轮廓上进行高效的特征学习。注意到轮廓是一个循环图,由一系列在闭合循环中连接的顶点组成,对这些顶点使用一维卷积。轮廓是周期性的,Deep Snake 引入了圆形卷积,这表明非周期函数(一维核)以标准方式与周期函数(轮廓上定义的特征)卷积。圆形/循环卷积不仅编码每个顶点的特征还编码顶点之间的关系。
剩下的问题是如何初始化轮廓,其重要性已经在经典蛇算法中得到了证明。
我们将Deep snake与物体检测器继承在一起。用检测到的边界框初始化由边缘上的四个中心点定义的菱形轮廓,之后将菱形作为输出,输出从菱形顶点到对象极值点的偏移量,用于构建八边形跟随。最后Deep Snake使八边形轮廓变形以匹配对象边界。
优点
- 首先,我们的方法可以处理物体定位阶段的错误,从而允许轻量检测器。
- 轮廓表示比基于像素的表示具有更少的参数,并且不需要昂贵的后处理。
二、方法
我们通过变形初始轮廓来匹配对象边界来执行对象分割。具体来说,深蛇将轮廓作为输入,并预测指向对象边界的每个顶点偏移。等值线顶点上的特征是从具有 CNN 主干的输入图像中提取的。为了充分利用轮廓拓扑结构,我们提出了圆形卷积法,以便在轮廓上进行高效的特征学习,这有助于深蛇学习变形。基于深蛇,我们还开发了用于实例分段的管道。
2.1 基于学习的🐍蛇算法
Deep snake以端到端的方式进化轮廓。给定一个具有N个顶点的轮廓,为每个顶点构建特征向量。一个顶点的输入特征fi是与基于学习的特征和顶点坐标串联。[F(xi);xi],F表示特征映射。F是通过特征映射,是通过CNN得到的。CNN和物体检测的框架是共享的。
图像特征F(xi)是在顶点坐标xi处进行双线性插值法计算的。添加的定点左边用于对轮廓之间的空间关系进行编码。
变形不应该受到平移的影响(大概是一个物体它平移到图像哪个地方,它的形状不会变)。就是位置对边界不会有影响,将xi的每个维度减去所有顶点的最小值。
图2.循环卷积。蓝色节点是在等值线上定义的输入要素,黄色节点表示核函数,绿色节点是输出要素。突出显示的绿色节点是内核函数和突出显示的蓝色节点之间的内积,与标准卷积相同。圆形卷积的输出特征与输入特征的长度相同。
给定轮廓上定义的输入特征,Deep snake引入了用于特征学习的循环/圆形卷积。轮廓的顶点可以视为一维的离散信号,我们扩展f成为一个周期信号。
建议通过定义为以下的循环卷积对周期性特征进行编码。一个点的值可以通过周围2r+1个(包含自身)来表示。
fN是这N个点的特征,一个矩阵,有个下标i就是第i个点的特征向量。k:[-r,r]->RD,是一个可学习的核函数,运算符*代表卷积。(看不懂┭┮﹏┭┮)
之后作者说这个和标准卷积一样,也可以方便的作为网络中的一层。
需要讨论的是提出的循环卷积比图卷积更好地利用了轮廓的圆形结构。一个可以替代的方法是用CNN从输入图像中回归像素向量场,以指导初始轮廓的演变。我们认为deep snake超过CNN是在物体级别的结构预测,这个顶点处便宜预测取决于同一个轮廓的其他顶点。因此deep snake预测远离物体顶点的更合理的偏移,CNN回归向量场可能会将该顶点驱动到另一个更近的对象。
(a)Deep snake由三部分组成:骨干、融合块和预测头。它采用轮廓作为输入并输出顶点偏移以使轮廓变形。(b)基于Deep snake,我们提出了一个两阶段的管道进行分割:初始轮廓建议和轮廓变形。探测器提出的盒子给出了一个菱形轮廓,然后通过Deep snake将其四个顶点移动到物体的极点。八边形是根据极值点构造的。之后以八边形为初始轮廓,Deep snake迭代变形以匹配物体边界。
**网络架构。**图3(a)显示了详细的原理图。根据[34,39,22]的想法,深蛇由三部分组成:骨干,融合块和预测头。主干由 8 个“CirConvBn-ReLU”层组成,所有层都使用残差跳跃连接,其中“CirConv”表示循环卷积。融合模块旨在融合多个尺度上所有轮廓点的信息。它连接来自主干中所有层的特征,并通过 1×1 卷积层转发它们,然后进行最大池化。然后将融合要素与每个折点的特征连接起来。预测头将三个 1×1 卷积层应用于顶点特征并输出顶点偏移。
2.2 Deep snake对于实例分割
探测器首先生成物体轮廓框,用于构建菱形轮廓,然后深蛇将菱形顶点移动到物体极点,用于构建八边形轮廓。最后,深蛇以八边形为初始轮廓,进行迭代轮廓变形,得到物体形状。
初始边界建议,因为一篇论文中提到的八边形仅仅包围了物体,所以我们用这个初始化。这个八边形是由四个极端的点形成的,就是最上边、最左边、最下边、最右边。当预测好边界框的时候,我们提取顶部、左侧、底部、右侧框边缘的四个中心点,然后将它们连接起来得到菱形轮廓。Deep snake把这些作为输入,输出四个偏移量,在实践中,为了考虑更多的上下文信息,零星轮廓均匀上采样至40个点,Deep snake相应的输出40个偏移。loss函数只关注xi^bb上的偏移。
我们通过基于极值点生成四个线段并连接它们的端点来构建八边形。对于每一个极值点,一条线沿相应的框边缘在两个方向上眼神1/4边缘长度,如果与边框相遇就截断。然后,将四个线段的端点连接起来形成八边形。
轮廓变形。
我们以迭代优化的方式处理这个问题。我们的方法首先根据当前轮廓预测N个偏移,然后通过将偏移量添加到其顶点坐标来变形该轮廓。变形的轮廓可以用于下一次迭代。在实验中,除非另有说明,否则推理迭代次数设置为 3。
请注意,轮廓是对象空间延伸的替代表示。通过变形初始轮廓以匹配对象边界,Deep Snake可以解决探测器的定位错误。
多组件检测
由于遮挡,某些对象被分成几个组件,如图 所示。但是,轮廓只能勾勒出一个零部件的轮廓。为了克服这个问题,我们建议使用另一个检测器来查找对象框中的对象组件。图 4 显示了基本思想。具体来说,使用检测到的盒子,我们的方法执行RoIAlign 来提取特征图,并在特征图上添加一个检测器分支来生成组件框。对于检测到的组件,我们使用深蛇对每个组件进行分割,然后合并分割结果。
总结
待更新,待看懂,待更新代码复现。