VoteNet|点云里物体的中心往往“悬在空中”,三维目标检测如何让表面点学会投票?——深度霍夫投票,把“由点到中心”的投票装进端到端网络|计算机视觉技术原理
本博客由计算机视觉实践撰写,是面向技术从业者的一篇计算机视觉技术原理深度解读。本博客较长,建议收藏后分次阅读。
前言
三维目标检测要从散乱点云里同时给出物体的朝向三维框和语义类别,难点在于物体的中心往往落在不贴着任何表面的空腔里。VoteNet 把传统霍夫投票改造成可微的深度模块,让每个表面点先投票到物体中心,再把投票聚类起来生成提案,从而把“点云里看不见的中心”变成“投票汇聚出来的中心”。
三维目标检测(3D Object Detection)这几年几乎成了机器人、自动驾驶、增强现实与智能家居绕不开的基础能力:不仅要回答“场景里有什么”,还要回答“每一个东西在三维空间里的什么位置、朝哪个方向、有多大、属于哪一类”。对着一张深度图或一次三维重建得到的点云,我们希望一次前向就把整片场景里的家具、障碍物、设备都用带朝向的包围盒框出来。
本博客要剖析的这篇工作,走了一条和主流完全不同的路。当时绝大多数三维检测方法都在“向二维检测器看齐”:要么把散乱点云体素化成规则网格再套三维卷积,要么把点云投影成鸟瞰图再用二维检测器,要么干脆先用二维检测器在图像里找出物体、再去截取对应的点云做局部检测。而这篇工作坚持在第一性原理上重新思考:能否直接拿原始点云做检测,既不依赖二维检测器,也不做任何体素化的信息损失?
答案是可以,而且方法出奇地简洁——把 1950 年代末提出的霍夫投票(Hough Voting)思想,以可微的方式装进深度点云网络,让网络“学会投票”。本博客将沿着“问题从何而来 → 为什么这条路走得通 → 具体的网络设计与技术措施 → 为什么这些措施能解决问题”的脉络,把它讲透。
一、问题从何而来:点云里“看不见”的物体中心
要理解 VoteNet 的动机,计算机视觉实践建议先回到最朴素的观察:二维图像里的目标检测,和三维点云里的目标检测,有一个容易被忽略的结构性差异。
在一张二维图像里,物体中心往往落在一个真实的像素上。桌子、椅子、汽车的质心附近,通常都有一块可感的像素区域,网络可以在离中心很近的地方找到特征来回归边界框。但点云不一样。深度传感器只会捕捉物体的表面,物体内部、被遮挡的部分、以及物体中心所对应的空腔,根本没有点。换句话说,点云里的点是从三维空间里的二维流形(物体的表面)上采样得到的,天生稀疏且“空心”。
这就带来一个直接后果:如果沿用二维检测器那套“密集区域提案”的思路——在采样到的点上直接回归出物体的三维框——网络会发现,它想要回归的那个框中心,很可能离任何一个表面点都很远。中心附近没有点,意味着没有局部特征可以聚合,网络无从判断“这里是不是一个物体的中心”,也难以在一小步里把框参数回归准。
本博客用一个更形象的比喻来加深理解。假设我们站在一间没有门的房间里,要目测房间正中央吊灯的位置。如果我们脚下就是地面,眼睛能看到四面墙,那么“房间中心”是可以被推断出来的。但如果我们脚下站着的地方本身就悬空、四周漆黑、没有参照物,要凭空估出中心的位置就会变得非常困难。点云里物体中心的情形,正是后者:它是空腔,不在任何可感表面上。
单纯把网络的感受野开大能不能解决?论文给出的结论是:不能。感受野变大,虽然能“看到”更远的上下文,但同时也把邻近物体的点、以及杂乱背景纳入进来,噪声跟着变多。上下文越广,中心附近“干净”的、只属于该物体的信息就越容易被稀释。这个矛盾,正是 VoteNet 想用“投票”来解决的。
还要补充一点点云数据的“出身”,因为这是整个问题成立的前提。深度相机、激光雷达扫描到的点,本质是物体表面在传感器坐标系下的采样,它们分布在三维空间里的一个二维流形上——沿着任何一条视线,通常只会采到最近的一个表面点,物体的内部是不可见的。这意味着点云天然具有三层特征:稀疏(大多数体素是空的)、表面化(只有表面有样本)、空心(物体内部和中心没有点)。理解这三层特征,就能明白为什么“在点云里找物体中心”比“在图像里找物体中心”本质更难:图像里中心通常有像素,点云里中心通常没点。这个结构性差异,是 VoteNet 全部设计的出发点。
二、为什么主流路线绕不开三维检测的尴尬
在 VoteNet 出现之前,业界处理点云三维检测大致有三条路线,每一条都各有取舍,也各有隐形的代价。
第一条路线是体素化(Voxelization)。把不规则点云划分成规则的体素网格,把每个体素里的点聚合成一个特征,再用三维卷积做检测。这类方法能直接复用成熟的卷积网络,但代价同样明显:规则化本身是一次量化,会丢掉点云原本的几何精度;更麻烦的是,三维卷积的计算量随分辨率急剧膨胀,而点云本身是稀疏的,大量体素是空的,在空体素上做卷积是在白耗算力,它没有利用点云的稀疏性。
第二条路线是投影到鸟瞰图(Bird’s Eye View)。把点云压到二维平面,用成熟的二维检测器在鸟瞰图里定位物体。问题在于,一旦把三维信息投影降维,就必然牺牲几何细节。在物体密集、相互遮挡的室内场景里,这些被牺牲的细节往往正是区分“这是桌子还是床”的关键证据。
第三条路线是“二维驱动”的级联流程。先用二维检测器在图像里把物体找出来,再把二维框对应的视锥(frustum)内的点云截取出来做局部三维检测。这类方法效果好,但有一个结构性的软肋:它把成败压在二维检测器身上。二维检测器漏检一个物体,视锥里就根本没有那个物体,三维检测彻底无能为力。整个系统既依赖二维检测器,又在架构层面绕不开它。
这三条路线的共同点,是都在“回避”直接处理稀疏点云。而 VoteNet 选择正面迎上去:直接吃原始点云,架构上和目标提案上都不依赖任何二维检测器,也不做体素化。它之所以敢这么做,靠的是一套比“区域提案网络”更适配稀疏数据的机制——霍夫投票。
三、回到第一性原理:霍夫投票为何天然适配稀疏点云
霍夫变换(Hough Transform)是经典计算机视觉里的老古董,诞生于 1950 年代末,最初用来在气泡室照片里检测直线。它的核心思想是:与其在一个几何模式里寻找“整体”,不如让每一个局部样本为它可能归属的“整体参数”投上一票,最后在所有候选参数里找峰值。推广到任意形状,就是广义霍夫变换(Generalized Hough Transform):用图像补丁作为某个复杂物体存在的指示器,让每个补丁为物体中心投票,投票密集的地方就暗示着物体中心的存在。
传统霍夫投票做目标检测,分离线与在线两步。离线时,收集一批带标注的图片,构建一本“码本”(codebook),记录图片补丁(或其特征)与其到物体中心的偏移之间的对应关系。在线推理时,在图像上选取兴趣点,提取周围的补丁,把补丁和码本里的条目比对,取回偏移量并计算投票。由于同一物体上的补丁倾向于投出方向一致的票,投票会在物体中心附近聚成簇。最后,沿着簇里各投票的“来路”回溯到产生它们的补丁,就能恢复出物体边界。
VoteNet 的出发点,正是看到了霍夫投票和点云检测之间的天然契合,论文总结了两个层面的适配理由。
第一,投票式检测比区域提案网络(RPN)更兼容稀疏点集。RPN 需要在物体中心附近生成一个提案,而这个中心恰恰很可能位于空腔里——在空腔附近生成提案,本身就是额外开销,而且没有特征支撑。投票机制则相反,它不要求“中心有点”,它允许中心在“无点区”,靠周围一堆表面点的投票把它顶出来。
第二,它是自下而上的:把一个个微小的、局部的、零碎的证据,累积成一个高置信度的检测结论。即使神经网络理论上可以用很大的感受野聚合上下文,在“投票空间”里做聚合仍然更有益——因为投票把属于同一物体的、散落在表面各处的点,先“拉”到了同一个可对话的集合里。
然而,传统霍夫投票的致命伤是:它由一堆互相独立的模块组成,离线码本、在线比对、投票聚合、边界回溯,各自割裂,难以一起优化。能不能把整个流程揉进一个端到端可训练的网络里?这正是 VoteNet 要回答的核心命题,也是它对霍夫投票最重要的“再发明”。
四、把霍夫投票“深度学习化”:VoteNet 的总体设计
VoteNet 把整个检测流程拆成两大块:一块处理“真实存在的点”,负责生成投票;另一块处理“虚拟出来的点”,也就是投票本身,负责提案与分类。
整个网络可以这样走一遍:输入是一片含 N 个点(每个点是三维坐标 XYZ)的点云,先经过一个基于点云深度网络的骨干网络做特征学习,输出 M 个点,每个点除了坐标还带上一段高维特征。这 M 个点就是网络里发起投票的“源点”。接下来,每个源点通过一个共享的投票模块,独立生成一个投票——投票同样由“坐标 + 特征”构成,但它的位置已经不在物体表面上,而是被网络预测到物体中心附近去了。然后,对这些投票做采样与分组,形成 K 个投票簇。每个簇再送入一个共享的提案与分类模块,输出该簇的物体性得分、三维框参数和语义类别。最后,把所有提案过一遍三维非极大值抑制(3D NMS),输出最终的三维框。
【Figure 2 VoteNet 端到端网络架构示意图:从输入点云到源点、投票、投票簇、提案分类、3D NMS 的完整流程】
需要特别点出的是,VoteNet 的骨干网络采用的是 PointNet++ 式的分层点云网络。之所以选它,是因为它既能直接处理原始点云、避免体素化的信息损失,又天然利用了点云稀疏性——只在实际采到的点上做计算。PointNet++ 在物体分类和语义分割上已经验证过效果,但几乎没有工作认真研究过如何用它来做三维物体检测,VoteNet 补上了这块空白。
这里还有一个值得体会的架构哲学:VoteNet 把网络明确切成了“处理真实点的部分”和“处理虚拟点的部分”。前半段里的点,是传感器真的扫到的表面点,它们承载着几何与特征;后半段里的点——也就是投票——是网络“造”出来的虚拟点,它们不贴着任何真实表面,却落在了更有意义的位置(物体中心附近)。这种“先实后虚”的划分,把“感知现实”和“推断布局”两件事在结构上分离开来:先用深层网络从真实表面点里读出足够的证据,再让这些证据在虚拟空间里汇聚、进而得出结论。这种划分本身,就是投票机制能端到端工作的骨架。
后面本博客要展开的三个技术创新,就分别落在“学习投票”“投票聚类与提案”“多任务训练”这三处。它们共同回答一个问题:一个从 1950 年代走来的经典思想,怎样才能在现代深度学习里端到端地跑起来,并且跑得比所有依赖图像的主流方法都好。
五、技术创新的第一块拼图:从源点到“学出来的投票”
VoteNet 对传统霍夫投票的第一处关键改造,是把“码本查表”换成了“网络回归”。
传统方法里,投票的偏移量要靠查预先建好的码本取得,又慢又不准。VoteNet 用一个共享的投票模块(本质是一个带全连接、ReLU 和批归一化的多层感知机 MLP)来完成这件事:给定一个源点的特征,MLP 输出一个三维空间偏移 Δx 和一个特征偏移 Δf,于是该源点生成的投票就是“源点坐标 + 偏移”以及“源点特征 + 特征偏移”。
为什么“学出来的投票”比“查码本”好?论文给出的理由有两个。其一是效率,不需要做 k 近邻查表;其二是准确度,投票模块和整个检测流程联合训练,偏移量是被整体目标反推优化出来的,而不是被离线码本锁死的。
更妙的是,网络可以利用比码本大得多的感受野来做投票。在传统霍夫投票里,一个局部补丁只有局部视野,它投出的票往往有歧义——同一个局部外观可能属于不同物体。但 VoteNet 的源点带着骨干网络聚合出来的深层上下文,投票可以少很多歧义,因此更有效。此外,一个投票不仅带位置,还带一段特征向量,这段特征可以在后续聚合时被用上,这又是传统投票里没有的能力。
为了让投票真正“打中”物体中心,论文给三维偏移专门设计了一个投票回归损失:
L_vote-reg = (1/M_pos) Σ_i ‖Δx_i − Δx_i*‖ · 1[源点 s_i 在物体上]
这个式子的含义是:只有当源点落在某个物体表面上时,才计算它的投票偏移与真值偏移(从该源点指向它所属物体包围盒中心的位移)之间的差距,并把差距按源点数量归一化。这样,网络被明确地教会:表面上的点要往它们所属物体的中心投。
本博客要强调一个容易被忽略的细节:训练时如何给“真值投票”打标签,在两个数据集上是不同的。ScanNet 提供逐实例的标注,可以准确知道哪些网格顶点属于哪个物体,直接算顶点到该实例紧致包围盒中心的偏移;而 SUN RGB-D 只提供非模态(amodal)包围盒标注、没有实例分割,因此凡是落在某个标注框内的点都被当作物体点、要求它投票,并计算它到框中心的偏移。当一个点同时落在多个真值框里时,论文保留了最多三组真值投票,回归时取预测投票与任一真值投票之间的最小距离作为误差。这个处理,让一个“身兼多职”的点不至于因为要同时投多个方向而被误惩罚,很见功力。
投票在表示上和源点一样,都是“坐标 + 特征”,但两者有本质区别:投票不再贴着物体表面,更重要的是,来自同一物体不同部位的投票,彼此之间的距离比它们各自对应的源点要近得多。这一点至关重要——它意味着“同属一个物体的信息”被主动地汇聚到了同一个可对话的空间里,这为下一步的聚类聚合铺平了道路。
这里还有一个值得展开的附录细节:每个源点到底生成几个投票?论文默认只生成一个,理由是在上文足够大的前提下,多数歧义已经被消解,没有必要让一个点投多个方向。但它确实在架构上支持“每源点多投票”——只要在投票模块的输出维数上乘以倍数即可。论文实验了一个投票因子为 3 的变体:为了打破多个投票在对称性下趋向同一方向的退化,它在投票模块倒数第二层特征上拼接了三个随机数作偏置。结果颇为干脆:无论加不加随机数,每源点投 3 票的 mAP(55.8)都不如投 1 票(57.7)。这个消融印证了一个反直觉的结论——在投票这种机制里,“少而准”胜过“多而杂”,多余的投票反而引入了不必要的冗余与噪声。
六、技术创新的第二块拼图:投票聚类与提案生成
投票把属于同一物体的点“拉近”了,接下来要做的是把这些投票聚成簇,再从每个簇里生成三维框提案。
论文在聚类这一步选择了极简策略:均匀采样 + 按空间近邻分组。具体来说,先在一组投票里,基于它们的坐标做最远点采样(Farthest Point Sampling),选出 K 个投票作为簇中心;然后以每个簇中心为球心、半径 r 为球半径,把落在球内的投票归入该簇。这个方法足够简单,好处是能无缝地嵌进端到端流程里,实践效果也好。值得一提的是,论文在附录里验证过采样策略的稳健性:无论用投票做最远点采样、用源点做最远点采样,还是完全随机采样,mAP 的差距都很小,说明 VoteNet 对“如何选簇中心”并不敏感。
接下来是重头戏——如何从一个投票簇生成一个提案。传统霍夫投票到这里要做“回溯”:把投票沿着来路追回产生它们的补丁,才能恢复物体边界。VoteNet 干脆不要这一步回溯,而是用一个共享的 PointNet 来做“投票聚合 + 提案”。这带来一个传统方法难以企及的能力:即使只观察到物体的部分表面,也能提出非模态(amodal)边界,也就是把被遮挡、没被扫描到的那部分也预测出来,同时还能输出朝向、类别等更多参数。
投票簇的聚合方式也很有讲究。投票本质是一簇高维点,可以交给通用的点集学习网络来处理。论文把簇内每个投票的坐标先变换到“以簇中心为原点、除以半径 r”的局部归一化坐标系里,然后让 MLP1 独立处理每个投票(坐标 + 特征),在通道维度上做最大池化,得到一个聚合特征,再交给 MLP2 进一步整合,最终输出这个簇的提案——提案是一个多维向量,包含物体性得分、三维框参数(中心、朝向、尺度)和语义分类得分。
为什么要用“学出来的聚合”而不是“手工聚合”?论文用一组对照实验回答得很清楚。同样是半径 0.3 的聚合范围,直接对投票特征做平均池化(mAP 47.2)、最大池化(47.8)、按距离加权的 RBF 平均(49.0),都明显低于用 PointNet 做聚合的平均池化(56.5)和最大池化(57.7)。差距的来源在于:投票簇里混着来自非物体点、以及邻近杂物的“杂票”(clutter votes),手工池化没有能力把它们过滤掉,会把噪声特征也一并累加进去;而学出来的聚合模块可以学会如何忽略低质量的投票、只突出真正来自物体的证据。
聚合半径本身也有一个最优区间。论文实验发现,半径从 0 增大时 mAP 先升后降,在 0.2 附近达到峰值。道理很直观:半径太小,能聚合到的投票太少、上下文不足;半径太大,引入的杂票变多,把好票污染了,性能反而下降。
论文还给出了一幅非常直观的“投票可视化”,本博客在此用文字转述:在典型室内场景里,把每个源点指向其投票的偏移画出来,可以看到,落在床、沙发这类物体表面上的源点,它们的投票都收敛地指向物体中心附近;而落在墙上、地板上这类杂乱背景里的源点,要么因为缺乏结构而“投向了无处”,要么因为靠近物体、攒够了上下文,也跟着投向了物体中心。这个画面清晰地解释了投票“为什么能形成簇”:物体不同部位的点,各自带着局部证据,却指向同一个中心,于是投票在中心附近自然密集;而杂点的投票是散的、无结构的,聚不成簇。簇的形成与否,本身就是一种“有没有物体”的信号,这正是后续物体性得分可以利用的结构。
七、技术创新的第三块拼图:多任务损失与整体训练策略
把投票、提案、分类串成一条可训练的流水线,需要一套精心配比的多任务损失。VoteNet 的总损失是这样的:
L_VoteNet = L_vote-reg + λ1·L_obj-cls + λ2·L_box + λ3·L_sem-cls
其中投票回归损失前面已介绍,λ1 = 0.5、λ2 = 1、λ3 = 0.1 用来把各项损失拉到相近的量级。
物体性损失(L_obj-cls)用交叉熵做二分类。正负样本的划分标准很有讲究:投票中心落在某个真值物体中心 0.3 米以内,视为正样本;距离任何中心超过 0.6 米,视为负样本;介于两者之间的投票,干脆不惩罚(被忽略)。这个“忽略带”避免了边界处的投票被不稳定地判为正或负,是一种很实用的工程处理。
三维框损失(L_box)沿用了当时成熟的参数化方式,把框估计解耦成三部分:中心回归、朝向(heading)估计、尺寸估计。中心回归用到了 Chamfer 距离:它要求每个正提案都靠近某个真值物体、并且每个真值物体中心附近都有提案。后半条要求还有一个额外的妙用——它反过来鼓励那些靠近物体、但本身不在物体表面上的点,也去为该物体中心投票,从而进一步扩大检测上下文。朝向用分箱的方式:把 360 度分成若干朝向 bin,每个 bin 既预测一个分类得分,也预测一个相对 bin 中心的回归偏移;尺寸则用若干尺度模板,为每个模板预测分类得分和三个尺度回归偏移。回归一律用鲁棒的 smooth-L1(Huber)损失。
语义分类损失(L_sem-cls)就是标准的 N 类交叉熵。整套损失只在正投票簇上计算框与类别损失,并按正簇数量归一化。
实现细节上,VoteNet 有几个值得记录的工程决策。输入除了 XYZ 坐标,还为每个点额外附上“高度特征”——点到地板的高度,地板高度用场景内所有点高度的 1% 分位数近似估计。论文在附录里验证,加了这个高度特征,两个数据集的 mAP 都有一致的提升(SUN RGB-D 从 57.0 到 57.7,ScanNet 从 58.1 到 58.6)。室内场景里,物体高度是识别力的一个重要线索,桌子、床、柜子各有典型高度区间,这个看似轻量的特征确实有用。
数据增强方面,论文在训练时对场景点做在线随机子采样、水平方向随机翻转、绕竖直轴在 ±5° 内随机旋转、整体在 0.9 到 1.1 之间随机缩放。这些增强配合 PointNet++ 骨干,让模型在有限数据上学会了更强的泛化。
训练与推理上,VoteNet 用 Adam 优化器、批大小 8、初始学习率 0.001,在第 80 轮和第 120 轮各把学习率降低 10 倍。训练到收敛,在 SUN RGB-D 上约需 10 小时(单张 GPU),ScanNetV2 上不到 4 小时。推理时,模型能一次前向处理整片场景点云并生成全部提案,提案再经过 3D NMS(IoU 阈值 0.25)得到最终输出。
把网络的具体数字摆出来,能让上面这些设计落到实处。骨干网络包含四个 set-abstraction(SA)层和两个特征上采样(FP)层:SA 层的球半径从 0.2 米、0.4 米、0.8 米依次增大到 1.2 米,同时把输入逐步下采样到 2048、1024、512、256 个点;两个 FP 层再把特征上采样回 1024 个点、每点 256 维特征并带回坐标。投票模块是一个输出尺寸为 256、256、259 的多层感知机,最后 259 维里,前 3 维是 XYZ 偏移、其余是特征残差。提案模块用半径 0.3 的聚合层加 MLP,聚合后的特征再经第二个 MLP 输出物体性、框参数和类别——在 SUN RGB-D 上朝向分为 12 个 bin、尺度模板与类别各 10 个,在 ScanNet 上朝向仍为 12 个 bin、尺度模板与类别各 18 个。这些数字看起来琐碎,但它们共同说明了一件事:VoteNet 的骨干与提案结构并不比主流检测器复杂,真正的增益来自“投票”这一机制,而不是来自堆叠更深更宽的网络。
八、为什么投票能起作用:针对性的分析实验
技术措施讲了这么多,最关键的疑问是:投票到底是不是真的有用?如果只是把网络结构改来改去,为什么偏偏投票能带来这么大的收益?论文用两个分析实验,把这个机理讲得非常扎实。
第一个实验是“投不投票”的消融对照。论文搭了一个与 VoteNet 共享骨干、但把投票模块整个拿掉的基线 BoxNet:它直接从源点的特征上预测三维框,不做投票。为了让两者容量相当,BoxNet 也带了一个提案用的聚合层,只是它聚的是“源点簇”而不是“投票簇”。结果差距惊人:在 SUN RGB-D 上,BoxNet 只有 53.0,VoteNet 是 57.7;在 ScanNet 上差距更大,BoxNet 只有 45.4,VoteNet 高达 58.6。投票这一改动,在 ScanNet 上带来了超过 13 个点的 mAP 提升。
投票究竟帮了什么?论文用一个典型场景的覆盖度可视化说明了机制。把那些“一旦被采样、就能生成准确提案”的点在场景上标出来,可以看到:VoteNet 的“好点”覆盖范围比 BoxNet 广得多。原因正是前文反复强调的:稀疏点云里,表面点离物体中心太远,直接从表面点预测框,置信度低、非模态框不准;而投票把那些低置信度的点先“拉”向中心,让它们能在中心附近彼此强化假设。投票本质上是在“扩大检测上下文”。
第二个实验进一步揭示了投票收益的来源规律。论文对 SUN RGB-D 的每个类别,同时画出两样东西:VoteNet 相对 BoxNet 的 mAP 增益(蓝点),以及该类物体表面点到其非模态框中心的平均距离(红方块,用类别平均尺寸归一化)。把类别按前者排序后,两者呈现很强的相关性——物体表面点离框中心越远,投票带来的收益越大。这正好对应前文说的空腔问题:桌子、浴缸这类“表面点离中心远”的物体,正是 VoteNet 相对其他方法提升最明显的地方。投票机制精准地打在痛点上。
还有一组关于“投票上下文”的实验也很有意思。论文尝试让网络从骨干网络的不同层级发起投票(SA2、SA3、SA4、FP1、FP2、FP3),发现即使从很浅的 SA2 投票,mAP 也能到 51.2,而从 FP2 发起投票时达到最好的 57.7;再往上加深到 FP3,性能反而略降(57.1)。这说明,投票需要足够的上文来消歧,但也不是上下文越大越好——上下文太大,噪声也跟着进来。
与提案数量有关的实验,则从另一个侧面展现了 VoteNet 的“底气”。论文统计了平均精度(AP)和平均召回(AR)随提案数量变化的曲线,并比较了两种使用提案的方式:联合式(每个提案只判给它得分最高的那个类别)和逐类别式(把每个提案复制给全部类别、用语义概率乘物体性概率排序)。结果显示,只用 10 个提案,AP 就能到 45% 左右;用 100 个提案,AP 就能超过 57%;把提案放到 1000 个时,联合式的召回可以到 78.7%,逐类别式更高,能到 87.7%。换句话说,VoteNet 不需要“广撒网”式的密密麻麻的提案也能拿到可观精度,它的提案是“少而有效”的——这又一次印证了投票机制把证据聚到了该聚的地方,而不是靠数量堆召回。
九、应用场景的落地视角:效率、规模与模型紧凑性
本博客在前文把 VoteNet 的创新讲成了“能不能更准”,但它对落地场景的意义,还藏在“简洁、紧凑、高效”这三个词里。在展开这三者之前,先交代两个真实场景的“出身”,因为理解它们,才能理解 VoteNet 面对的是怎样的数据。
SUN RGB-D 是一个单视角 RGB-D 三维场景理解数据集,包含约五千组训练数据,每一组都是从一个视角用深度相机拍下的深度图,并带有几十类物体的非模态带朝向三维框标注。它的特点是“只见一部分”——一个视锥里能看到的物体表面往往不完整,遮挡、自遮挡都很常见,这是机器人近距离感知的真实写照。喂给 VoteNet 时,需要先用相机内参把深度图反投影成点云,评测遵循通行协议、只看最常用的十个类别。
ScanNetV2 则完全不同,它是室内场景三维重建网格的数据集,包含约一千二百组训练样本,来自几百个不同的房间,标注了十八个类别的语义与实例分割。它的特点是“尽量完整”——每个房间都经过多视角重建,物体表面比单视角深度图完整得多,覆盖范围也更大、物体更多。因为没有非模态带朝向的框标注,VoteNet 在这里预测的是轴对齐包围盒,而不是带朝向的框。
这两个场景互为补充:一个代表“单视角、部分可见、带朝向”的实时感知,一个代表“多视角重建、相对完整、轴对齐”的场景理解。VoteNet 在这两种不同的数据形态上都取得了当时最好的结果,这本身就是对它“通用性”的有力背书——同一个网络、同一套超参数,能同时驾驭两种差异很大的点云输入。
模型规模方面,VoteNet 的权重只有约 11.2 MB。作为对比,当时在 SUN RGB-D 上表现最好的方法之一,模型大小约 47 MB——VoteNet 比它小了四倍以上。推理速度方面,在 ScanNetV2 上,VoteNet 每帧约 0.14 秒;在 SUN RGB-D 上约 0.10 秒。作为对比,当时 ScanNetV2 上的最优方法之一,离线批处理平均每帧也要约 2.85 秒——VoteNet 比它快了二十倍以上,而且论文特别说明,它用的是可实时部署的串行处理方式,而不是离线批量方式。
为什么能这么省?根本原因还是“只在实际采到的点上计算,不在空腔里白找”。体素化方法在空体素上做三维卷积是浪费算力,区域提案网络在空腔附近生成提案是额外开销,而 VoteNet 从机制上避开了这两处浪费:投票只在表面点之间进行,聚类和提案只发生在投票汇聚出来的、有意义的簇上。这种对稀疏性的利用,不是靠工程优化堆出来的,而是架构层面的天然优势。
把这一点放到应用场景里看,意义很具体。对机器人抓取来说,一个 11 MB 的模型可以轻松放进边缘设备,0.1 秒左右的单帧时延也足以支撑实时感知;对室内三维重建与语义地图来说,处理整片场景点云只需一次前向,不必依赖离线批量计算;对增强现实里的平面遮挡、物体标注来说,“只用几何、不用彩色图像”意味着可以摆脱对光照和纹理的依赖,在弱光、无纹理环境下依然可用。这几个属性叠加起来,就是“既有精度、又能落地”的组合。
十、效果概览与局限(略作交代)
按照本博客的写作重点,效果与局限只作简要交代,更多篇幅留给读者去体会“为什么能行”。
在 SUN RGB-D 验证集上,VoteNet 用纯几何输入(仅点云),取得了约 57.7 的 mAP@0.25,超过了所有使用“几何 + RGB”乃至多视角 RGB 的既有方法。在 ScanNetV2 验证集上,它只用几何输入就把 mAP@0.25 推到了 58.6,比当时最接近的方法高出一大截,而后者还用了多视角彩色图像。尤为难得的是,两个数据集上,网络用了完全相同的超参数——这不是针对某一数据集调出来的结果。
局限方面,最明显的一点是它对“靠颜色和纹理才能区分”的物体无能为力。由于完全不使用 RGB 信息,像门、窗、画这类薄而平面的物体,检测几乎是不可能的;极端的局部遮挡下,大型物体的非模态框也会预测得不够理想。论文把“如何把 RGB 引入检测框架”明确列为未来方向,也期待投票与深度学习的组合能在六自由度位姿估计等更多任务上开花。
总结
这篇工作把“投票”这一经典几何思想,第一次以完全端到端、可微的方式嵌进了点云深度网络,从而绕开了体素化、鸟瞰投影、二维驱动这三条主流路线的结构性代价,只用纯几何就能在室内三维检测上超越所有依赖彩色图像的方法。
回顾整条技术路线,VoteNet 的核心创新可以这样概括:它把“从稀疏表面点到空腔中心的跨越”问题,巧妙地改写成了“让每个表面点为物体中心投票”的机制。用共享的深度网络学习投票偏移,用最远点采样和近邻分组把投票聚成簇,用可学的点集网络在簇内聚合特征并生成非模态提案,再用一套多任务损失把投票、物体性、三维框、语义类别统一训练。投票不仅把属于同一物体的证据主动拉近,还让“表面点离中心越远、收益越大”的困难类别成为它最擅长的地方。这是一次对“回归遥远的中心”这一病根的手术式治疗:不硬着头皮在一步里把框回归准,而是让证据先“走到”中心,再在中心处从容判断。
对计算机视觉实践而言,这篇工作最大的启发或许在于:真正有效的创新,常常不是把网络叠得更深更宽,而是回到问题的物理本质,找到那个“看似绕远、实则抄近道”的机制。稀疏点云里的空腔,不会因为网络变深而消失;但当无数个表面点学会朝着同一个中心投票时,那个看不见的中心,就被投票本身“顶”出来了。
从应用拓展的角度再看一眼这篇工作的“留白”,也别有味道。论文明确把“把 RGB 信息引入检测框架”列为下一步方向——纯几何已经这么强,几何加颜色的组合显然有更大的想象空间;同时,它也把这份检测结果用于下游的三维实例分割,并期待“霍夫投票 + 深度学习”的组合能推广到六自由度位姿估计、模板化检测等更多任务。对技术从业者来说,VoteNet 留下的不仅是一个检测器,更是一条“把经典几何先验变成可训练模块”的方法论——沿着这个思路,很多看起来“过时”的经典算法,都可能在深度学习的外壳下重获新生。本博客认为,这正是读懂 VoteNet 之后最值得带走的东西。
最后,计算机视觉实践想再强调一遍这篇工作对“问题定义”本身的贡献。它没有发明一个新的算子、没有堆出一个更大的网络,它做的其实是把困扰点云检测多年的那个结构性难题——中心在空腔、表面点够不着——重新定义成了“投票”这个可以被优化、可以被学习、可以被端到端训练的机制。一个好的问题定义,往往比一个好的网络结构更能决定上限。这也提醒我们这些技术从业者:在追新网络的同时,不妨先问问自己,眼前的问题,是不是被我们用错了的方式表述着。VoteNet 用一句“让表面点学会投票”,给出了一个值得反复品味的示范。
参考:
Deep Hough Voting for 3D Object Detection in Point Clouds
URL:https://arxiv.org/abs/1904.09664
本博客是对上述作者原创的技术解读,仅供学习交流,不代表原作者观点。 本博客部分示意图来源于上述作者论文,版权归原作者所有。
本博客由计算机视觉实践撰写的博客。若本博客对你有帮助,欢迎收藏、转发、点赞,也欢迎在评论区与我们一起探讨计算机视觉-语言预训练的更多可能。