Frame field
帧场是一个4向量构成的元组,它为平面的每个点分配四个向量。在帧场中,前两个向量被约束为与另外两个相反的向量,即,每个点被分配一组向量 ( u , − u , v , − v ) (u,−u,v,−v) (u,−u,v,−v)。对于图像中的每一点,我们考虑将帧定义为代表两个方向的两个复数 u , v ∈ C u,v\in C u,v∈C。我们需要两个方向(而不仅仅是一个方向),因为建筑与有机形状(organic shapes)不同,建筑物是具有锐角的规则结构,在这些锐角上捕捉方向需要两个方位(沿着建筑边缘,至少有一个场方向与多边形切线方向对齐。在多边形拐角处,场与两个切线方向对齐,远离多边形边界的区域,框不具有任何对齐约束,但鼓励平滑且不塌陷的场)。为了对方向变化不可知的方式对方向进行编码,我们将frame field表示为以下多项式系数: f ( z ) = ( z 2 − u 2 ) ( z 2 − v 2 ) = z 4 + c 2 z 2 + c 0 f(z)=(z^{2}-u^{2})(z^{2}-v^{2})=z^{4}+c_{2}z^{2}+c_{0} f(z)=(z2−u2)(z2−v2)=z4+c2z2+c0我们用 f ( z ; c 0 , c 1 ) f(z;c_{0},c_{1}) f(z;c0,c1)表示上述式子,给定 ( c 0 , c 1 ) (c_{0},c_{1}) (c0,c1),我们可以获得定义frame的方向: c 0 = u 2 v 2 , c 1 = − ( u 2 + v 2 ) c_{0}=u^{2}v^{2},c_{1}=-(u^{2}+v^{2}) c0=u2v2,c1=−(u2+v2) u 2 = − 1 2 ( c 1 + c 1 2 − 4 c 0 ) , v 2 = − 1 2 ( c 1 − c 1 2 − 4 c 0 ) u^{2}=-\frac{1}{2}(c_{1}+\sqrt{c_{1}^{2}-4c_{0}}),v^{2}=-\frac{1}{2}(c_{1}-\sqrt{c_{1}^{2}-4c_{0}}) u2=−21(c1+c12−4c0),v2=−21(c1−c12−4c0)我们使用神经网络来学习每个像素的场,即每个像素上的 ( u , v ) (u,v) (u,v)。
Frame field learning
backbone网络将 3 × H × W 3\times H\times W 3×H×W的图像 I I I作为输入,输出像素分类特征图和frame field。像素分类特征图包含两个通道, y ^ i n t \widehat{y}_{int} y int对应于建筑物的内部(interiors), y ^ e d g e \widehat{y}_{edge} y edge对应建筑物的边缘(boundaries)。frame field包含4个通道,分别对应两个复数 c ^ 0 , c ^ 1 ∈ C \widehat{c}_{0},\widehat{c}_{1}\in C c 0,c 1∈C。
Segmentation loss
我们的方法可以使用任何深度分割模型作为主干;在我们的实验中,我们使用了U-Net和DeepLabV3架构。通过主干输出
F
F
F维特征图
y
^
b
a
c
k
b
o
n
e
∈
R
F
×
H
×
W
\widehat{y}_{backbone}\in R^{F×H×W}
y
backbone∈RF×H×W。对于分割任务,我们在主干上附加了一个全卷积块(以
y
^
b
a
c
k
b
o
n
e
\widehat{y}_{backbone}
y
backbone为输入),由3×3卷积层、批量归一化层、ELU非线性、另一个3×3的卷积和sigmoid非线性组成。分割头输出分割图
y
^
s
e
g
∈
R
2
×
H
×
W
\widehat{y}_{seg}\in R^{2\times H\times W}
y
seg∈R2×H×W,第一个通道包含对象内部分割图
y
^
i
n
t
\widehat{y}_{int}
y
int,第二个通道包含对象边缘分割图
y
^
e
d
g
e
\widehat{y}_{edge}
y
edge。训练是有监督的,每个输入图像都被标记了
y
i
n
t
y_{int}
yint和
y
e
d
g
e
y_{edge}
yedge,分别对应于栅格化(也是计算机图形学中的光栅化)多边形的内部和边缘。然后,我们将交叉熵loss和 dice loss 的线性组合应用于建筑物内部输出的损失
L
i
n
t
L_{int}
Lint以及应用于轮廓(边缘)输出的损失
L
e
d
g
e
L_{edge}
Ledge。
Frame field loss
除了分割输出,我们的网络还输出frame field。我们通过由3×3卷积层、批量归一化层、ELU非线性、另一个3×3的卷积和tanh非线性组成的全卷积块将另一个解码头附加到主干。frame field block输入为backbone输出的特征和分割分支输出的concat:
[
y
^
b
a
c
k
b
o
n
e
,
y
^
s
e
g
]
∈
R
(
F
+
2
)
×
H
×
W
[\widehat{y}_{backbone},\widehat{y}_{seg}]\in R^{(F+2)\times H\times W}
[y
backbone,y
seg]∈R(F+2)×H×W,输出为
c
^
0
,
c
^
2
∈
C
4
×
H
×
W
\widehat{c}_{0},\widehat{c}_{2}\in C^{4\times H\times W}
c
0,c
2∈C4×H×W。相应的GT是每个像素上的角度
θ
τ
∈
[
0
,
π
)
\theta_{\tau}\in[0,\pi)
θτ∈[0,π)(多边形轮廓的无符号切线向量)。我们使用3种损失训练frame field:
L
a
l
i
g
n
=
1
H
W
∑
x
∈
I
y
e
d
g
e
(
x
)
∣
f
(
e
i
θ
τ
;
c
^
0
(
x
)
,
c
^
1
(
x
)
)
∣
2
L_{align}=\frac{1}{HW}\sum_{x\in I}y_{edge}(x)|f(e^{i\theta_{\tau}};\widehat{c}_{0}(x),\widehat{c}_{1}(x))|^{2}
Lalign=HW1x∈I∑yedge(x)∣f(eiθτ;c
0(x),c
1(x))∣2
L
a
l
i
g
n
90
=
1
H
W
∑
x
∈
I
y
e
d
g
e
(
x
)
∣
f
(
e
i
θ
τ
90
;
c
^
0
(
x
)
,
c
^
1
(
x
)
)
∣
2
L_{align90}=\frac{1}{HW}\sum_{x\in I}y_{edge}(x)|f(e^{i\theta_{\tau90}};\widehat{c}_{0}(x),\widehat{c}_{1}(x))|^{2}
Lalign90=HW1x∈I∑yedge(x)∣f(eiθτ90;c
0(x),c
1(x))∣2
L
s
m
o
o
t
h
=
1
H
W
∑
x
∈
I
(
∣
∣
∇
c
^
0
(
x
)
∣
∣
2
+
∣
∣
∇
c
^
1
(
x
)
∣
∣
2
)
L_{smooth}=\frac{1}{HW}\sum_{x\in I}(||\nabla\widehat{c}_{0}(x)||^{2}+||\nabla\widehat{c}_{1}(x)||^{2})
Lsmooth=HW1x∈I∑(∣∣∇c
0(x)∣∣2+∣∣∇c
1(x)∣∣2)其中,
θ
τ
\theta_{\tau}
θτ是
τ
\tau
τ(
τ
=
∣
∣
τ
∣
∣
2
e
i
θ
τ
\tau=||\tau||_{2}e^{i\theta_{\tau}}
τ=∣∣τ∣∣2eiθτ)的方向,
τ
90
=
τ
−
π
2
\tau90=\tau-\frac{\pi}{2}
τ90=τ−2π。每种损失衡量的是frame field的不同性质:
- L a l i g n L_{align} Lalign 强制frame field与切线方向对齐。当多项式 f ( ⋅ ; c ^ 0 , c ^ 1 ) f(\cdot;\widehat{c}_{0},\widehat{c}_{1}) f(⋅;c 0,c 1)在 e i θ t a u e^{i\theta_{tau}} eiθtau附近有根时,该项很小,这意味着其中一个frame的方向(可能是 ( u , − v ) (u,-v) (u,−v),属于 ( ± u , ± v ) (\pm u,\pm v) (±u,±v))与切线方向 τ \tau τ对齐。
- L a l i g n 90 L_{align90} Lalign90鼓励frame与切线方向 τ \tau τ的法线方向对齐,可以防止frame塌陷成一条线。
- L s m o o t h L_{smooth} Lsmooth是测量作为图像中位置 x x x的函数 c ^ 0 ( x ) \widehat{c}_{0}(x) c 0(x)和 c ^ 1 ( x ) \widehat{c}_{1}(x) c 1(x)平滑度的Dirichlet能量。平滑变化的函数 c ^ 0 ( x ) \widehat{c}_{0}(x) c 0(x)和 c ^ 1 ( x ) \widehat{c}_{1}(x) c 1(x)可以生成平滑的frame field。
Output coupling loss
我们增加耦合损失,确保网络输出之间的一致性:
L
i
n
t
a
l
i
g
n
=
1
H
W
∑
x
∈
I
f
(
∇
y
^
i
n
t
(
x
)
;
c
^
0
(
x
)
,
c
^
1
(
x
)
)
2
L_{intalign}=\frac{1}{HW}\sum_{x\in I}f(\nabla\widehat{y}_{int}(x);\widehat{c}_{0}(x),\widehat{c}_{1}(x))^{2}
Lintalign=HW1x∈I∑f(∇y
int(x);c
0(x),c
1(x))2
L
e
d
g
e
a
l
i
g
n
=
1
H
W
∑
x
∈
I
f
(
∇
y
^
e
d
g
e
(
x
)
;
c
^
0
(
x
)
,
c
^
1
(
x
)
)
2
L_{edgealign}=\frac{1}{HW}\sum_{x\in I}f(\nabla\widehat{y}_{edge}(x);\widehat{c}_{0}(x),\widehat{c}_{1}(x))^{2}
Ledgealign=HW1x∈I∑f(∇y
edge(x);c
0(x),c
1(x))2
L
i
n
t
e
d
g
e
=
1
H
W
∑
x
∈
I
m
a
x
(
1
−
y
^
i
n
t
(
x
)
,
∣
∣
∇
y
^
i
n
t
(
x
)
∣
∣
2
)
⋅
∣
∣
∣
∇
y
^
i
n
t
(
x
)
∣
∣
2
−
y
^
e
d
g
e
(
x
)
∣
L_{intedge}=\frac{1}{HW}\sum_{x\in I}max(1-\widehat{y}_{int}(x),||\nabla\widehat{y}_{int}(x)||_{2})\cdot|||\nabla\widehat{y}_{int}(x)||_{2}-\widehat{y}_{edge}(x)|
Lintedge=HW1x∈I∑max(1−y
int(x),∣∣∇y
int(x)∣∣2)⋅∣∣∣∇y
int(x)∣∣2−y
edge(x)∣其中:
- L i n t a l i g n L_{intalign} Lintalign将预测的建筑物内部 y ^ i n t \widehat{y}_{int} y int的空间梯度与frame field对齐;
- L e d g e a l i g n L_{edgealign} Ledgealign将预测边缘 y ^ e d g e \widehat{y}_{edge} y edge的空间梯度与frame field对齐;
- L i n t e d g e L_{intedge} Lintedge将 m a x ( 1 − y ^ i n t ( x ) , ∣ ∣ ∇ y ^ i n t ( x ) ∣ ∣ 2 ) max(1-\widehat{y}_{int}(x),||\nabla\widehat{y}_{int}(x)||_{2}) max(1−y int(x),∣∣∇y int(x)∣∣2)作为系数,当两项都为0时,损失为0,当 x x x在建筑物外部(此时 ( 1 − y ^ i n t ( x ) ) (1-\widehat{y}_{int}(x)) (1−y int(x))较大)或者边缘(此时 ∣ ∣ ∇ y ^ i n t ( x ) ∣ ∣ 2 ||\nabla\widehat{y}_{int}(x)||_{2} ∣∣∇y int(x)∣∣2较大),都会有损失,最后的优化目标就是房屋内部梯度平整为0,其他地方梯度要等于边界的概率map(边界为1,其他为0)。这样按建筑物内外和边界来考虑,因此能够检测到建筑物的共用边。
Final loss
由于损失(
L
i
n
t
L_{int}
Lint、
L
e
d
g
e
L_{edge}
Ledge、
L
a
l
i
g
n
L_{align}
Lalign、
L
a
l
i
g
n
90
L_{align90}
Lalign90、
L
s
m
o
o
t
h
L_{smooth}
Lsmooth、
L
i
n
t
−
a
l
i
g
n
L_{int-align}
Lint−align、
L
e
d
g
e
s
−
a
l
i
g
n
L_{edges-align}
Ledges−align和
L
i
n
t
−
e
d
g
e
L_{int-edge}
Lint−edge)具有不同的单位(数值范围),我们通过使用随机初始化网络在训练数据集的随机子集上平均其值来计算每个损失的归一化系数。换言之,在线性组合之前,通过该系数对各项loss进行归一化。
Frame field的学习框架如下图所示:
- 给定一个输入图像,模型输出边缘mask、内部mask和帧场。loss将掩码和场与GT对齐,并增强帧场的平滑度,同时确保输出之间的一致性。
生成frame field的网络如下图:
- 生成frame field的网络架构的详细信息。
Frame field的多边形化
从frame field多边形化的方法来自Active Contour Model(ACM)。优化过程如下图所示(下图以一个局部小区域为例进行演示):
- 给定建筑物内部分类图和帧场作为输入,使用活动骨架模型(ASM,Active Skeleton Model)优化轮廓以与帧场对齐,并使用帧场检测角点(corner),简化非角点(non-corner)。
ACM由给定的轮廓进行初始化,并且需要最小化能量函数 E c o n t o u r ∗ E_{contour}^{*} Econtour∗,该函数用于将轮廓点移向最佳位置。通常,该能量函数由一个用于将轮廓拟合到图像的项和限制拉伸或曲率量的附加项组成。通过梯度下降进行优化。总的来说,ACM非常适合在GPU上并行执行,并且可以使用深度学习框架中包含的自动求导模块来执行优化。我们对ACM进行了调整,以便在骨架图(skeleton graph)而不是轮廓(contour)上执行优化,从而给出了活动骨架模型(ASM)。
我们将skeleton graph定义为:对 y ^ e d g e \widehat{y}_{edge} y edge进行简化得到连通像素的graph表示
实验
数据集
实验需要GT为多边形的建筑物注释,而不是栅格化的注释。数据集包括:
- CrowdAI:341438幅尺寸为300×300像素的航空图像,带有相关的ground truth多边形注释。
- Inria Aerial Image Labeling dataset :360幅尺寸为5000×5000像素的航空图像。代表了10个城市,使其比CrowdAI数据集更加多样化。然而,GT是光栅化的二元掩模的形式。我们通过使用多边形化方法将原始GT二元掩码转换为多边形注释来创建Inria Polygonized dataset。
实验结果
- CrowdAI测试图像上的建筑物提取结果。建筑从左到右变得更加复杂。
- 上:U-Net变体+ASIP(后处理方法);
- 中:PolyMapper;
- 下:我们的方法,即UResNet101+frame field多边形化。