你们入门一个新领域的时候都是干什么?
是先找个 XX带你入门 网课看上半天吗
我觉得 核心只有一个:抓住这个领域的核心问题
举个例子 VLA最终目的就是让机械臂动的好一点 LLM则是研究怎么让这个token往外蹦的好一点
而点云呢?
3D 点云通常由大量三维点组成,用来表示一个三维场景或物体
(x, y, z) 空间坐标
RGB 颜色信息
intensity 激光反射强度
normal 法向量
label 训练时的人为标注
等等打包成一个点,上面的都是它所蕴涵的信息
LLM的输入很简单,就是文本通过tokenizer转换之后的token,这种token本身就有着顺序和逻辑
而点云,则是无序,不规则的数据类型
(同一个场景里,点的排列顺序换一下,场景本身并没有变。但神经网络通常需要固定输入顺序)
那么点云领域最核心的问题,就是
如何在不规则、无序、稀疏的 3D 点集上学习有效的空间特征?
这个特征可以指的是几何特征,它是平面还是曲面?也可以是整个区域的特征,这是个墙还是桌子?(都是平面),也可以是语义特征 模型学会空间特征,则是理解三维世界,运用到实际生产中则是:实例分割,3D 目标检测,机器人抓取等等
了解一个领域的基本元素和核心问题之后,下一步就是看主流方法到底在解决什么?
为了避免泛讲空话,我们这里专精一种方法并以PTv3这篇24年oral来加深这个领域的理解
Point Transformer
既然是含有信息的点,我们可以直接暴力的输入点云送入Transformer,通过 attention 去看周围点,从而学习局部几何和上下文关系
对点云离散化处理后,PTv3 会先将连续坐标离散化成网格坐标,然后利用 Z-order 或 Hilbert curve 这类空间填充曲线,为每个点生成一个序列化编码。按照这个编码排序后,原本无序的 3D 点云就被组织成一个一维序列。,这样3D空间中遍布的点云便被压缩到了一个1维向量里面,还包含了原本的空间信息
和VIT类似,再对这样的序列做分割,变成一个个patch,然后在每个 patch内做 self-attention,也就是patch 内的点互相看 ,patch 外的点暂时不看 很自然,那互相怎么交流呢? 这里PTv3没有单纯的做自注意力,它在不同层使用不同的序列化顺序,排序方式一变,patch 的分组也会变化,于是原本不在同一个 patch 里的点,在下一层可能被分到同一个 patch,从而实现跨 patch 信息交互。
于此同时,位置编码也需要专属于3D点云的相对位置编码,这里PTv3是在 attention 前面加一个稀疏卷积层,用它注入局部几何位置信息
在做完self-attention之后,PTv3使用类似 U-Net 的结构,先Encoder:逐层下采样,提取大范围语义 ,后Decoder:逐层上采样,最后输出分类或者预测目标。在这,一个点可以是一个向量,融合了特征,送入分类头之后就可以进行实际的任务了。
总之,对于入门 我觉得还是要先整体理解,再细节到具体,将力施加在某一个具体的模型上,在探索之后再看来时路,更是一种豁然开朗
本篇无GPT润色,除少部分细节优化,由篇幅问题,细节阐述较少
评论