markdown
目标
论文理解
论文序列
5)PlaneNet: Piece-wise Planar Reconstruction from a Single RGB Image
目标
图片中的主要平面提取出来。
为什么能够提取到平面?
我们知道人眼能够从图像看到其基本的架构,主要的平面架构也能推导出来,神经网络是模仿人的眼睛推导功能,人的主要是先进行识别图片中的对象,然后对象中的较大的边界,然后再推导出哪些面是平面。但是怎么解释到神经网络上推导的,我暂且没有理解够。只是知道它能推导出三维平面的参数。为什么可以直接能推导?
网络设计的架构
假设能从rgb图像上推导出3D平面的参数,这样遇到的问题就是推导多少个平面,因为不同的图像有不同的平面个数,以及推导的平面的顺序是啥样子的,在网络设计中非常重要,不解决这些问题就设计不了网络。论文中的方法是设计一个网络就是最多有
K
K
K个平面,就是回归到
K
∗
3
K*3
K∗3个参数。同时提取图像中的所有的平面需要对场景的所有信息都要了解,因此需要全局信息,因此需要Global pooling操作,然后直接回归平面的参数。同时对于不同的平面出来的顺序不一样,也不知道平面的顺序。论文的解决办法和点云中的类似,用loss函数的顺序不变性来处理的。平面参数估计的网络如下:
提取出三维的平面,这些平面需要回归到图像上。同时平面具有无限延展性,需要一个区域分割的网络,或者一个标签网络指定这些区域是属于哪个三维平面上。准确来说需要一个网络。这篇论文主要是用了一个判别网络,对图像中的每个像素,判断它的是属于提取平面上的哪个平面。这是一个label网络,论文中用了CRF model 用于标签图像中的像素属于哪个平面。网路架构如下:
因为这个模块是分类模块,对图像中每一个像素进行分类,表明它属于哪个平面。这样就能得到平面分割网络。对于具体实现,以及具体的细节为什么用CRF model等等,因为CRF表示图像的像素属于哪个,用Pyramid pooling这个框架。因为涉及到图片的每一个像素,因此 需要Pyramid操作,它需要拥有高级语义和低级语义信息,这样才能在高级语义的条件下对每一个像素进行分类贴标签,具体是什么操作如下:
pooling形成多层次feature maps(从上到下可以看到它丢失的细节信息越来越少),通过卷积得到feature maps,需要concatenate, 这个操作仅仅是对它进行upsamle 操作得到同样resolution的feature maps,这样才能 concatenate, 然后进行卷积。
得到理解上述的Pyramid Pooling Module这个模块,它的输出用CRF再次处理一次,具体的CRF是怎么操作的以及为啥这样操作?稍微看了一下论文Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials, 它主要的操作输入图片然后对图片进行分割操作和贴标签操作。操作如下:
给一个随机变量
X
X
X 场,它的集合是
X
1
,
.
.
.
,
X
N
{X_1,...,X_N}
X1,...,XN, 对每个变量贴上标签,标签集合是
L
=
l
1
,
l
2
,
.
.
.
,
l
k
L={l_1,l_2,...,l_k}
L=l1,l2,...,lk ,CRF 满足Gibbs 分布
P
(
X
∣
I
)
=
1
Z
(
i
)
e
x
p
(
−
∑
c
∈
C
g
Φ
c
(
X
c
∣
I
)
)
(1)
P(X|I)=\frac{1}{Z(i)}exp(-\sum_{c\in C_g}\Phi_c(X_c|I)) \tag{1}
P(X∣I)=Z(i)1exp(−c∈Cg∑Φc(Xc∣I))(1)
其中
g
=
(
v
,
ξ
)
g=(v,\xi)
g=(v,ξ) 是在变量集合组成的图,其中
c
c
c是簇,表示部分群体。能量函数也就是label函数,
X
∈
L
N
X\in L^N
X∈LN 是
E
(
x
∣
I
)
=
∑
c
∈
C
g
Φ
c
(
X
c
∣
I
)
E(x|I)=\sum_{c\in C_g}\Phi_c(X_c|I)
E(x∣I)=∑c∈CgΦc(Xc∣I) 最大化后验推理。就是对
E
(
x
∣
I
)
E(x|I)
E(x∣I)能量函数的最大化。
x
∗
=
a
r
g
m
a
x
x
∈
L
N
P
(
x
∣
I
)
x*=argmax_{x \in L^N}P(x|I)
x∗=argmaxx∈LNP(x∣I)。
也就是传统的图像分割模型,贴上标签。这只是能量函数优化的那一块,是可以用神经网络来计算的。用于计算这个函数中的各个函数项的权重。具体怎么计算?
Loss 函数设计
设计loss函数,我们之前提到因为平面的顺序具有无序性,需要给一个loss函数,提取的平面具有无序的。一般有sum,或者average 这两种方式,本论文使用了sum,同时也提供了min操作这些都是跟顺序无关的。如下:
L
P
=
∑
i
=
1
K
∗
m
i
n
j
∈
[
1
,
K
]
∣
∣
P
i
∗
−
P
j
∣
∣
2
2
(2)
L^P=\sum_{i=1}^{K^*}min_{j\in [1,K]}||P_i^*-P_j||_2^2 \tag{2}
LP=i=1∑K∗minj∈[1,K]∣∣Pi∗−Pj∣∣22(2)
其中
P
i
∗
P^*_i
Pi∗表示ground-truth 平面参数,同时
P
j
P_j
Pj表示预测的平面参数,其中对于平面参数是指平面上离相机中心最近的坐标?这个没有想通。从这个式子可以看出,当
P
j
P_j
Pj顺序变化是,因为有一个min操作它总是取得i 到任何平面得最小值。
我的想法是为啥平面参数用三个变量?缺少offset这个变量,应该加上offset这个变量。同时这个参数,具有scale 不变性,需要对其进行归一化,或者之前的offset不变会更好。
第二个loss函数是平面分割的分支:
它包括Pyramid pooling和CRF两大模块。
其中他们的loss函数是:
L
M
=
∑
i
=
1
K
+
1
∑
p
∈
I
(
1
(
M
∗
(
p
)
=
i
)
l
o
g
(
1
−
M
i
(
p
)
)
)
(3)
L^M=\sum_{i=1}^{K+1}\sum_{p \in I}(1(M^{*(p)}=i)log(1-M_{i}^{(p)})) \tag{3}
LM=i=1∑K+1p∈I∑(1(M∗(p)=i)log(1−Mi(p)))(3)
其中图像的像素集合是
I
I
I,
M
i
(
p
)
M_i^{(p)}
Mi(p)表示像素
p
p
p属于第
i
t
h
i^{th}
ith平面的概率。其中
M
∗
(
p
)
M^{*(p)}
M∗(p)是ground-truth。可以看出这个是一个label的网络。从而对图像中的对象进行平面提取。
这是整体的网络架构,同时对里面的细节进行理解。
感想
通过对流程的理解,这个模块整体是先获取大平面,把这些平面作为目标,用图像分割获取平面。
1)这个网络中比较直接,segment的网络的输出后,直接简单的用crf进行分割操作,没有用attention这个模块获取segmention。可以变化一下网络,用attention控制feature map的信息流向,并且融入crf,之前的depthmap网络。
2)同时没有用边缘检测进行约束,(只做区域分割)导致出来的结果,边缘极其不够准确,可以看到结果如下:
3)这个网络必须自己设置 K K K个平面,现实世界中比这个复杂很多,平面数量可以自己检测出来。同时这样会丢弃小平面,因为直接pooling操作等等。都严重限制了应用。
4)网络可以用示例分割,获取多个区域等等,这样就不会受到平面的 K K K的限制。
5)平面检测中的参数可以用4个参数表达,不用三个参数。
6)用其它视角的图片进行约束,(怎么做到?)