DeepSnake实现实例分割

article/2025/11/7 14:55:45

文章目录

  • 简介:
    • 环境配置
      • Demo实现
        • 全文总结
          • 参考文献

简介:

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.


http://chatgpt.dhexx.cn/article/0gpfVttv.shtml

相关文章

【主动轮廓模型(二)】《GVF Snake》算法原理与OpenCV实现

文章目录 1 问题引入1.1 传统Snake模型的缺陷1.2 亥姆霍兹定理(Helmholtz theorem) 2 GVF Snake2.1 边缘图(Edge Map)2.2 梯度矢量流(Gradient Vector Flow,GVF)2.3 数值求解方法 3 OpenCV实现 …

用于实时实例分割的Deep Snake算法

第一部分:创新及其优点 第二部分:算法原理 第三部分:实验过程 第四部分:程序逻辑 1 创新及其优点 Deep Snake算法建立在传统Snake算法的基础上,将snake算法做成了轮廓结构化特征学习的方法,使用了循环卷积…

KMeans 算法(一)

K-means算法简述 K-means算法,也称为K-平均或者K-均值,一般作为掌握聚类算法的第一个算法。这里的K为常数,需事先设定,通俗地说该算法是将没有标注的 M 个样本通过迭代的方式聚集成K个簇。在对样本进行聚集的过程往往是以样本之间…

选择性搜索算法(Selective Search )——SS算法

文章目录 一、前言二、object Detection VS object Recognition(Selective Search的提出)2.1object recognition与object detection的关系2.2滑动窗口方法的局限性2.3Selective search算法的提出 三、Selective Search算法3.1什么是Selective Search&…

主动轮廓模型——Snake分割算法(MATLAB)

学习图像分割算法,在网上找到的关于主动轮廓模型的实现代码,自己简化总结了一下,在这里和大家分享,欢迎提问 snake是一种能量最小的曲线,表示为v(s) (x(s), y(s)), s为归一化的曲线长度,s∈[0, 1]。 能量…

麻雀搜索算法(Sparrow Search Algorithm,SSA)

文章目录 1 算法思想2 算法步骤3 求解函数最值(Python实现)4 算法进阶直接改进SSA融合别的智能优化算法来改进SSASMA及其改进的应用 原论文: [1]薛建凯. 一种新型的群智能优化技术的研究与应用[D].东华大学,2020. 1 算法思想 借鉴生物行为&a…

CVPR2020分割算法Deep Snake的配置(Deep Snake for Real-Time Instance Segmentation)

这篇文章为分割提供了新思路,很有参考意义。 注:原代码的运行环境为Ubuntu,本文在Windows10系统下完成配置。 1、论文下载: Deep Snake for Real-Time Instance Segmentation [paper][code] 2、代码下载: https:/…

图像分割之(五)活动轮廓模型之Snake模型简介

图像分割之(五)活动轮廓模型之Snake模型简介 zouxy09qq.com http://blog.csdn.net/zouxy09 在“图像分割之(一)概述”中咱们简单了解了目前主流的图像分割方法。下面咱们主要学习下基于能量泛函的分割方法。这里学习下Snake模型…

麻雀搜索算法SSA(Sparrow Search algorithm)

文章目录 前言数学模型 前言 麻雀搜索算法是2020提出的一种新的优化算法,出自东华大学xue和shen的论文:A novel swarm intelligence optimization approach: sparrow search algorithm,本文的内容是基于该论文来写的。 数学模型 麻雀搜索算…

snake 模型

转自:https://blog.csdn.net/caoniyadeniniang/article/details/77803002 一、曲线演化理论 假设CC(p)是一条光滑封闭的曲线,P是任意的参数化变量,设K表示曲 率,T表示切线,N表示法线,则有如下关系存在&…

蛇优化算法(Snake Optimization,SO)(附Matlab代码,完整,免费)

蛇优化算法(Snake Optimization,SO)(附Matlab代码,完整,免费) 一、算法灵感二、算法介绍2.1 初始化2.2 划分种群2.3 定义温度和食物2.4 食物不足时(探索阶段)2.5 食物充足时(开发阶段)2.5.1 斗争…

snake模型求解

 snake 模型 一、曲线演化理论 假设CC(p)是一条光滑封闭的曲线,P是任意的参数化变量,设K表示曲 率,T表示切线,N表示法线,则有如下关系存在: 因为T和N是互相垂直的(如图所示)&am…

snake模型

1 能量泛函 在介绍snake模型的参考资料[1]中,提到能量泛函的概念,这里对此概念做一个总结。 参考资料[6]给出了泛函的定义: 简单的说, 泛函就是定义域是一个函数集,而值域是实数集或者实数集的一个子集。推广开来&…

Snake算法知识点记录

Snake算法 snake是一种主动轮廓模型,主动轮廓模型目前用到了2种:CV和snake。snake在逐步迭代优化过程的目标是能量函数最小化,snake的目标不像sobel、canny等找到整张图的轮廓。它只搜索你给出的初始轮廓附近,达到轮廓更精确的目…

snake模型简介

图像分割之(五)活动轮廓模型之Snake模型简介 zouxy09qq.com http://blog.csdn.net/zouxy09 在“图像分割之(一)概述”中咱们简单了解了目前主流的图像分割方法。下面咱们主要学习下基于能量泛函的分割方法。这里学习下Snake模型简…

蛇优化算法(Snake Optimizer)

生物学机理&#xff1a;来源于蛇的交配行为。如果温度较低&#xff0c;且食物可用&#xff0c;蛇的交配行为发生&#xff1b;否则蛇只会寻找食物&#xff08;食物量<0.25&#xff09;或吃现有的食物(T>0.6)。基于此&#xff0c;将考虑蛇优化算法的搜索过程分为两个阶段&a…

图像处理之图像分割(一)之活动轮廓模型:Snake算法简单梳理

图像处理之图像分割&#xff08;一&#xff09;之活动轮廓模型&#xff1a;Snake算法简单梳理 Snake算法&#xff0c;应该也可以翻译成蛇形算法&#xff0c;或者是包含曲折前进的意思。具体函数背景原理介绍参考&#xff1a;zouxy09&#xff0c;http://blog.csdn.net/zouxy09/a…

snake算法总结

snake是一种主动轮廓模型&#xff0c;笨妞对主动轮廓模型的理解&#xff1a;你先给它一个初始轮廓&#xff0c;模型以初始轮廓为基准逐步迭代&#xff0c;来改进图像的轮廓&#xff0c;使其更加精确。主动轮廓模型目前用到了2种&#xff1a;CV和snake。前者没有看算法内部的原理…

主动轮廓模型:Snake模型的python实现

质量声明&#xff1a;原创文章&#xff0c;内容质量问题请评论吐槽。如对您产生干扰&#xff0c;可私信删除。 主要参考&#xff1a;Active Contour Model — skimage v0.16.dev0 docs - scikit-image 文章目录 skimage实现函数声明代码示例结果显示 Numpy实现代码示例结果显示…

社交网络分析--python-igraph

#coding:utf-8 import scrapy import xlwt, lxml import re, json import matplotlib.pyplot as plt import numpy as np import pylab from scipy import linalg #文档&#xff1a;igraph.org/python/doc/ #社交网络分析 #from igraph import *社交网络算法介绍 分析-权利的游…