用于实时实例分割的Deep Snake算法
论文链接https://arxiv.org/abs/2001.01629
论文代码:https://github.com/zju3dv/snake/
本人小白,如有理解错误,欢迎指正。
1、研究背景
首先区分三种不同的概念:语义分割、实例分割和全景分割。
- 语义分割:上左图,需要将图中所有的类别(人、羊、狗以及背景)全部区分,但是对于同属于羊的不同实例不做区分,都标记为一类。
- 实例分割:如上右图,需将图片中除背景以外的所有实例分割出来,同样属于羊的类,要区分出不同的实例,上图用不同的颜色对羊作区分。
- 全景分割是对上述两者的结合,即需要对背景做分割,也许对同一类的不同实例作区分。
图像分割采用的方法大致分为两类,基于像素的分割和基于边缘的分割。
- 多数基于像素的分割需要用目标检测算法对分割对象检测定位,这导致算法对bounding-box较为敏感。
- 基于像素的方法通过对二维图像做卷积和池化从中得到边缘信息和像素间的拓扑信息,而且,将对象形状表示为密集的二进制像素通常导致昂贵的后处理(Mask R-cnn)。
- 基于边缘的分割用像素点集存储图像边缘像素,不受bounding box的限制,同时(做卷积时)参数更少。
2、相关方法
基于像素的:
- 带有候选区域:例如Mask R-cnn、PANet。不足:不能处理定位误差。
- 不带候选区域:例如[1][2]。不足:处理费时。
基于边界的:
- 不可学习的:例如Snake、水平集方法。不足:需要手工设置能量泛函。
- 可学习的:例如[3]。不足:对边界的拓扑信息利用不够。
由于模型叫做Deep Snake,下面对Snake算法做简单的介绍(论文中没有这部分)。详(见https://blog.csdn.net/sunlinju/article/details/52999872)。
Snake算法又叫主动轮廓模型,基本原理是通过构造能量泛函,在能量函数最小值驱动下,轮廓曲线逐渐向待检测物体的边缘逼近,最终分割出目标。由于主动轮廓模型利用曲线演化定位目标的边缘,因此也称为Snake模型。
关于边缘表示:选定若干个点,通过插值得到一条连续的曲线,作为初始边界,通过最小化能量泛函,迭代曲线上的离散点,最终实现曲线将待分隔目标包围。
关于能量泛函的计算:基于边缘的主动轮廓模型运用图像的梯度等、纹理等包含图像边界的信息计算能量泛函;基于区域的主动轮廓模型通过边界将预想分为内部区域和外部区域,通过计算内部项与外部项加上一个约束项计算能量泛函。
3、模型方法
首先说一下论文的创新,主要可概括为以下两个方面:
- 提出了可学习的snake算法用于实例分割,将圆周卷机(circular convolution)操作用于提取边界特征,能更好更高效地学习到边界特征。圆周卷机不仅学习到顶点的特征,还学习到顶点之间的关系。
- 基于deep snake算法提出了用于实例分割两个阶段:初始化候选边界阶段以及边界形变阶段。
- 在Cityscapes, KINS, SBD 和 COCO数据集上证明了模型的优异表现。
3.1 圆周卷积操作
如下图2所示,卷积的输出与输入长度相同。蓝色的输入特征经过黄色的卷积核得到绿色的卷积输出。
通常,边界可看做一个一维的离散向量,然后通过常规的卷积操作提取特征。但这将破坏边缘的拓扑信息。圆周卷积可写作如下公式
fN可看做卷积的输入,k为卷积核,r可看做卷积核的半径(论文中对这些符号没有详细的说明,如有错误请指出)。‘*’表示标准卷积(公式的理解参照上图2)。实验中部将卷积核的尺寸设置为9。
相较于标准卷积,圆周卷积在对象水平上的预测更有优势,它的顶点偏差的计算依赖于同一边界上的其他顶点。对于离对象相差较远的顶点,它的偏差更‘reasonable’。在这种情况下,标准的CNN可能会有困难,因为回归的矢量场可能会将这个顶点驱动到更近的另一个对象。
3.2 网络结构
如上图所示,为deep snake的网络结构。网络的输入为边缘信息(顶点的集合),输出为顶点的偏差集合。网络符合end-to-end结构。图中CirConv表示圆周卷积,网络结构分为三部分:backbone,fusion和prediction模块,分别用来提取边界特征、特征融合以及预测偏差。网络中使用跳连接结构,具体参照上图。
3.3 实例分割
论文中的另一重要内容是使用deep snake结构提出了一个实例分割流程。
流程可总结为:
- 使用目标检测手段得到待分隔对象的大致位置(bounding box),然后取各个变的中点,连接之后得到一个菱形框,如图‘diamond contour’。
- 将上述菱形框输入到deep snake网络中得到一个误差集(四个顶点的误差),细心的你可能发现,论文中将卷积核长度定为9,那么对于长度只有四个点边界如何操作呢?论文中采用在菱形框上采样,得到长度为40个点的边界,然后再输入网络,最终只用四个顶点的偏差。
- 上述步骤经过偏差调整后,得到四个极值点。以这四个极值点为中心,每个顶点向两端各延伸1/8(bounding box的)边长,之后再将各个线段连接形成一个八边形,如图‘octagon contour’。
- 以上述八边形作为初始边界,边界上采样(论文中为128个点)输入deep snake网络,得到误差。根据误差迭代调整边界,不断靠近groundtruth边界。(论文中迭代次数一般为3次)。
通过改变初始边界的误差,deep snake可以解决定位的误差。上述过程可见,整个流程共两次用到了deep snake,第一次输入菱形边界,输出到极值点的偏差,目的是得到对象的极值点(极值点定义为目标的最上、最下、最左、最右点)。第二次输入初始边界,输出边界上的采样点的偏差,目的是使边界接近groundtruth。可以理解为需要训练两个deep snake网络,两个网络的损失函数分别计算如下:
Lex为得到极值点的网络误差,Liter为得到分割边界的误差。L1表示L1损失。N为边界上采样的顶点个数,代hat的x为网络输出,不带hat的x为理想输出。
论文中使用CenterNet作为检测器,还提到了目标由于遮挡等原因被分割为多个部分,使用RoIAlign解决这一问题。
- Naiyu Gao, Yanhu Shan, Y upei Wang, Xin Zhao, Yinan Y u,Ming Yang, and Kaiqi Huang. Ssap: Single-shot instance segmentation with affinity pyramid. In ICCV, 2019. 2
- Yiding Liu, Siyu Yang, Bin Li, Wengang Zhou, Jizheng Xu,Houqiang Li, and Yan Lu. Affinity derivation and graph merge for instance segmentation. In ECCV, 2018. 2, 7
- Huan Ling, Jun Gao, Amlan Kar, Wenzheng Chen, and Sanja Fidler. Fast interactive object annotation with curve-gcn. In CVPR, 2019. 1, 2, 3, 4, 5, 6
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37841.html