FlowNet3D论文学习笔记
1 概述
FlowNet3D 这篇文章研究场景流(scene flow)估计的问题。场景流的用处很多,诸如物体分割,动作识别,相机位姿估计(object segmentation, action recognition, camera pose estimation)等问题。但场景流估计虽然为3D问题,但之前的很多方法都是在2D层面上研究的,而且也很少有直接在3D的point cloud上面直接对点操作的(有少量工作,但并不是利用深度学习方法做的)。
FlowNet3D 是基于PointNet和PointNet++基础上做的,文章说可以实现同时学习点云的分级特征和点云的运动。
文章贡献点:①对于两帧连续的点云,可以实现端到端的场景流估计;②提出了两个新的结构层:flow embedding 层和 set upconv 层,分别用于学习两个点云之间的联系和点云内传播 feature(上采样);③在KITTI数据集上测试,效果强于传统方法。
2 网络结构
网络由三个子模块构成,point feature learning,point mixture,flow refinement,这三个子模块又有三个基础层flow embedding 层、set conv和 set upconv 层构成。三个层结构如下所示:
2.1 set conv层
set conv 层在PointNet++中叫做 set abstraction ,分为 sampling、 grouping 和 pointnet等步骤:
其目的是提取点云的 feature,假设点云中有n个点,每个点的特征用 p i = { x i , f i } p_{i}=\left\{x_{i}, f_{i}\right\} pi={
xi,fi}表示,第一项为点XYZ的坐标,第二项为点云的自带feature。其中 x i ∈ R 3 x_{i} \in \mathbb{R}^{3} xi∈R3 f ^ i ∈ R c ( i = 1 , … , n ) \hat{f}_{i} \in \mathbb{R}^{c}(i=1, \ldots, n) f^i∈Rc(i=1,…,n)。set conv 层开始时利用最远点采样进行降采样中心点,然后进行grouping操作,再利用pointnet进行feature提取,提取函数见下方。最终可以得到形式为: p j ′ = { x j ′ , f j ′ } p_{j}^{\prime}=\left\{x_{j}^{\prime}, f_{j}^{\prime}\right\} pj′={
xj′,fj′} 的 n ’ n^’ n’个点。(详情请见PointNet++论文,挺复杂)
f j ′ = MAX { i ∣ ∥ x i − x j ′ ∥ ≤ r } { h ( f i , x i − x j ′ ) } f_{j}^{\prime}=\operatorname{MAX}_{\left\{i |\left\|x_{i}-x_{j}^{\prime}\right\| \leq r\right\}}\left\{h\left(f_{i}, x_{i}-x_{j}^{\prime}\right)\right\} fj′=MAX{ i∣∥xi−xj′