【论文笔记】DSAC:Learning deep structured active contours end-to-end

论文:Learning deep structured active contours end-to-end,CVPR 2018
代码:https://github.com/dmarcosg/DSAC


概览

主要工作:

  • 将 ACM 能量函数的计算看作是结构化的预测问题
  • 构造能量的函数里包含了 ACM 的 ballon term
  • 将 CNNs 的表现性和 ACMs 的活动性结合到统一的框架中,叫做 Deep Structured Active Contours(DSAC)
  • 提出 end-to-end 解决方案,可以学习 guiding features 和 local priors

语义分割问题的套路是 dense prediction,即对每一个像素点都预测其标签类别,最后得出分割结果。这种分割方法优点是可以提供全局数据信息,比如分割目标的面积(只要看有多少像素点属于该目标);缺点是缺少实例级的预测。

CNN 做建筑物分割任务时,通常有较高的检测率,但在空间覆盖和几何正确性方面表现不好。

为什么?

Q:ACM(snakes)能解决分割的什么问题?

ACM 提出具有 高级几何约束 和 先验知识 的 自下而上 的 boundary detector

Q高级几何约束是什么?

Q先验知识?

ACM 原理:将可能的输出曲线约束为一组曲线(比如一个闭合的曲线,曲线上有固定数量的点),然后通过最小化能量函数优化这条曲线,最小化能量函数的依据就是图像特征和分割目标的形状先验知识,比如说边界的连续性和平滑性

提出一些术语

balloon term:提出论文:On Active Contour Models and Balloons
模仿气球,能够持续将曲线的顶点向外推,阻止曲线坍缩成一个点

将物体检测问题看作是带有先验知识的 polygon fitting 问题,可以精确预测物体边界,而不需要后处理

原始的公式缺少灵活性,因为其依赖于低级图像特征和先验的全局参数

一种解决方法是增大对直线/光滑部分曲率的惩罚,减少在更可能成为拐角处的曲率的惩罚

balloon term 作为一种 post-energy global minimization force,并不参与 snake 的能量最小化

本文提出将 CNNs 的表现性和 ACMs 的活动性结合到统一的框架中,叫做 Deep Structured Active Contours(DSAC),使用 CNN 学习能量函数,

能量函数让 ACM 能够产生一个和 ground truth 很接近的曲线

DSAC 通过学习高级图像特征和先验知识参数(包括 balloon term),改变初始的 ACM 公式
比如:在图像中的每个像素位置上,给予不同的惩罚

将 ACM 的优化问题看作是一个结构预测问题,利用 SSVM(Structured Support Vector Machine)Loss 找到最优特征和参数

因此,DSAC 可以进行端到端的培训,并且能够学习和适应特定的对象实例系列。

DSAC 使用高级别的几何信息作为 CNN 的输入,来弥补上面的不足(???)

像素级的 CNN,不像 polygonal output model 那样容易直接集成输出形状优先级

DSAC 通过加入局部先验信息(加权 snake 基于每个像素点的能量函数项),改进原始公式。

虽然这项工作的重点是曲率优先用于分割多边形形状的物体,其他的先验可以用ACMs来实现,例如生物医学成像的凸性[23]。

使用结构化损失作为 CNN 的学习信号,使它学会协调不同的 ACM 能量项,这些项是高度相互依赖的。

概念:
ACM(Snakes):Snakes: Active Contour Models

balloon term:On Active Contour Models and Balloons

SSVM(Structured Support Vector Machine):Support Vector Machine Learning for Interdependent and Structured Output Spaces

Large margin methods for structured and interdependent output variables

humans in the loop:《Semiautomated building footprint extraction from orthophotos》

polygonal shape prior:
已证明多角形先验能够提升基于彩色图像和低级特征的分割效果


5. 方法细节

给出了一种改进的,基于图像的局部惩罚项 的 ACM 推理算法,以及用于训练 CNN 生成这些惩罚映射的 结构化损失
在这里插入图片描述

DSAC 训练思想:CNN 预测能量项的值(包括 α\alphaβ\betakkDD),然后 ACM 使用 CNN 预测的这些值来生成一个预测的 polygon,计算它的结构化损失并输入回 CNN,这样就实现了参数能够通过反向传播进行更新。

CNN 用于预测 ACM 能量项的值,包括:

  • length penalization:全局的长度惩罚项 α\alpha,控制 polygons 的长度
  • data term:数据项 DD,也可以说是局部映射
  • curvature penalization:曲率惩罚 β\beta,控制 polygons 的曲率
  • ballon term kk

DSAC 训练算法:

在每一次迭代过程中,CNN forward pass 后跟着 ACM inference,ACM inference 会预测一个 countour,用于计算 structured loss,然后 loss 送回 CNN 进行反向传播更新参数,再进行下一次迭代。
在这里插入图片描述

  • XXYY 是训练集的原图和其对应的 mask 的集合,xix_iyiy_i 就是这两个集合中的某一对儿训练数据
  • Y0Y^0 是每张训练图像对应的初始的轮廓线

第一次迭代时,初始化参数 DDα\alphaβ\betakk,将这些参数和初始的轮廓线 yi0y^0_i 送入 ACM,ACM 得出计算结果 y^i\hat y_i,即新的轮廓线【对应循环内 1、2 步】

然后根据 ACM 得出的轮廓线 y^i\hat y^i 和训练集中对应的 mask yiy_i 计算微分【对应循环内第 3 步】

最后通过反向传播更新 CNN 的权重参数 ω\omega【对应循环内 4、5 步】

从第二次迭代开始,参数 DDα\alphaβ\betakk 由上一轮迭代更新后的 CNN 计算而来。

结构性损失(structured loss)由 ACM 计算出的轮廓线计算得来。

5.1 Locally penalized active contours

active contour 表示为一条轮廓曲线:polygon y=(u,v)y = (u,v),进一步,当在这条轮廓曲线上取 LL 个离散的点时,又可以表示为有 LL 个节点的 polygon ys=(us,vs)R2y_s = (u_s, v_s) \in R^2,其中 s1...Ls \in 1...L,每个 ss 就表示离散轮廓上的节点。

经过变形,使能量函数最小化:
在这里插入图片描述
最小化能量函数其实就是在一个 “给定的 countour 状态” 下,最小化各个参数。

其中:

  • D(x)RU×VD(x) \in R^{U \times V} 是数据项,取决于尺寸为 U×VU \times V 的输入图像,xRU×V×dx \in R^{U \times V \times d}
  • α(x)\alpha(x)β(x)\beta(x) 分别鼓励 polygon 趋于 short 和 smooth,且 α(x),β(x)RU×V\alpha(x),\beta(x) \in R^{U \times V}
  • k(x)k(x) 为 balloon term
  • Ω(y)\Omega(y) 是由 polygon yy 围成的区域
  • D(x,(ys))D(x,(y_s)) 表示在曲线 ys=(us,vs)y_s = (u_s,v_s) 位置处的 D(x)D(x)

考虑到局部性,DDβ\betakk 均为 U×VU \times V 大小的矩阵,α\alpha 为一个标量

1.1 Data term

数据项定义了 polygon nodes “应该” 在的区域

通常数据项 D(x)D(x) 是预定义的函数,一般和图像的梯度有关

理想的状况下,CNN 得出的 D(x)D(x) 应该为分割目标的边界提供相对较低的数值,而为其他区域提供相对较高的数值。

在 ACM inference 过程中,最陡的方向作为 data force term,让 contour 向着 D 比较低的方向移动。

data force term:在这里插入图片描述

1.2 Internal terms

通常来说 α\alphaβ\beta 都是单个标量,意思就是对所有地方的惩罚强度都是一样的。(但这篇文章不是这样!这里对惩罚曲率的参数 β\beta 进行了改进)

直观想一下,如果各个点对曲率的惩罚都使用同一个参数,假如有一点是 over-smoothing 的,参数会倾向于减小,来降低 smoothing 的程度;但若同时又有一个点是 under-smoothing 的,参数又倾向于增大,来加强 smoothing 的程度。
那么这时,参数左右为难,就会进行 trade-off,即 “折中处理“,因为大家都很难满足,所有干脆既不 smooth,也不 sharp 了,这样其实谁也满足不了。

而惩罚长度的参数 α\alpha 就不像惩罚曲率的参数 β\beta 那么重要,所以 α\alpha 仍然延用了通常的标量。

DSAC 对 β\beta 的改进是避免 trade-off,对每个 pixel 都分配不同的 β\beta 惩罚
后面这句话不太理解:
depending on which part of the object lies underneath

(下面不是很理解 ???)
内能 EintE_{int} 定义:
Eint=α(x,(ys))y2+β(x,(ys))y2 E_{int} = \alpha(x,(y_s))|y'|^2 + \beta(x,(y_s))|y''|^2
内能也是能量的一种,目标是最小化内能,

内能 EintE_{int} 惩罚 polygon 的长度和曲率,为了获得梯度下降最快的方向,可以将内能表示为有限差分函数:
在这里插入图片描述
计算内能 EintE_{int} 的导数,
在这里插入图片描述
Jacobian 矩阵可以表示为矩阵乘法:
在这里插入图片描述
A(α)A(\alpha) 为三对角矩阵,B(β)B(\beta) 为五对角矩阵

1.3 Balloon term

初始的 balloon term 在 contour 节点的法线方向上添加相等的力,从而使 contour 扩张。

效仿 β\beta,为了增加灵活性,故在不同节点上设置不同大小的力,这样就能针对性地处理不同节点。

在之前的工作中(《On active contour models and balloons》),将 balloon term 看作是固定的力,也就是计算其他能量项最陡的下降方向后,直接把 balloon term 加在后面。而在 DSAC 里,SSVM 将 balloon term 也作为能量项之一。

contour 上 ysy_s 处的法线方向:
在这里插入图片描述
整组法线向量表示为:
在这里插入图片描述
其中 CC 为三对角矩阵,主对角线上是 0,对角线上方为 1,下方为 -1

将这个表达式与 uuvv 相结合,得到了对应于轮廓内部面积的标量 EbE_b
在这里插入图片描述

提出最大化由 Ω(y)\Omega(y) 所围成的面积

在满足 kk 的条件下,离散化 ? 到每个像素值上
在这里插入图片描述

修改之后,需要找到 L×2L \times 2 大小的 Jacobian matrix ,对 force form 进行重新计算。

对应了 usu_svsv_s 会如何影响 EkE_k

当影响很小时,就假定 k(u,v)k(u,v)[ys,ys+1][y_s,y_{s+1}][ys1,ys][y_{s-1}, y_s] 方向上的分布分别与 [ys+Δy,ys+1][y_s + \Delta y, y_{s+1}][ys1,ys+Δy][y_{s-1}, y_s + \Delta y] 相同

这可以归结为对一系列梯形区域的求和,形成了两个所描绘的三角形,每个三角形都是按其赋值加权的。
在这里插入图片描述
ysy_suuvv 方向的扰动会导致两个阴影区域的改变

在图 a)中,上下两个三角形有相同的长度 Δus\Delta u_s,而高度分别为 vs1vsv_{s-1} - v_svs+1vsv_{s+1} - v_s

在图 b)中,上下两个三角形有相同的长度 Δvs\Delta v_s,而高度分别为 us1usu_{s-1} - u_sus+1usu_{s+1} - u_s

获得 a)中 kk 的加权区域:
在这里插入图片描述
需要推出的 force term 为:
在这里插入图片描述

要获得 b)中 kk 的加权区域,只需要将 a)中的 uuvv 互换一下即可。

These derivatives point in the normal direction when the values of k are equal in all locations.

3.2 Active contour

在 active contour 问题里,能量函数 E(y,x)E(y,x) 包含四个部分:在这里插入图片描述
这四个部分是 external terms EextE_{ext}、data (D)(D)、balloon energies (Ek)(E_k) 以及 internal terms EintE_{int}

其中 EintE_{int} 是关于 length (α)(\alpha) 和 curvature (β)(\beta) 的能量

由于 EintE_{int} 仅仅与轮廓 yy 有关,定义新的更新规则:
在这里插入图片描述
在每个新的时间步最小化 EintE_{int}

yt+1y^{t+1} 解上面的表达式,得到:
在这里插入图片描述
其中,II 为单位矩阵

论文中使用 TensorFlow Graph 实现了描述的局部惩罚 ACM。对于本文所使用的设置,在单个CPU上,推理时间小于50 ms。

3.3 Structured SVM loss

由于惩罚项没有 ground truth,所以将这个问题看作结构化预测问题

损失增强推理用于生成负实例,来补充 ground truth polygons 的正实例

修改能量项的权重,使 ground truth 对应的能量很小,而使得损失函数增加的被认为是错误的

ground truth pairs Δ(yi,xi)Y×X\Delta(y^i, x^i) \in Y \times Xi=1...Ni = 1 ... N

loss function δ(y,y^)\delta(y, \hat y)

通过优化 Eq.1,找到 CNN 参数 ω\omega,然后就能得到 inference result:
在这里插入图片描述
希望得到的是预测结果 y^i\hat y^i 和真实结果 yiy^i 很小的差异 Δ(yi,y^i)\Delta(y^i, \hat y^i)

所以问题就变成了找到使能量函数 E 最小的 ω\omega
在这里插入图片描述
由于预测值和 ground truth 的差异肯定不是连续的函数,所以用一个连续的曲线来代替,比如 hinge loss

通过对所有训练样本添加 l2l_2 正则并求和,就可以得到一个 max-margin formulation:
在这里插入图片描述
其中 L(Y,X,ω)L(Y, X, \omega) 是凸函数但不可微,所以计算 subgradient,这就需要找到当前 ω\omega 值得最大惩罚约束:
在这里插入图片描述
第一次运行 ACM 时,使用当前的 ω\omega 和与 loss Δ(y,yi)\Delta(y, y^i) 对应的 term

首次获得了预测值 y^i\hat y^i 后,就可以计算 subgradient:
在这里插入图片描述
四个参数的梯度计算如下:
1)数据项
在这里插入图片描述
2)长度惩罚
在这里插入图片描述
3)曲率惩罚
在这里插入图片描述
4)balloon term 惩罚
在这里插入图片描述
其中,[][] 表示 Iverson bracket

最后,我们可以通过链式法则获得 ω\omega 的梯度:在这里插入图片描述
更新 CNN 的参数 ω\omega
在这里插入图片描述
这将同时降低 E(yi,xi,ω)E(y^i, x^i, \omega),升高 E(y^i,xi,ω)E(\hat y^i, x^i, \omega),使下一次 inference 时获得更好的结果。

LOSS:

采用 IoU 度量预测结果 yy 和 ground truth yiy^i,对 IoU 的优化可以分为 ”最大化交集“ 和 ”最小化并集“,

实验部分

使用两种初始化方案:
1)手动初始化:人工在建筑物附近提供一些 clicks
数据集:Vaihingen 和 Bing Huts

2)自动初始化:使用实例分割算法生成一些初始的 polygons
数据集:Toronto City dataset

4.1 CNN结构

CNN 结构模仿《Hypercolumns for object segmentation and fine-grained localization》中的网络结构

网络输入尺寸固定

第一层 7*7 卷积
第二层 5 5
其余层均为 3 3
所有卷积层后接 ReLU、Batch normalization 和 2 2 max-pooling

每一层的卷积核个数:32, 64, 128 ,128, 256,256

每一层的输出都上采样到输出尺寸,并进行 cat

CNN 预测结束后,两层的 MLP(分别由 256 和 64 个隐藏单元)用于预测四个 output map:D(x),α(x),β(x),k(x)D(x), \alpha(x), \beta(x), k(x)

这一结构使用于所有的数据集,唯一例外是 Bing Huts 数据集去掉了最后两个卷积层

优化器:Adam optimizer
学习率:10410^{-4}
数据增强:随机旋转

迭代次数均设置为 50

节点数量:
Vaihingen 和 TorontoCity 设置为 60
Bing Huts 设置为 20

4.2 Manual Initialization

Vaihingen buildings:
训练:100
测试:68

Bing huts:80*80 的图片
训练:335 张
测试:270 张

4.3 Automatic initialization

使用 DWT(Deep Watershed Transform)实例分割算法初始化 active contour,DWT 虽然有不错的 recall,但倾向于欠分割,且靠近目标边缘的地方会丢失细节。

实验结果

在这里插入图片描述

经过消融实验证明,使 balloon term kk 和 曲率惩罚 β\beta 从单个值变为各个局部都不等,效果有明显提升

而将长度惩罚 α\alpha 看作单个标量没有性能的损失

另外,还强调了 balloon term 对于轮廓收敛的重要性

在这里插入图片描述
绿色为 ground truth
蓝色为 初始化分割结果
黄色为 DSAC 得到的分割结果

data term D(x)D(x) 在轮廓上的能量很低,其余区域能量较高

balloon term k(x)k(x) 在目标内部产生正值,尤其是接近拐角处

thin plate term β(x)\beta(x) 在拐角处的惩罚较小

作者自己说,主要局限性是初始化分割结果是通过某种外部方法进行的,因此不包括在学习过程中。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章