精读笔记09_PointNet++ 【3D点云暑期学习】精读笔记(9)PointNet —— 把 CNN 的分层思想搬进点云研0暑期进组学习 · 3D点云多模态方向 · 论文精读系列第 9 篇论文信息标题PointNet: Deep Hierarchical Feature Learning on Point Sets in a Metric Space作者Charles R. Qi, Li Yi, Hao Su, Leonidas J. GuibasStanford发表 venueNeurIPS 2017阅读日期2026 年 7 月写在前面上篇 PointNet 用共享 MLP 全局 Max Pooling这一极简组合第一次实现了对原始点云的直接学习。但它有个绕不开的硬伤对所有点一视同仁地做一次全局池化完全忽略了由欧氏距离定义的局部邻域关系。反观 2D 图像CNN 之所以强靠的就是层次化抽象底层卷积核抓边缘高层组合成语义部件从局部到全局一路递进。可点云是非结构化的离散集合没有规则像素网格卷积根本用不了。于是 PointNet 要解决一个核心难题怎么在保留点云排列不变性的前提下定义出类似 CNN 的局部感受野并构建层次化结构它的答案非常优雅——把 PointNet 当成微观特征提取器递归地套在嵌套的局部区域上。这一篇是 3D 主攻里承上PointNet启下PointCLIP / Point-Bind的关键一环里面的 FPS、Ball Query、Set Abstraction 三个概念后面读任何 3D 论文几乎都会撞见。一、PointNet 到底差在哪PointNet 的 Max Pooling 把所有点的信息压成一个向量局部几何和精细结构曲率、棱边全丢了。比如一把椅子它只知道整体像椅子却说不清靠背和坐垫的边界在哪——这在物体分类上还能混但在 ScanNet 这种复杂室内场景的逐点分割上就彻底露怯。CNN 的秘诀是局部→全局的递进学习。PointNet 要做的事就是把这套理念移植到非结构化的点云上多层 Set Abstraction 由细到粗从棱角→部件→整体。二、怎么在点云里定义局部感受野PointNet 的核心模块是Set Abstraction集合抽象层SA每一层固定三步SamplingFPS 最远点采样→ GroupingBall Query 球查询→ Mini-PointNet微型 PointNetSampling从稠密点云里挑出少量质心点让它们均匀铺满物体表面Grouping以每个质心为球心在固定半径内抓邻域点构成局部点集Mini-PointNet对每个局部点集做特征提取MLP 编码相对坐标 原始点特征 → 全局 Max Pooling输出该区域的局部抽象特征。把多层 SA 叠起来就实现了一个CNN 式的编码器原始稠密点 → 第 1 层 SA低层局部特征棱角、平面→ 第 2 层中层局部组件如桌腿→ 第 3 层高层全局特征完整轮廓。这不就是点云版的卷积 池化吗三、最远点采样FPS为什么比随机采样强如果直接保留全部点当中心随着层数加深点数不变但特征维度涨计算量几何级数爆炸。所以需要尽量少的质心点代表原点云。FPS 的逻辑是每次都挑离已选中心集合最远的点让选出来的点尽可能分散地覆盖整个物体表面。来个具体例子原始点集P { 0 , 2 , 3 , 7 , 10 } P\{0,2,3,7,10\}P{0,2,3,7,10}目标采样M 3 M3M3个中心随机起点先选 0S { 0 } S\{0\}S{0}剩余点{ 2 , 3 , 7 } \{2,3,7\}{2,3,7}到S SS的最短距离2→23→37→3最远是 3选 3S { 0 , 3 } S\{0,3\}S{0,3}最终{ 0 , 3 , 10 } \{0,3,10\}{0,3,10}均匀分布在整条线段上两端 中间都覆盖无大片空白。如果换成随机采样很可能抽到{ 0 , 2 , 3 } \{0,2,3\}{0,2,3}右边 7、10 大片区域完全没有采样中心直接丢失右侧几何信息。FPS 就是靠这种最远优先保证覆盖均匀。四、球查询 vs kNN为什么固定半径更香分组时另一种常见做法是 K 近邻kNN但 PointNet 选了球查询Ball Query以质心为球心、在固定物理半径内抓所有点。关键差异在空间尺度kNN 锁数量不锁尺度密集区域最近的 32 个点可能只覆盖 0.05 米稀疏区域却被拉到 0.5 米。导致局部特征在空间尺度上忽大忽小网络很难学会固定的局部几何模式Ball Query 锁尺度不锁数量无论区域多稀疏只要半径固定网络学到的永远是以质心为中心、半径的球体内的几何结构。这保证了局部特征在空间上的一致性让网络能像 CNN 固定卷积核一样各处复用模式识别能力——尤其对需要精细空间定位的分割任务至关重要。一句话Ball Query 用固定物理半径强制锁定了特征提取的空间尺度避免了 kNN 在密度变化时的尺度漂移是 PointNet 泛化性的关键几何约束。五、复杂场景密度不均怎么办真实扫描数据比如 ScanNet密度极不均匀桌面稠密、墙面稀疏。最基础的SSG单尺度分组只用一个半径做 Ball Query应付不了。论文提出两个密度自适应策略MSG多尺度分组在同一层用不同半径做多尺度 Ball Query各自过 PointNet 后拼接成多尺度特征。密度均匀时吃细尺度稀疏时靠粗尺度兜底MRG多分辨率分组**某一层的特征由低层子区域汇总向量和直接用 PointNet 处理原始点的向量拼接而成。**密度低时给后者更高权重避免采样不足密度高时前者提供更精细细节。MSG 效果好但底层计算贵最底层质心多、大邻域跑局部 PointNet 太慢MRG 则避开了大规模邻域特征提取更高效。六、分割怎么恢复稠密点下采样能提取分层特征但会丢掉原始点没法逐点预测。所以分割分支加了Feature Propagation特征传播层FP解码器从最稀疏高层特征逐层插值回原始稠密点每层三步逆距离加权插值用 k 近邻插值公式把上层少量点特征插值到下一层更多点跳跃连接 Skip Link把插值特征和解码器同层 SA 的浅层细粒度特征 concat弥补插值丢失的细节边角、小物体Unit PointNet 逐点更新拼接后过共享 MLP更新每个点特征。重复 FP 直到恢复原始点数N 0 N_0N0​最后一层 MLP 输出每个点的语义类别。配合跳跃连接全局语义和局部细节都保住了。七、实验亮点ModelNet40 分类约89.71%集成后可达92.10%全面超越 PointNet89.2%证明层次化局部建模带来的表征增益ScanNet 等复杂室内场景分割相比 PointNet 大幅领先——正是靠 Ball Query SA 显式抓局部几何复杂场景不再束手无策MSG / MRG 的密度鲁棒性在密度不均的真实扫描数据上多尺度策略明显优于单尺度 SSG。八、个人思考局限性它仍是全监督、从零在 3D 数据上训练对大规模 3D 标注的依赖一点没少而且 FPS Ball Query 多层 SA 的开销随点数和层数线性增长MSG 在最底层计算极贵。另外它依然遇到 unseen 类别束手无策——封闭集标注的天花板没打破。与 3D 点云主线的联系Set Abstraction 是 3D 方法的通用积木采样 分组 局部聚合这套范式被后续几乎所有基于点的 3D 方法DGCNN / PointConv / 乃至 Point-Bind 里的 3D 编码器继承局部→全局层级 3D 版 CNN它证明了在点云里也能做 CNN 式分层抽象为后面 Uni3D 用 2D ViT 初始化 3D 编码器做了概念铺垫本质都是局部到全局的递进Point-Bind 的基础3D 多模态对齐模型 Point-Bind 的 3D 编码器内核正是 PointNet 这套局部聚合思路读懂它就打通了 3D 编码这条线。可改进点最大的未解之谜是数据效率——全监督太吃标注。下一篇 PointCLIP 就换了个思路干脆不训 3D改借 2D 大模型CLIP的开放语义。本周系列博文精读笔记(8)PointNet — 点云直接学习的开山之作精读笔记(9)PointNet — 层次化局部建模 ← 当前精读笔记(10)PointCLIP — 把 CLIP 借到 3D对比学习(3)点云方法对比PointNet/PointNet/PointCLIP周报(3)第三周学习总结