目的
- 点和邻近点的测地线距离估计。得到这样的估计后,我们求一个点的邻域时,就可以忽略那些欧氏距离很近,但测地线距离很远的点,从而减小误差。
大概过程
测地距离估计
- 得到Ground Truth:对每个点 x i x_i xi求出以 r r r为半径的邻域 B r ( x i ) B_r(x_i) Br(xi),对邻域内的每个点求测地距离。
- Encoder-Decoder部分:特征提取。基于PointNet++,得到每个采样点的特征;再通过插值+FC,得到每个点的 C + 3 C+3 C+3维特征。
- 按不同的半径 r l r_l rl,得到不同的邻域,分别采样 K l K_l Kl个点,因此每个点的邻域特征为 ( N , K l , 3 + C ) (N, K_l, 3+C) (N,Kl,3+C),将此邻域特征输入FC,得到新的邻域特征,维度为 ( N , K l , C ) (N, K_l, C) (N,Kl,C)。和原 C + 3 C+3 C+3维特征broadcast后concatenate,得到 ( N , K l , 2 C + 3 ) (N, K_l, 2C+3) (N,Kl,2C+3)维特征。
- 将特征输入到FC,得到 ( N , K l , 1 ) (N, K_l, 1) (N,Kl,1)的张量,和Ground Truth求L1误差,进行反向传播。
PUF:GeoNet融合上采样(PU-Net)
- 确定好采样点的邻域后,除了直接输入每个点的坐标,也输入它们和采样点之间的测地距离。注意到这里的测地距离并不是已经求出得到的,而是GeoNet这个网络结构,因此我们在训练PU-Net的过程中,也同时在训练GeoNet,而非分开成两个阶段。
- 因此损失函数由两部分组成,GeoNet的L1测地距离损失,和原来PU-Net的损失。
POF:GeoNet融合法向估计与表面网格生成(PointNet++)
- 由GeoNet得到测地距离,选择邻域。和PUF相比,直接去掉了欧氏距离近而测地距离远的点。(但我不知道在end-to-end训练过程中怎么做到这一点)
- 将GeoNet最后倒数第二个FC层的参数,作为点的特征输入到PointNet++中。
- 将融合后的特征用PointNet++的方式估计法向。
- 损失函数由GeoNet的L1测地距离损失,和原来PointNet++的L1法向估计损失两部分组成。
- 由法向进行泊松重建,得到表面网格。
疑问
- GeoNet融合网络似乎都是end-to-end的,为何不先训完GeoNet,再将结果给到PU-Net或者PointNet++?另外,在GeoNet未算出来的时候,如何依赖测地距离得到邻域?
- PUF和POF在图示上都有两个分支,但从文本描述上它们应该融合在一起?
相关的思考
- 这篇paper非常直观非常有用。平时得到邻域时,确实会有测地距离很大的情况,带来很大的误差。如果它被避免(即使是部分避免),也会取得很大的进步。它应该可以和很多点云的方法做融合。
- 期待这篇paper的代码开源。
参考文献
He, Tong, et al. “GeoNet: Deep Geodesic Networks for Point Cloud Analysis.” arXiv preprint arXiv:1901.00680 (2019).