以点云为主体,提供两个方向自由选择:
- 传统图形学点云处理
- 深度学习下的点云处理
点云,三维空间中的数据,例如二维空间下的数据是由像素组成的图像,三维空间下的数据就是由空间中的点组成的点云。
传统点云处理
根据点云处理库的教程学习实现以下任务
- 可视化点云
- 点云体素下采样
- 点云滤波
- 点云变换
- 顶点法向估计
- 点云表面重建
以点云为主体,提供两个方向自由选择:
点云,三维空间中的数据,例如二维空间下的数据是由像素组成的图像,三维空间下的数据就是由空间中的点组成的点云。
根据点云处理库的教程学习实现以下任务
PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space
Qi C R, Yi L, Su H, et al. Pointnet++: Deep hierarchical feature learning on point sets in a metric space[J]. Advances in neural information processing systems, 2017, 30.
最初的PointNet[2]没有捕捉到点的局部结构特征,限制了细粒度和复杂场景的识别、泛化能力。PointNet++则引出了一个分层结构神经网络,它在多级结构的点云中递归地应用PointNet。
由于在均匀点云密度上训练的网络在非均匀密度点云上性能极大的削弱,PointNet++提出了一个新颖的学习网络层,可以自适应整合多种尺度的特征。
实验表明PointNet++能够高效且鲁棒的学习到点云的深度特征,并且效果达到目前最优。
\[ ReLU(z) = max(0,z) = \begin{cases}z, & z \geq 0 \\\\0, & z < 0\end{cases} \]
ReLU不能接受小于0的输入, 不代表原始输入数据不能小于0, 因为原始数据起码也在一层WX+b之后才会进入ReLU。而初始化的W是0对称分布, b则是恒为0, 因此会将输入数据变成有正有负, 不用担心。
Leaky ReLU: 在ReLU的基础上, 给小于0的部分泄漏了一点点梯度,避免神经元死亡
\[ LReLU(z) = \begin{cases} z & z \geq 0 \\\\ \alpha \cdot z & z < 0 \end{cases} \]
网络每一层的计算都会使输入数据的分布发生一点变化,变化随着层数放大。因此最后训练中间层数据分布可能已经不是原始数据分布了,BN(BatchNormalization)就是为了解决这种分布变化,从而获得以下优点:
使用方法:nn.BatchNorm1d/2d/3d(num_features)
详细原理:BN即是在每一层都把数据分布归一化到0点附近,使得每一层网络都有着相同分布的数据。具体做法:
\[ \mu_B = \frac{1}{m}\sum_1^m x_i\\ \sigma^2_B = \frac{1}{m} \sum_1^m (x_i-\mu_B)^2\\ n_i = \frac{x_i-\mu_B}{\sqrt{\sigma^2_B + \epsilon}} \\ z_i = \gamma n_i + \beta \]
在自己的init_func中利用nn.init模块对不同的层定义不同的初始化方式。然后用net.apply(init_func)将函数应用到每一层。或者net[i].apply(init_func)单独应用:
SGD:随机梯度下降
Momentum:更新时在一定程度上保留之前的方向,再通过当前梯度进行微调方向,即带有一定的惯性。
NAG:Nesterov Momentum/Nesterov Accelerated Gradient 梯度加速算法。同Momentum,已知上一步的更新方向,那么在这次确定方向之前,先按之前的方向走一步,然后在新位置上求梯度,再用这个 未来的梯度 在当前位置进行Momentum的方向计算。
换句话说,就是把Momentum中计算当前梯度的步骤延后,先走一步看看,计算梯度,看看路顺不顺,再回到原位置决定要怎么走。
PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation
Qi C R, Su H, Mo K, et al. Pointnet: Deep learning on point sets for 3d classification and segmentation[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 652-660.
点云是重要的几何数据结构。由于点云的不规则形式,大部分人都将其转化为规则的3D体素网格,或者图像集合。这篇文章定义了一个全新的神经网络类型,其可以直接使用点云格式,并且很好的保持了点云输入中的置换不变性,即PointNet。
PointNet为点云的各种应用如目标识别、部件分割、语义分割等,提供了统一的架构。
PointNet虽然简单,但是十分高效。实验上,它和最先进的模型效果旗鼓相当,甚至更好。理论上,文章分析了网络在学习什么,并且分析了为什么网络对输入的置换和缺失具有很好的鲁棒性。
一个生成模型G:学习到数据分布,使得D犯错概率最大
一个判别模型D:判别一个样本是来自真实数据还是G
存在一个特解,使得G可以涵盖住真实训练数据分布,D的判别概率始终是\(\frac{1}{2}\)
对于MLP定义的G和D,可以使用反向传播训练整个系统,而不需要使用任何的马尔科夫链或者是展开的近似推理网络。
迄今为止,大多数深度学习伟大的成功都是在判别模型上,将高维复杂的输入映射到一个类别标签。
而生成模型则有着很多的困难,如很难在极大似然估计和相关策略中进行概率计算,并且生成模型的上下文中难以利用分层线性单元的优势。
本文提出了一个新的规避了这些困难的生成模型。
GAN框架能够给很多模型和优化问题提供一种训练方法。