帧场是一个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)。
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的不同性质:
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)∣其中:
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的学习框架如下图所示:
生成frame field的网络如下图:
从frame field多边形化的方法来自Active Contour Model(ACM)。优化过程如下图所示(下图以一个局部小区域为例进行演示):
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为多边形的建筑物注释,而不是栅格化的注释。数据集包括: