论文提出基于轮廓的实例分割方法Deep snake,轮廓调整是个很不错的方向,引入循环卷积,不仅提升了性能还减少了计算量,保持了实时性,但是Deep snake的大体结构不够优雅,应该还有一些工作可以补,推荐大家阅读
来源:晓飞的算法工程笔记 公众号
论文: Deep Snake for Real-Time Instance Segmentation
![0dabcfc63eff93ef63241692e5ea7813.png](https://i-blog.csdnimg.cn/blog_migrate/27250fd73936a18603e76ebe0dace84c.jpeg)
- 论文地址:https://arxiv.org/abs/2001.01629
- 论文代码:https://github.com/zju3dv/snake/
Introduction
![92dd7058e1e0e3098b16787c8b3d4e18.png](https://i-blog.csdnimg.cn/blog_migrate/f9285e570f36e1b427278d87a36490ab.jpeg)
实例分割是许多计算机视觉任务中的重要手段,目前大多数的算法都采用在给定的bbox中进行pixel-wise分割的方法。受snake算法和Curve-GCN的启发,论文采用基于轮廓的逐步调整策略,提出了Deep snake算法进行实时实例分割,该算法将初始轮廓逐渐优化为目标的边界,如图1所示,达到很好的性能且依然保持很高的实时性(32.3fps)。 论文的主要贡献如下:
- 提出基于学习的snake算法用于实时实例分割,对初始轮廓调整至目标边界,并且引入循环卷积(circular convolution)进行轮廓特征的学习。
- 提出two-stage流程进行实例分割,先初始化轮廓再调整轮廓,两个步骤均可以用于修正初始定位的误差。
- Deep snake能在多个实例分割数据集上达到SOTA,对于512的图片输入能达到32.3fps。
Proposed approach
Deep snake方法将初始轮廓逐渐优化为目标的边界来进行目标分割,即将物体轮廓作为输入,基于CNN主干特征预测每个顶点的偏移量。为了充分利用轮廓拓扑结构,论文使用循环卷积(circular convolution)进行顶点特征的学习,有助于学习轮廓的优化,并基于deep snake提出了一套实时实例分割的流程。
Learning-based snake algorithm
传统的snake算法将顶点的坐标作为变量来优化人工设计的能量函数(energy function),通过最小化能量函数来拟合目标边界。由于能量函数通常是非凸的,而且需要基于低维图像特征进行人工设计,通常会陷于局部最优解。 而deep snake则是直接从数据学习如何微调轮廓,对于个顶点,首先构造每个顶点的特征向量,顶点的特征为对应的网络特征和顶点坐标的concate,其中为主干网络输出的特征图,为顶点处的双线性差值输出,附加的用于描述顶点间的位置关系,是平移不变的,由每个顶点坐标减去轮廓中所有顶点的最小和得到相对坐标。
![45d6c5aeeaa5027bbb201e427191999f.png](https://i-blog.csdnimg.cn/blog_migrate/9af6053eb1a20d33d898d881ac1546c1.jpeg)
![de09995d7302aee444d5fb8bb1efe1a9.png](https://i-blog.csdnimg.cn/blog_migrate/a1e00c8c2292f1f0e489b69ff01a0c90.jpeg)
在获得顶点特征后,需要对轮廓特征进一步学习,顶点的特征可以视作1-D离散信号,然后使用标准卷积对顶点逐个进行处理,但这样会破坏轮廓的拓扑结构。因此,将顶点特征定义为公式1的周期信号,然后使用公式2的循环卷积进行特征学习,为可学习的卷积核,为标准卷积操作。
![1a3b9074bed28a83f015984833bd45f4.png](https://i-blog.csdnimg.cn/blog_migrate/18d8173deccac54d764ab35cd0b1f579.jpeg)
循环卷积操作如图2所示,与标准的卷积操作类似,可以很简单地集成到目前的网络中。在特征学习后,对每个顶点使用3个卷积层进行偏移的输出,实验中循环卷积的核大小固定为9。
![d61e6c7e8f249447397c1a7404b740ef.png](https://i-blog.csdnimg.cn/blog_migrate/739102b4b24f9dc739e0b4fed79e9894.jpeg)
图a展示了deep snake的细节结构,输入为初始轮廓,主干包含8个"CirConv-Bn-ReLU"层,每层都使用残差连接,Fusion block用于融合主干网络中的多尺度轮廓特征,Prediction head使用3个卷积输出每个顶点的偏移。
Deep snake for instance segmentation
![05c79600a92852b1109e8dd18e75d586.png](https://i-blog.csdnimg.cn/blog_migrate/79831642c3550fe833b98fb46f966f15.jpeg)
将deep snake加入到目标检测模型中进行实例分割,流程如图b所示。模型首先产生目标框,将其构建成菱形框,然后使用deep snake算法将菱形顶点调整为目标极点,构造八边形轮廓,最后进行迭代式deep snake轮廓调整得到目标形状
- Initial contour proposal
论文采用ExtreNet的极点思想,能够很好地包围物体。在得到矩形框后,获取4条边的中心点连成菱形轮廓,使用deep snake对菱形轮廓调整成极点,然后每个极点放置一条边,连接边构造多边形,每个极点的边为其对应的bbox边的,若边超过原bbox范围会被截断。在实际使用时,菱形轮廓输入deep snake前会平均上采样到40个点(有助于deep snake计算),但损失函数计算只考虑的对应偏移
- Contour deformation
对八边形平均采样个点,将上极点作为起点,同样地,GT轮廓对物体边缘平均采样个点,将靠近的点作为起点,一般为128。如果顶点离GT很远,很难直接正确调整,于是采用迭代式地进行deep snake调整,实验采用的迭代次数为3次。 轮廓是目标空间位置的一种扩展表示方法,通过调整轮廓到物体边缘能够帮助解决detector的定位误差
- Handling multi-component objects
![ff2a53a6004bc060b7dbcb102991367f.png](https://i-blog.csdnimg.cn/blog_migrate/cfc982103048b1ecd2f02886a70e0b1b.jpeg)
由于遮挡,一个实例可能包含多个组件,然而一个轮廓只能勾勒出bbox内的一个组件。为了解决这个问题,使用RoIAlign来提取初始bbox特征,然后配合detector来检测组件的box,再对每个box进行上述的轮廓调整,最后结合初始bbox内相同类别的组件输出最终的物体形状。
Implementation details
Training strategy
![a392a0f6379a498c3248e9abb27f30ad.png](https://i-blog.csdnimg.cn/blog_migrate/325c2e28f6b5588125596e01522063be.jpeg)
极点的损失函数如公式3,为预测的极点。
![7970a5410be83b15f9ce324f9b05a360.png](https://i-blog.csdnimg.cn/blog_migrate/da8de0d60563378e3deb650ecc344c8f.jpeg)
迭代轮廓调整的损失函数如公式4,为调整后的顶点,为对应的GT边缘点。对于检测部分,则采用跟原检测函数一样的损失函数。
Detector
使用CenterNet作为检测器,对于物体检测,使用跟原来一样的设定输出类别相关的box,而对于组件检测,则使用类不可知的CenterNet,对于的特征图,输出的中心点heatmap和的box大小特征图。
Experiments
Ablation studies
![905ef728435a9df929a000a88dbea0b2.png](https://i-blog.csdnimg.cn/blog_migrate/66f8ba3bf0b3a887a24dfae271851c52.jpeg)
Baseline将轮廓视为图结构,然后使用GCN进行轮廓调整,初始轮廓为围绕bbox的椭圆,Arichitecture加入Fusion block,Initial proposal加入论文的轮廓初始化方法,最后是将GCN修改为循环卷积,可以看到每个步骤都对AP有提升。
![54ee6de7f1e7dda5ece8a52eb8d7e78a.png](https://i-blog.csdnimg.cn/blog_migrate/258bce782005d34b20ce77537ce2c9f7.jpeg)
论文也对比了卷积类型以及迭代次数对结构的影响,可以看到循环卷积的结果比GCN要好。
![73a47104e7d3ea61365fbe76af436f19.png](https://i-blog.csdnimg.cn/blog_migrate/c85afa92d2d8e573053c490149fc3c83.jpeg)
Comparison with the state-of-the-art methods
![6d5922a1b3cca47e9ef6ab4b257dc7fb.png](https://i-blog.csdnimg.cn/blog_migrate/7555a7686f0e0eb7c97ba1946ebc9c8a.jpeg)
![4105b0936d70d0100d09ac9bf5372caa.png](https://i-blog.csdnimg.cn/blog_migrate/8235842c5ddf0a0a914cb2e31a967020.jpeg)
![8d7335a4540b614ebb38b1b5891c830e.png](https://i-blog.csdnimg.cn/blog_migrate/11187dce1311dc422e86ac52ad070d17.jpeg)
![2a1d7a903e5255b31703eb069437486c.png](https://i-blog.csdnimg.cn/blog_migrate/871be1f259a98f3a3aa57688206d1573.jpeg)
![68d50cbeec885cf6ea6cefc4a9dd4c2e.png](https://i-blog.csdnimg.cn/blog_migrate/97c7ca77328882f702434ff38a7df801.jpeg)
论文在不同的数据集上都取得了不错的效果,作者在每个数据集上的训练参数都有点不一样,具体参数可以看看原文
Running time
![2d23419bb9506eccbc8c6b09974f7b8e.png](https://i-blog.csdnimg.cn/blog_migrate/e5e0380c696e8c974410143847dd9e04.jpeg)
Conclusion
论文提出基于轮廓的实例分割方法Deep snake,轮廓调整是个很不错的方向,引入循环卷积,不仅提升了性能还减少了计算量,保持了实时性,但是Deep snake的大体结构不够优雅,应该还有一些工作可以补,推荐大家阅读
参考内容
- Snakes: Active Contour Models - http://www.cs.ait.ac.th/~mdailey/cvreadings/Kass-Snakes.pdf
- Fast Interactive Object Annotation with Curve-GCN - https://arxiv.org/pdf/1903.06874.pdf
如果本文对你有帮助,麻烦点个赞或在看呗~ 更多内容请关注 微信公众号【晓飞的算法工程笔记】