0%

以点云为主体,提供两个方向自由选择:

  • 传统图形学点云处理
  • 深度学习下的点云处理

点云,三维空间中的数据,例如二维空间下的数据是由像素组成的图像,三维空间下的数据就是由空间中的点组成的点云。

传统点云处理

根据点云处理库的教程学习实现以下任务

  • 可视化点云
  • 点云体素下采样
  • 点云滤波
  • 点云变换
  • 顶点法向估计
  • 点云表面重建
阅读全文 »

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++能够高效且鲁棒的学习到点云的深度特征,并且效果达到目前最优。

阅读全文 »

网络结构

  • one-hot: 对离散的类别数据进行编码, 如词元、标签等。通过编码可以将所有类别一视同仁, 而避免造成label=5的标签比label=1的标签更重要。
  • embedding: 对词元进行one-hot编码之后,通常维度都会成千上万,并且除了一个维度是1以为,其他维度全都是0,编码很稀疏,效率很低。为了压缩维度使用embedding层进行维度压缩。
  • 残差层: 用于在网络F的基础上构造残差连接, 如ReLU、GELU。在激活函数之前。
  • Batch Normalization: 每层网络运算之后的归一化。在网络计算与激活层之间。
  • 激活层: 在两层神经网络之间,切断两层的线性联系,使网络组合可以变成非线性网络。

激活函数

原理讲解

Sigmoid(Logistic/Tanh)

  • 有输出概率的实际意义, 导数易求。
  • 但是计算需要指数运算, 效率低。而且梯度最大值≤0.25, 在链式传播乘起来后会越来越小, 最终网络一多就会造成梯度消失。另外Logistic均值不为0, 会影响一点输入数据的均值分布, Tanh则不会。

ReLU/Leaky ReLU

\[ ReLU(z) = max(0,z) = \begin{cases}z, & z \geq 0 \\\\0, & z < 0\end{cases} \]

  • 正常的反向导数恒等于1, 收敛快。无论链式传播多少层梯度都为1, 不存在梯度消失。且计算简单, 并且会造成神经元的稀疏性, 降低计算成本。
  • 输出无界==>输出可能很大==>损失很大==>梯度很大==>梯度下降造成神经元参数W和b小于0==>激活前的神经元输入小于0, 激活时ReLU梯度恒为0, 即ReLU神经元死亡。
  • 在RNN中难以使用ReLU==RNN时间步中共享W参数矩阵, 相当于会对W做连乘, 且ReLU不抑制输出, 最终输出结果很大。除非W初始化为I。

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} \]

Batch Normalization

网络每一层的计算都会使输入数据的分布发生一点变化,变化随着层数放大。因此最后训练中间层数据分布可能已经不是原始数据分布了,BN(BatchNormalization)就是为了解决这种分布变化,从而获得以下优点:

  • 可以选择比较大的初始学习率,让你的训练速度提高
  • 减少对初始化的依赖
  • 减少对正则的依赖

使用方法:nn.BatchNorm1d/2d/3d(num_features)

  • 全连接层:置于全连接计算和激活层之间
  • 卷积层:分通道处理,一个通道一个批量归一化
  • 测试和预测时:由于只有一个样本不能批量归一化,因此可以采用训练时的全局均值来做归一化。在pytorch中把模型置为eval会自动做好。

详细原理:BN即是在每一层都把数据分布归一化到0点附近,使得每一层网络都有着相同分布的数据。具体做法:

  1. 先对方差、均值归一化,将数据分布移动0点附近:仅这一步还不够,由于区间在[-1,1],可能会减弱激活函数效果,另外压缩了网络的学习空间,可能会破坏网络学习效果。
  2. 通过可学习的参数 γ,β,对数据进行可学习的线性变换来适当拉宽数据分布,解决上述问题。

\[ \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)单独应用:

  • 线性激活:Xavier,前提激活函数在零点附近线性,如tanh等。而ReLU不满足。
  • ReLU:He,解决ReLU不能使用Xavier的问题。

详细介绍初始化方法

参数更新器

SGD:随机梯度下降

  • \(\eta\):全局学习率
  • 收敛慢,在终点容易错左右跳,可能陷入局部最优。

Momentum:更新时在一定程度上保留之前的方向,再通过当前梯度进行微调方向,即带有一定的惯性

  • \(\eta\):全局学习率;\(\alpha\):动量系数;\(v_t\):初始方向
  • 增加稳定性学习更快,有一定的摆脱局部最优能力。
Momentum

NAG:Nesterov Momentum/Nesterov Accelerated Gradient 梯度加速算法。同Momentum,已知上一步的更新方向,那么在这次确定方向之前,先按之前的方向走一步,然后在新位置上求梯度,再用这个 未来的梯度 在当前位置进行Momentum的方向计算。

换句话说,就是把Momentum中计算当前梯度的步骤延后,先走一步看看,计算梯度,看看路顺不顺,再回到原位置决定要怎么走。

  • \(\eta\):全局学习率;\(\alpha\):动量系数;\(v_t\):初始方向
  • 相比于在原位置做方向的微调,NAG是先探好前方的路,再决定现在怎么走。因此更具有预见能力,未来的路更顺畅则加快速度,未来的路不好走则提前改变方向。
Nesterov 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框架能够给很多模型和优化问题提供一种训练方法。

阅读全文 »