DeepSnake实现实例分割

DeepSnake实现实例分割文章目录简介:环境配置Demo实现全文总结参考文献简介:DeepSnake(DeepSnakeforReal-TimeInstanceSegmentation)作为CVPR2020oral论文,在实例分割任务上取得了实时分割效果的同时,还保持着非常不错的性能,该论文作者将深度学习和传统活动轮廓模型中的snake算法结合了起来。首先基于CenterNet目标检测网络获得感兴趣目标的检测框bbox,并取检测框每个边的中点构建菱形轮廓,然后从菱形轮廓中采样得到40个顶点,通过引入圆卷积结构从基于

简介:

DeepSnake(Deep Snake for Real-Time Instance Segmentation)作为CVPR 2020 oral论文,在实例分割任务上取得了实时分割效果的同时,还保持着非常不错的性能,该论文作者将深度学习和传统活动轮廓模型中的snake算法结合了起来。首先基于CenterNet目标检测网络获得感兴趣目标的检测框bbox,并取检测框每个边的中点构建菱形轮廓,然后从菱形轮廓中采样得到40个顶点,通过引入圆卷积结构从基于这些轮廓顶点构建的特征中学习出顶点偏移量,对菱形四个顶点通过学习到的偏移量进行畸变,即可得到实例目标的极值点(最左,最上,最右,最下),四个极值点构建的bbox能更好的表达目标的位置信息。在极值点的基础上可以构建出八边形轮廓作为snake算法思想中的初始轮廓,对这个八边形轮廓采样得到的128个顶点同样通过圆卷积学习出顶点偏移量,通过多次迭代更新顶点位置,提高分割精度并可以减少目标检测器带来的定位误差,最终完成实例分割。
DeepSnake实例分割流程

环境配置

由于个人对深度学习结合传统活动轮廓模型方向比较感兴趣,这里就打算配置下deep snake,看看这个新奇算法的效果。DeepSnake作者提供了开源代码,github上也给出了环境配置的官方步骤。整个demo实现过程,总结记录了一些小知识。
在这里插入图片描述
如上图所示,大家都是利用conda为某个项目(工程)单独安装环境 。conda create -n snake python==3.7 ,代表创建环境并取名为snake,其安装的python库为3.7,不管本身anaconda的python版本为多少,都会重新安装并单独服务于snake,这样各个项目就不会交叉干扰了。在按照官方步骤配置环境时,我遇到了一些问题,最后总结如下:

conda create -n snake python==3.7
source activate snake   #linux激活环境,windows用conda activate snake
conda install pytorch==1.1.0 torchvision cudatoolkit=10.0 -c pytorch
#由于教研室服务器cuda是10.2版本,就不能按照官方步骤安装cuda9.0,不要用pip install torch===1.1.0简单安装,会版本对应不上,报错
pip install Cython==0.28.2
cd /home/mfx/xmf/snake-master#自己目录
pip install -r requirements.txt
git clone https://github.com/NVIDIA/apex.git #会出现apex目录
cd apex
git checkout 39e153a3159724432257a8fc118807b359f4d1c8
#git checkout是切换到 apex仓库下 特定的分支
export CUDA_HOME="/usr/local/cuda-10.2"
python setup.py install --cuda_ext --cpp_ext
#install extensions
cd /home/mfx/xmf/snake-master/lib/csrc
export CUDA_HOME="/usr/local/cuda-10.2"
cd dcn_v2
python setup.py build_ext --inplace
cd ../extreme_utils
python setup.py build_ext --inplace
cd ../roi_align_layer
python setup.py build_ext --inplace

Demo实现

环境安装完成之后,如果每次重新连接了服务器,可按下面方式运行DeepSnake的demo代码。

source activate snake#每次连接,肯定先切换环境啊
cd /home/mfx/xmf/snake-master
#运行之前需要建目录,放预训练模型啥的,不再赘述
python run.py --type demo --cfg_file configs/sbd_snake.yaml demo_path demo_images/2009_000871.jpg ct_score 0.3

为了观察DeepSnake的分割效果,获得了下面的分割结果。可以看出加载的预训练模型分割了人,椅子,盆栽植物等类别目标,效果都很不错,只是中间的两个人由于靠得太近,被分割成了一个目标。这个本质上是CenterNet检测器的原因,靠得太近的目标只检测到一个,当然专门针对这种场景去训练CenterNet可以改善检测效果。
在这里插入图片描述
另外,有时候可能只想分割指定类别的目标,因此就需要对代码进行修改,这里假定只想分割图像中的人这一个类别,也假定使用的是sbd模型,因为使用其他模型修改的代码位置和方式应该不一样。

cd /home/mfx/xmf/snake-master/lib/networks/snake

在这个目录下的evolve.py,对其prepare_testing_init函数修改即可

def prepare_testing_init(self, output):
    output['detection'] = output['detection'][np.where(output['detection'][:,:,5].cpu().numpy().astype(int)==14)]
    output['detection'] = output['detection'].reshape((1,-1,6))#reshape了形状才符合
    init = snake_gcn_utils.prepare_testing_init(output['detection'][..., :4], output['detection'][..., 4])
    #init = snake_gcn_utils.prepare_testing_init(output['detection'][..., :4], output['detection'][..., 4]
    output['detection'] = output['detection'][output['detection'][..., 4] > snake_config.ct_score]
    output.update({ 
   'it_ex': init['i_it_4py']})
    return init

此时分割效果如下:
在这里插入图片描述
其中的”.astype(int)==14)”就是筛选了人这个类别,这是因为sbd数据集中20个类别对应0-19,其中14对应人这个类别,如下图所示(见Semantic Contours from Inverse Detectors)
在这里插入图片描述

全文总结

DeepSnake采取基于学习的方法从顶点特征中学习出了偏移量,以此实现了snake算法的核心思想。但事实上,DeepSnake并不是第一个将深度学习和snake算法结合起来的,CVPR2019的Fast interactive object annotation with curve-gcn研究的是交互式目标标注,由人为给定感兴趣目标的bbox,同时采取的是图卷积提取顶点特征。DeepSnake采取的圆卷积结构更符合轮廓顶点的周期形性质,更好地利用了轮廓的顶点间的信息,效果更好。总之,DeepSnake这个新奇的分割方法有着实时分割性能和良好的分割效果,因此深度学习结合传统活动轮廓模型还值得进一步深入研究。

参考文献

[1] K.-K. Maninis, S. Caelles, J. Pont-Tuset, and L. Van Gool. Deep extreme cut: From extreme points to object segmentation. In CVPR, 2018.
[2] Peng, S., Jiang, W., Pi, H., Bao, H., & Zhou, X. (2020). Deep Snake for Real-Time Instance Segmentation. ArXiv, abs/2001.01629.
[3] Zhou, X., Wang, D., & Krähenbühl, P. (2019). Objects as Points. ArXiv, abs/1904.07850.
[4] Ling, H., Gao, J., Kar, A., Chen, W., & Fidler, S. (2019). Fast Interactive Object Annotation With Curve-GCN. 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR), 5252-5261.
[5] Wang, Zian & Acuna, David & Ling, Huan & Kar, Amlan & Fidler, Sanja. (2019). Object Instance Annotation With Deep Extreme Level Set Evolution. 7492-7500.10.1109/CVPR.2019.00768.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37721.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注