
https://www.bilibili.com/video/BV1xQ4y1D7R4?spm_id_from=333.337.search-card.all.click&vd_source=e7d12c9f66ab8294c87125a95510dac9
For the object classification task, the input point cloud is
either directly sampled from a shape or pre-segmented from
a scene point cloud.
object part segmentation
semantic scene parsing
第三点 变换不变性 有待考证,做classification 以及 segmentation可以
但是要做配准以及补全,需要考虑旋转变换等的性质。
这里是f范数的平方 loss reg,相当于就是逼近他所需要的正交矩阵
T-net
如果不做正交化,后面的特征可能退化,变为0。

局部的扰动不会对整体造成影响

分类任务, 部件分割,场景分割
https://www.bilibili.com/video/BV1ES4y1t7Vt?p=4&vd_source=e7d12c9f66ab8294c87125a95510dac9
1 多视图将局部特征 2d 拼接 太麻烦,计算量大
点云: 无序性 , 近密远疏,非结构化数据(直接cnn有点难),
如何对点云进行特征提取
2 模型具有置换不变性

max 和加法可以体现点云特性
一个样本许多点,n个点最后浓缩出来一个点,只有三个特征,损失太大
每个点先去升维


1 每一个点都做升维度 n3 经过mlp变成 n64
2 自身点特征+ 全局特征1024维度的 = 1088维度的
https://www.bilibili.com/video/BV1nF411q7LW?spm_id_from=333.337.search-card.all.click&vd_source=e7d12c9f66ab8294c87125a95510dac9

点云优势
常用的 sum和 max 都是对称函数

对点云局部特征提取
1 N 点的个数, d 数据存储维度,c 特征值存储的维度
2 经过sampling以及grouping后,点的个数缩小,变成N1
3 经过pointnet后,学习局部的全局特征,特征维度变为c1
上采样过程主要通过
1 反向插值
2 skip link concatenation
通过上一层的 几个点来算本层某点的 特征, 权重主要参考上层点与本层点的距离。 加权
将之前对应的层的维度特征直接拼到本层, 可以看到图中c1+c2,这里的c2和前面的c2不是一个概念,但是c1和前面的是一个概念。这里的c2是由上一层的加权求出的。

https://blog.csdn.net/weixin_39373480/article/details/88878629
https://blog.csdn.net/sinat_17456165/article/details/106596332
https://www.bilibili.com/video/BV1Hf4y1g7Az/?spm_id_from=333.337.search-card.all.click&vd_source=e7d12c9f66ab8294c87125a95510dac9
maxpooling 对局部的信息缺失影响
局部变换不变性从而整体的不变性
最远距离采样层
https://www.bilibili.com/video/BV1bb4y1Y72w?spm_id_from=333.337.search-card.all.click&vd_source=e7d12c9f66ab8294c87125a95510dac9
用矩阵对输入点或者特征空间进行空间变换,保证变换不变性。
将输入空间或特征空间对齐到基准空间。
第一次输出3 x 3 矩阵
第二次输出 64 x 64 矩阵
个人理解: 他的效果相当于 3 x 3 的矩阵。最后输出就是3 x 3 的矩阵。

左右代码其实差不多,区别在于输入,一个是3维度的,一个是64维度的
1 : n x 3 两种实现风格
n 相当于channel层
batchsize * n* 3 作为线性层,全连接层。3变成后续的维度。
或者3*n ,3看作channel 然后后面跟1维卷积, 对n进行卷积,局部以及全局共享,相当于对所有channel的线性层
2 maxpooling
无序集合
置换不变性:标量函数调换任意两个变量结果不变,
如果输入输出维度一样,输入顺序调换,输出的结果也要调换。
如果说是标量函数,如何满足置换不变性。涉及到如何做pooling。论文中只是全局pooling还是比较粗糙的。
全部加起来或者乘起来都是一样了,可以取一个log。或者取最大值。涉及到两种策略:
maxpooling 以及 averagepooling 后者可能更好
最后两个都挂实验跑一下看哪个好。
3 k可以看作one hot 向量 ,可以去和label做cross entpy,做classification
4 segmentation必须要global全局的feature,不然点云之间没有联系
5 每个点的m维向量又是一个one hot 向量,之后做分类任务。
6 batchnorm 要注意 不是适合每个任务的。

输入通道3, 过滤器 1 * 3(卷积核),64个卷积核. 一个卷积核: 31 x 13 = 1个结果,64个就是64个结果。



三个卷积层升维到1024 后面跟三个全连接层降维到9
旋转矩阵3x3 最后一个全连接层的输出为9
batchnormal 是为了防止模型的过拟合 ,并 归一化,对应每一层的卷积和全连接层。
39行;卷积升维后归一化操作,再relu
取最大值,2表示在第三个维度上取最大值。 0表示取最大值的值而不是索引
通过view改变形状,-1表示系统自动判断。
50行 相当于单位矩阵 3x3矩阵输出

最后一个全连接层输出 k x k 是因为 对64维度的特征进行变换
最后返回kxk 的变换矩阵

global feat默认为true 设置为区分分割还是分类,分类默认为true
https://blog.csdn.net/yuanmiyu6522/article/details/121435650
假设X是拓扑空间。设x和y是X中的点。如果存在x的邻域U和y的邻域 V 使得 U 和 V 是不相交的(U∩V=∅),我们称x和y可以“由邻域分离”。X是豪斯多夫空间如果任何两个X的不同的点可以由邻域分离。这是豪斯多夫空间也叫做T2空间和分离空间的原因。
X是预正则空间,如果任何两个拓扑可区分的点可以由邻域分离。预正则空间也叫做R1空间。
在这些条件之间的联系如下。拓扑空间是豪斯多夫空间,当且仅当它是预正则空间和柯尔莫果洛夫空间的二者(就是说独特的点是拓扑可区分的)。拓扑空间是预正则空间,当且仅当它的柯尔莫果洛夫商空间是豪斯多夫空间。
一维卷积
二维卷积
三维
https://blog.csdn.net/perfect_csdn1/article/details/116862691
https://www.cnblogs.com/szxspark/p/8445406.html
https://zhuanlan.zhihu.com/p/418092190
激活之前归一化是因为 经过线性变换后数值可能会有偏差,数字的分布经过该处理后会强行成为正态分布的过程,之后再使用激活函数效果更好,不会受到数据偏差的影响。 数据刷整齐一点。
去掉一些特征,选择最大的一些特征。
不会受到变换的影响,最大值是不变的
tensflow和 pythorch区别
view以及resize
一维卷积的区别,tensflow中二维卷积的形式达成一维卷积功能
64维度特征流程


global feat默认为true 设置为区分分割还是分类,分类默认为true

计算两个tensor的矩阵乘法,torch.bmm(a,b)
1.2 Tensor.view(-1)或Tensor.view(-1, 1)
含义:当参数中存在-1时,表示该位置的数值需要经过计算
view中一个参数定为-1,代表动态调整这个维度上的元素个数,以保证元素的总数不变
https://blog.csdn.net/weixin_34280060/article/details/123840788
https://blog.csdn.net/MLH7M/article/details/122043033
当size参数有三个时,Tensor.repeat(num_channel, num_row, num_col),第一个num_channel表示通道数的复制倍数,num_row表示行方向的复制倍数,第二个num_col表示列方向的复制倍数。
重构为 1024行 1列
之后行不变,列复制n_pts倍
n x 1024 maxpool 后,每一个维度取最大值, 成了1 x 1024,n个点浓缩成1个点,总的特征再去处理。
拼接是 n x 64 拼接 n x 1024 ,所以1x 1024 扩展成 n x 1024
1024行 1列 沿着 列的维度 扩展n倍。
torch.nn.MaxPool1d是在某一维度上用滑动窗口以某种跳步取最大池化,确实窗口长度=列表长度、其他参数默认的情况下池化计算的结果与torch.max相同,但是未免太大材小用,杀鸡牛刀。