Brief Introduction
关于EC-Net 网络的实现,以及相关技术,解决的问题,以及为解决的问题
论文链接:Lequan Yu EC-Net: an Edge-aware ECCV 2018 paper
视频链接:GAMES Webinar 120期李贤芝(关于PU-Net,EC-Net 和 PU-GAN)
Detail
这个EC-Net是在基础上提出来的改进网络,目的是为了解决PU-Net在规则物体点云上采样上无法检测边缘,导致物体棱角不平滑,呈现出不规则起伏的缺点。因此,李贤芝她们在这个网络的基础上,加上了一些额外的部分,并且在训练数据上进行了改进,使得网络不仅具有上采样的能力,还可以在这个过程中将规则物体表面上缺失的边缘点进行补充,使得在三维重建的时候可以得到更好的边缘效果,以及更好的表面。
Point Consolidation 是一个对于增强3D重建最终输出的质量来说非常重要的一个过程,可以提高点云表面点集包含的信息量,也就是说,通过point conoslidation我们可以得到一个更加rich的表面,这样有助于我们生成一个具有更多sharp features的重建结果。
EC-Net是在PU-Net的基础上进行的改进,在网络设计上类似,但在特征提取方面都是采用和PU-Net相同的方式来进行提取的,不同的地方在于:
- 训练数据的准备(Training Data Preparation)
- 点的拟合方法(Point Regression)
- 损失函数的设计
网络的架构如下:
Figure.1 EC-Net 网络架构图
Training Data Preparation
使用Virtual Scan来产生训练数据,可以产生类似real scan的线状的点云效果,这是使用随机降采样的方式来得到训练数据所不能做到的,可以更加贴合实际应用的upsampling,如下图是论文给出的一个Virtual Scan 产生的一个瓶子,可以明显地看到线状的点的分布:
Figure.2 Virtual Scan 方法得到的矿泉水瓶
具体的方法是:
- 采用多个摄像机,来得到point cloud的depth map
- 然后在depth map上面加噪音
- back projection 回原来的 point cloud
最终得到论文所使用的训练数据集
Point Regression
EC-Net 采用了不同于PU-Net的点的拟合方式,不是直接将得到的feature去到全连接层中来拟合出上采样之后得到的点的坐标,而是通过这些特征来得到相对于原来点云位置的扰动,论文中称为residual coordinate,然后将得到的扰动加到原来的坐标(复制了r份,因为是上采样来得到的)。作者提到,比其直接拟合出点的坐标来说,拟合出相对于原来位置的扰动更加简单。
Loss Function Design
损失函数的设计上,保留了原来的reconstruction loss,在这里称为 surface loss,即保持了对点的约束,使得最后拟合出来的坐标保持在原来的表面上;另外一个是repulsion loss,惩罚那些堆积在一起的点,保证上采样得到的点云尽可能的均匀。
此外,为了实现edge-aware的效果,EC-Net增加了几个和边缘检测相关的损失函数:
- edge distance regression loss
- edge loss
作者在视频中在回答提问的时候有讲到,Edge-aware 的目的事实上就是为了解决一些点云数据中边缘相关的点距离边缘距离过大,导致三维重建的结果缺乏一些sharp feature,也就是一些边缘相关的特征这样的问题,因此设计损失函数的目标就是希望将这些表面中分布原理边缘的点push到边缘上,来拟合出边缘相关的点,使得重建后的结果具备一些sharp feature,这就是上面两个损失函数所要做的工作。
下面是两个损失函数具体的方程,第一个是 edge distance regression loss:
L
r
e
g
r
=
1
N
~
∑
1
≤
i
≤
N
~
[
Γ
b
(
d
E
2
(
x
i
,
E
)
)
−
Γ
b
(
d
i
)
]
L_{regr}=\frac{1}{\tilde N}\sum_{1\le i \le\tilde N}\left[ \varGamma_{b}(d_{E}^{2}(x_{i}, E))-\varGamma_{b}(d_{i})\right]
Lregr=N~11≤i≤N~∑[Γb(dE2(xi,E))−Γb(di)]
其中,
Γ
b
(
x
)
=
max
(
0
,
m
i
n
(
x
,
b
)
)
\varGamma_{b}(x)=\max(0,min(x,b))
Γb(x)=max(0,min(x,b)),这个损失将会引导网络来得到surface上面的点到边缘的距离,判断这个距离是否小于设定好的阈值,如果小于阈值的话,则认为这个点是属于边缘的点,然后再通过下面这个 edge loss 损失函数,来鼓励这些点向边缘位置靠近:
L
e
d
g
e
=
1
N
~
e
d
g
e
∑
1
≤
i
≤
N
~
e
d
g
e
d
E
2
(
x
i
,
E
)
L_{edge}=\frac{1}{\tilde N_{edge}}\sum_{1\le i\le \tilde N_{edge}}d^{2}_{E}(x_{i},E)
Ledge=N~edge11≤i≤N~edge∑dE2(xi,E)
其中,
N
~
e
d
g
e
\tilde N_{edge}
N~edge 是边缘上的点的个数。
Result
Figure.3 论文中给出的上采样结果
(当然,这些都是较好的结果,事实上在一些数据上会有一些
Contribution
第一个利用 deep net 实现具有 edge-aware 的点云上采样的方法
Consideration
这些阈值以及边缘事实上都是事先在点云上面手工标注好的,因此在训练的时候事实上还是采用PU-Net 中按patch 的方法来进行训练的。而这也是这两个网络所存在的缺点,这两个网络面对较为大型的点云数据来说是无能为力的,一方面需要手工标注的数据过大,另外一方面,与此同时的训练时间也过长,因此这两个网络都不适合应用于大型的点云数据的上采样。这是讲者点出的问题。