Deep Watershed Transform for Instance Segmentation

2023-05-16

Min Bai & Raquel Urtasun
UfT

1. 传统的分水岭算法简介

图像处理中的分水岭算法常用来做图像区域分割(segmentation),基本的思路是计算一张energy map来表示图像,其中物体区域的energy和其他非物体区域的energy差别较大,从而形成包络物体的分水岭,称包络线为watershed line,称物体区域为catchment basins(一般假设物体区域的energy低)。如下图所示:
|center | 200x0
分水岭算法以一种类似注水的方法找到物体的区域,并通过抑制相邻catchment basins的水交汇,达到分割物体的目的。

分水岭算法通常采用梯度作为energy map,这样的话basin就对应比较平滑的区域。但是分水岭算法的一大局限在于其很容易导致过分割。采用marker-controlled的方法,选择marker又是一个很heuristic的问题。

2. Deep Watershed Transform

作者的基本思路是利用网络来学习分水岭算法里的energy map,目的是希望学习得到的watershed line就表示instance的边界。这样直接应用分水岭算法就可以实现instance segmentation了。下图表示传统分水岭算法使用梯度大小得到的energy map和作者学习得到的energy map的对比:
|center | 400x0
可以看到,上图中一共有3个instance,如果使用梯度大小作为energy map,容易受到噪声的干扰,从而分割出7个instance,采用学习得到的energy map,能够更好的表示一个instance。

直接学习instance之间的边界是比较困难的,作者的做法分为两步,首先训练一个Direction Network学习instance内部点到边界的方向,然后根据这个direction map再训练一个Watershed Transform Network学习instance内部点的energy level,最后拿energy map应用分水岭算法。

整体的网络框架如下所示:
|center | 800x0

2.1. Direction Network

该网络的输入为RGB图像以及语义分割的map(加入分割的结果作为输入是为了让网络只关注目标区域,忽略背景区域)。
目标是学习energy下降的方向(instance边缘的能量低,instance中心的能量高,所以下降的方向指向instance的边界)

对于每一个pixel,作者用二维单位向量表示该下降方向的真值,如下:

up,gt=Dgt(p)|Dgt(p)| u p , g t = ∇ D g t ( p ) | ∇ D g t ( p ) |

其中 Dgt(p) D g t ( p ) 表示像素p到其对应instance边界的最短距离。
能量梯度方向的示意图如下所示:
|center | 300x0

作者方向的真值没有选取角度的原因是因为角度的数值和方向不具有连续等价的性质,比如0度和360度方向一致但是数值差太大。采用能量梯度方向还有一个好处是:如果两个instance之间存在相互遮挡,那么loss就会对边界处的能量梯度方向比较敏感,即如果一个pixel分错了instance,那么能量梯度方向肯定是和真值相反的,这样loss会变得很大。这种loss能强迫网络学习pixel级别的精确定位。

Direction network输出的是一个2-channel的direction map,网络部分如上图所示,采用的是修改的vgg模型。这部分网络训练的loss如下所示:

ldirection=pPobjwp||cos1<up,gt,up,pred>||2 l d i r e c t i o n = ∑ p ∈ P o b j w p | | c o s − 1 < u p , g t , u p , p r e d > | | 2

其中 <> <> <script type="math/tex" id="MathJax-Element-29"><></script>表示求两个向量内积, cos1 c o s − 1 得到的是两个向量的夹角, wp w p 是和instance面积成反比的系数, Pobj P o b j 表示每一个instance。整体的loss是角度误差的平方和。

2.2. Watershed Transform Network

通过前面的direction network得到每个像素点的能量梯度方向之后,wtn再根据这张二维的map学习每一个pixel对应的energy level。其中level 0表示背景以及和距离边界2个pixel以内的像素点。level越高,像素点越靠近物体的中心。作者一共手动选择了K = 16个level。

WTN模块的训练过程如上所示,输入为direction map,输出为energy map。其训练的loss为改动的交叉熵:

lwatershed=pPobjk=1Kwpck(t¯p,klogy¯¯¯p,k+tp,klogyp,k) l w a t e r s h e d = ∑ p ∈ P o b j ∑ k = 1 K w p c k ( t ¯ p , k l o g y ¯ p , k + t p , k l o g y p , k )

其中 wp w p 还是和原来一样的和instance面积成负相关的系数, ck c k 表示和energy level相关的系数,因为我们最后是选择level大于0或1来分割instance,因此我们希望level小的部分学习尽量准确,所以 ck c k 对于小的k,值比较大。

整体训练过程中各个步骤的输入输出如下所示:
|center | 800x0

2.3. Energy Cut and Instance Extraction

最后分割的时候,对于小目标类别(person, rider, etc),选择level=0进行分割,对于大目标类别(car, truck, etc),采用level=1进行分割。

3. Experiments

作者只在CityScapes上做了实验。
训练的时候,首先先拿RGB图像,分割的gt以及instance segmentation的gt训练direction network;
然后拿gt的direction map和gt的instance segmentation训练WTN。
最后把两个模块级联在一起,用RGB图像和PSPNet的输出做fine-tune。

在CityScapes上比之前的instance segmentation效果好很多
|center | 700x0

网络对于分割的效果也不是特别敏感,但是分割好,instance segmentation也会更好
|center | 400x0

定性分析结果如下:
|center | 900x0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Deep Watershed Transform for Instance Segmentation 的相关文章

随机推荐

  • ubuntu20安装

    文章目录 前言一 ubuntu20 安装二 手动安装和分区1 必须选择自己创建2 第一种分区方式3 第二种分区方式 三 VmTools安装1 遇到不能粘贴的问题2 不能共享的问题 四 环境安装1 更新源2 install必须环境3 谷歌浏览
  • git出现Permission denied的解决办法

    git出现Permission denied的解决办法 问题描述 1 xff0c 在 master 分支的基础下创建了一个新的分支 log xff0c 并且在新的分支上 添加了两个新的文件 file1 和 file2 xff0c 然后对修改
  • 内环功控和外环功控的区别

    首先搞清楚内环功控和外环功控的区别 xff1a 内环功控 xff1a 根据接收到的SIR值来调整发射功率 xff0c 如果接收到的SIR值 gt 目标SIR值 xff0c 则通知对等层将空口上的发射功率下调一个步长 xff0c 如果相反 x
  • maven常用总结

    maven常用总结 1 常用的maven命令2 坐标定义3 pom基本配置 1 常用的maven命令 常用 的maven命令包括 xff1a compile xff1a 编译 clean xff1a 清理 test xff1a 测试 pac
  • docker之apt-get update解决方法

    问题 使用docker生成容器后 xff0c 进入容器后 xff0c 提供的指令很少 xff0c 使用apt get组件进行扩展 xff0c 但是会遇到apt get update有时会失败的问题 参考 创建好docker后不能apt ge
  • Nvidia xavier NX通过flash.sh烧录linux系统

    1 环境搭建 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统 安装的 Ubuntu 系统版本为 18 04 LTS xff0c 自行安装即可 xff0c 参考官方文档 xff1a Flashing Sup
  • ubuntu安装ssh以及开启root用户ssh登录

    一般Ubuntu都会默认安装openssh client 但是没有安装openssh server 一 安装ssh sudo apt install openssh client sudo apt install openssh serve
  • HJ28 素数伴侣(二分图最大匹配)

    https www nowcoder com practice b9eae162e02f4f928eac37d7699b352e tpId 61 37 amp amp tqId 61 21251 amp rp 61 1 amp ru 61
  • 【C++】Eigen介绍与使用 —— 4

    一 Eigen介绍 Eigen是可以用来进行线性代数 矩阵 向量操作等运算的C 43 43 库 xff0c 它里面包含了很多算法 它的License是MPL2 它支持多平台 Eigen采用源码的方式提供给用户使用 xff0c 在使用时只需要
  • Prometheus 入门与实践

    随着容器技术的迅速发展 xff0c Kubernetes 已然成为大家追捧的容器集群管理系统 Prometheus 作为生态圈 Cloud Native Computing Foundation xff08 简称 xff1a CNCF xf
  • 找工作笔试面试那些事儿(1)---C,C++基础和编程风格(1)

    作者 xff1a 寒小阳 时间 xff1a 2013年8月 出处 xff1a http blog csdn net han xiaoyang article details 10473845 声明 xff1a 版权所有 xff0c 转载请注
  • Latex正文中插入罗马数字

    1 问题描述 在用latex写论文的时候 xff0c 有的时候需要在正文里面插入罗马数字 2 解决方法 目前找到一种还算方便的解决办法 xff0c 在正文中插入如下代码 xff1a newcommand RNum 1 uppercase e
  • Opencv error unspecified error incorrect element name operator <<

    1 问题描述 今天在用opencv的FileStorage类进行xml文件读写操作的时候报了个错 源代码如下所示 xff1a include lt opencv2 opencv hpp gt include lt vector gt inc
  • PCA(主成成分分析)和LDA(线性判别分析)详解-共性和区别

    注 xff1a 这里说的LDA实际上讲的是Fisher linear discriminant analysis 在machine learning领域 xff0c PCA和LDA都可以看成是数据降维的一种方式 但是PCA是unsuperv
  • 【嵌入式】按键控制 LED

    嵌入式 按键控制 LED 1 操作内容 2 原理解释 2 1 实验箱按键电路 2 2 实验箱LED电路 2 3 寄存器说明 3 操作步骤 3 1 编写键控制 3 2 安装 USB 驱动 3 2 使用 DNW 软件下载裸机程序至 SRAM 中
  • Latex转word

    1 问题描述 最近做毕设的时候本来论文都已经在latex里面写好了 xff0c 但是学院要求用word格式 不想把自己latex写好的公式再打一遍 xff0c 而且word写公式很麻烦 xff0c 有的latex里面的符号word自带的公式
  • ubuntu系统备份与恢复-remastersys方法

    对于刚入门ubuntu的人来说 xff0c 配置各种各样环境的过程中往往会把系统装崩溃 每次都重新安装ubuntu看起来非常麻烦 xff0c 一个好的办法就是把我们某个阶段配置好环境的ubuntu做个备份 xff0c 然后万一系统崩溃了 x
  • 论文阅读-《Semantic Segmentation with Reverse Attention》

    BMVC 2017 oral code https drive google com drive folders 0By2w A aM8Rzbllnc3JCQjhHYnM 1 Motivation 作者这篇文章的主要目的是为了提高seman
  • python numpy中axis的含义

    不同的编程语言对于多维数组的索引方式往往不太一样 xff0c 下面主要讲一下python numpy里面axis的含义 numpy当中axis的值表示的是这个多维数组维度的下标 xff0c 比如有一个二维数组a xff0c a的shape是
  • Deep Watershed Transform for Instance Segmentation

    Min Bai amp Raquel Urtasun UfT 1 传统的分水岭算法简介 图像处理中的分水岭算法常用来做图像区域分割 segmentation xff0c 基本的思路是计算一张energy map来表示图像 xff0c 其中物