![]()
你有没有想过,一台机器人走进一个房间,要"看懂"这个房间需要处理多少信息?
如果给它看一张普通照片,一个视觉语言模型大概需要处理几百个视觉标记。但如果让它理解一个完整的三维房间,答案可能是:一千四百个标记,甚至更多。这不是危言耸听,这是真实存在于当下最先进的3D视觉语言模型里的问题。
想象一下你请一个助理帮你整理房间,结果这个助理坚持要把房间里每一粒灰尘的坐标都记下来才肯开始工作。效率可想而知。这正是当前3D视觉语言模型面临的真实困境,而这篇来自釜山国立大学的论文,提出了一套名叫3DZip的方法,试图解决这个问题。
从2D到3D,AI是怎么"看懂"空间的
要理解3DZip解决了什么问题,得先搞懂3D视觉语言模型是怎么工作的。
早期尝试让AI理解三维空间的做法,是直接用点云数据训练专门的三维编码器。
点云*:由大量三维坐标点组成的数据集合,通常用来表示物体或场景的空间形状,类似于用无数个点把一个立体物体"描"出来。
但这条路走得并不顺畅。三维语言数据集太少,专门的三维编码器能力也有限,训练出来的模型表现远不如那些基于强大二维视觉骨干网络的方案。
于是研究者们想出了一个更聪明的办法:把已经训练得很成熟的二维视觉模型直接搬过来用,再想办法给它加上空间信息。这就是所谓的"投影式"方法,其中最具代表性的工作叫LLaVA-3D。
它的做法是这样的:先用多个摄像头从不同角度拍摄同一个场景,每张图片经过一个图像编码器提取出一堆二维视觉特征。然后借助深度图和相机位姿信息,把这些二维特征反向投影回三维世界坐标系,再给每个特征点加上一个可学习的三维位置编码。这样一来,原本平面的图像特征就带上了空间坐标,变成了"具备几何感知能力的三维标记"。
这个设计的巧妙之处在于,它不需要专门训练一个三维编码器,直接复用了二维模型的强大表达能力,同时又通过位置编码把空间结构给补上了。
但代价也很明显:如果你从二十个不同角度拍摄同一个房间,每个角度都会产生几百个视觉标记,全部投影到三维空间里叠加起来,标记数量会爆炸式增长,动辄超过一千个。这就好比你想给一份文件拍照存档,结果不是拍一张,而是从二十个角度各拍一张再全部粘贴在一起,文件是清楚了,但体积也跟着涨了二十倍。
冗余到底藏在哪里
论文作者们没有急着上来就砍标记数量,而是先做了一件更基础的事:搞清楚这些冗余标记到底是怎么产生的。
他们发现,多视角投影带来的冗余其实分成两种性质完全不同的类型。
第一种叫点级冗余。当同一个物理表面被好几个摄像头角度反复拍到时,投影回三维空间后,这些标记会落在几乎相同的位置上。想象你从客厅的四个角落各拍一张沙发的照片,沙发扶手那块区域会在每张照片里都出现,投影到三维空间后,这块扶手对应的空间位置就被四份几乎一样的标记重复占据了。这种冗余相对好处理,因为它们的空间坐标本来就很接近,用体素聚合(把三维空间切成一个个小方块,方块内的标记做平均)就能大幅压缩。
第二种冗余则棘手得多,叫对象级冗余。同一个物体,比如一张沙发,因为观察角度不同,会产生来自沙发正面、侧面、背面的多组标记。这些标记描述的是同一个物体实例,但因为沙发本身有一定体积,正面和背面的空间坐标其实相隔挺远,单纯靠空间聚合根本没法把它们合并到一起。
这就好比你让三个人分别站在一辆车的车头、车侧、车尾拍照,然后把三张照片按坐标位置堆在地图上。车头和车尾的坐标点相距好几米,你没法靠"距离近就合并"这个规则把它们认成同一辆车,除非你能看懂照片内容,知道这三张照片其实拍的是同一个东西。
作者们用实际数据验证了这个直觉。他们统计了SQA3D数据集里十个场景中所有物体获得的标记数量分布,结果发现即便做完体素聚合,标记分配依然呈现出严重的长尾现象:少数几个大物体占据了绝大多数标记名额,最多的一个物体拿到了一百六十五个标记,而中位数附近的物体可能只有个位数。
更有意思的是他们对比了两种选标记的策略。一种叫XYZ-DPP,纯粹依据空间坐标的分散程度去挑选标记,这种策略下,标记依然扎堆分布在少数几个几何体积大的物体上,只覆盖了百分之五十一的物体实例。另一种叫Feature-DPP,依据的是特征空间里的语义差异,这种策略把物体覆盖率一下子提到了百分之七十。
这个对比结果传递了一个很关键的信息:光靠空间上"分散着选"是不够的,真正决定一个标记是否有代表性的,是它在语义特征空间里跟其他标记有多不一样。
3DZip的三段式瘦身方案
搞清楚了冗余的两种来源后,3DZip的设计思路就顺理成章了:既然冗余有两种性质,压缩策略也应该分层处理,而不是用一个笼统的规则打天下。
整个流程分成三个阶段,一步步递进。
### 第一步:粗粒度体素化,先把重复的点级观测拍扁
第一阶段做的事情相对朴素:把三维空间切分成边长固定(论文中设为0.2米)的立方体网格,也就是体素。
体素*:三维空间中按固定尺寸划分出的立方格子,类似于把一个房间用乐高积木的网格切开,每个格子内的所有内容会被当作一个整体来处理。
落在同一个体素里的所有标记,会被取平均值(特征取平均,坐标也取平均),合并成一个新的标记。这一步专门针对点级冗余,因为同一物理表面被多次观测产生的标记,坐标本来就非常接近,很容易落进同一个体素格子里。
论文里专门做了一个量化实验来验证这一步的效果。他们借助计算机视觉里常用的关键点检测和匹配工具(SuperPoint和LightGlue),追踪同一个物理点在不同视角下被观测的次数,定义了一个叫"点级冗余度"(PLR)的指标。结果显示,不做体素化时,平均每个物理点会对应4.74个标记;体素边长设为0.2米时,这个数字降到2.5,同时物体纯净度(衡量一个体素里是否混入了不同物体的标记)依然保持在0.915这样比较高的水平。
如果体素切得太大,比如0.3米,纯净度会掉到0.847,说明不同物体的标记开始被错误地合并在一起,损害了细粒度的空间信息。这就像收拾书桌时把东西按抽屉分类整理,抽屉太小分类太细效率低,抽屉太大又会把钢笔和橡皮混在一起分不清楚。论文中通过实验找到了一个平衡点:0.2米的体素尺寸在64个标记预算下取得了最佳的问答准确率52.8分。
值得一提的是,即便做完体素化,剩余的点级冗余度依然是2.5,这说明单靠体素化远远不够,还有相当多的重复信息没被处理掉,这正好为下一阶段的工作埋下伏笔。
### 第二步:用行列式点过程挑出"最不一样"的锚点
体素化处理完点级冗余之后,轮到解决更棘手的对象级冗余了。这一步的核心工具,是一个听起来有点玄乎但原理并不复杂的数学工具:行列式点过程(Determinantal Point Process,简称DPP)。
DPP*:一种源自统计物理和概率论的数学工具,专门用来从一堆候选项里挑出一个"尽量互不相似"的子集,广泛应用在推荐系统的多样性优化里。
DPP的核心思路是这样的:把所有候选标记的特征向量两两之间算相似度,构造出一个相似度矩阵,然后从中挑选出一个子集,使得这个子集对应的相似度矩阵的行列式尽可能大。行列式在几何上代表的是这组向量张成的"体积",向量之间越相似,张成的体积就越小;向量之间越不一样,张成的体积就越大。换句话说,最大化行列式,本质上就是在最大化这批被选中标记的多样性。
论文里用的是余弦相似度作为衡量特征相似程度的标准,先把每个体素标记的特征向量做归一化,再算它们两两之间的点积作为相似度矩阵的元素。实际计算行列式最大化是个NP难问题,所以采用了一种基于Cholesky分解的贪心近似算法,每次挑一个能让"新增多样性"最大的标记,效率上是可以接受的。
这里有个特别值得琢磨的设计选择:为什么用特征空间的相似度而不是空间坐标的相似度来构造DPP的核矩阵?
答案就在前面提到的那组对比实验里。用空间坐标构造相似度(XYZ-DPP)会导致标记选择偏向于几何上分散的位置,但空间上分散不等于语义上不同,同一面墙的不同角落,坐标相距很远,内容却高度雷同。而用特征空间构造相似度(Feature-DPP),选出来的标记会天然倾向于代表不同的物体和不同的语义内容,因为算法压根不知道也不关心坐标在哪里,它只关心"这个标记跟已经选中的标记像不像"。
这就好比你去逛超市想尝遍所有种类的食物,如果你的策略是"每隔十米挑一样东西",你可能会把货架前后两端摆的都是薯片的地方各拿一包,因为它们隔得够远;但如果你的策略是"每次挑一样跟我手里已有的东西味道差别最大的",你自然会去尝试完全不同种类的食物。前者是空间策略,后者才是真正意义上的多样性策略。
论文的消融实验也验证了这个直觉:在64个标记的预算下,用空间距离构造DPP核只能拿到50.1分的问答准确率,换成特征距离后直接跳到52.8分,差距超过两分半,这在严苛的标记压缩场景下已经算是相当显著的提升。
为了排除这个结果只是DPP算法本身特殊性带来的巧合,论文还额外对比了另外两种促进多样性的经典算法:最远点采样(FPS,每次贪心选取与已选集合特征距离最远的点)和最大最小多样性问题(MMDP,最大化被选中集合里最近的一对点之间的距离)。结果显示,三种多样性策略的表现相差不大,都明显优于纯空间策略,DPP略微领先,可能是因为它基于行列式的目标函数考虑的是全局多样性,而不是像贪心算法那样只关注局部的最近点距离。这个对照实验说明了一个更本质的道理:真正起作用的是"追求特征多样性"这个思路本身,具体用哪种算法实现反而是次要的。
### 第三步:带着空间约束把剩余标记归并回锚点
DPP选出来的锚点虽然多样性很强,但毕竟只是原始信息的一小部分,剩下没被选中的标记里,其实还藏着不少有价值的补充信息。第三阶段要做的,就是把这些"落选"的标记想办法利用起来,而不是简单粗暴地全部扔掉。
具体做法是:对每一个没被选为锚点的标记,先在特征空间里找到跟它最相似的锚点,把它临时"认领"给这个锚点。但这里有个关键的把关条件,只有当这个标记跟它认领的锚点在空间网格坐标上的距离也足够近(小于某个阈值τg)时,才允许真正合并;如果空间距离超过了这个阈值,说明这两个标记虽然特征相似,但物理位置相隔太远,很可能不是同一个局部区域的内容,这种情况下就直接舍弃这个标记,不参与合并。
这一步体现的是论文标题里"空间感知"这四个字的具体落地:单纯的特征相似性可能会把两个相隔很远但恰好长得很像的物体错误地捏在一起(比如两把长得一样的椅子分别放在房间两端),加上空间距离的双重约束,就能避免这种误合并,同时又能让锚点从周边真正相关的标记中吸收有用的上下文信息。
被认领并且通过空间检验的标记,会跟锚点做特征平均,锚点的坐标则保持不变,这样最终产出的压缩标记集合,既保留了DPP选出的语义多样性骨架,又通过局部合并补充了细节。
论文的消融实验显示,去掉这个合并步骤,64标记预算下的准确率从52.8掉到52.5;去掉空间约束(也就是允许任意特征相似的标记合并,不管空间距离多远),准确率同样掉到52.3。两者叠加起来的完整版本表现最好,说明这两个设计确实是互补的,缺一不可。
关于空间约束阈值τg的取值,论文测试了1、3、5、7四个选项,发现5是个比较均衡的选择:太小会限制能吸收的上下文信息量,太大又会增加把不相关标记错误合并的风险。
实验结果:128个标记就能保住九成半的性能
方法讲完了,接下来看看实际效果如何。
论文在三个具有代表性的三维问答基准上做了测试:SQA3D(情境化空间问答,要求模型理解智能体所处的具体方位和朝向)、ScanQA(基于ScanNet场景的问答任务)、OpenEQA(开放词汇的具身推理问答,涵盖属性识别、功能推理、物体定位等七个能力维度)。
对比的基线方法包括专为二维视觉语言模型设计的几种主流压缩技术(FastV、SparseVLM、VisionZip、VisPruner),以及同样考虑了三维结构的DTC方法和纯体素化方案。
结果显示,在保留128个标记(相当于原始一千四百一十个标记的百分之九点一)的情况下,3DZip在SQA3D上拿到53.2分,OpenEQA拿到58.6分,相对完整未压缩模型(55.7分和60.3分)保留了94.7%的性能。而排名第二的DTC方法在同样预算下只保留了88.8%左右。
更极端的压缩场景下差距会进一步拉开。当标记预算压到64个(仅占原始数量的4.5%)时,3DZip依然能保留92.3%的性能,SQA3D得分52.8,而VisionZip只有49.1分,DTC是50.2分。即便压到32个标记(占比2.3%),3DZip仍能维持88.9%的相对性能,SQA3D得分51.1,明显领先于所有对比方法。
论文还专门做了按问题类别拆分的分析。在OpenEQA的七个能力维度里,3DZip在属性识别(比如判断物体颜色、材质)和物体识别这两类任务上提升最明显,128标记预算下分别达到64.2分和53.2分,属性识别几乎追平了完整未压缩模型的64.0分。在对空间理解要求最高的物体定位和空间理解这两个维度上,3DZip同样保持领先,这恰好印证了前面反复强调的核心逻辑,兼顾特征多样性和几何一致性,对空间密集型推理任务尤为重要。
有意思的是,在物体状态识别这个类别里,FastV这种基于语言模型注意力的压缩方法反而略微超过了未压缩基线(75.6对73.7)。论文分析认为,这类问题(比如判断"笔记本电脑是否开着")往往是二元判断,对空间推理要求不高,而FastV这种基于文本查询相关性选标记的方法恰好擅长精准锁定跟问题直接相关的局部区域。
效率提升:不只是准确率好看,速度也真的快了
压缩标记的终极目的是提升推理效率,这一点论文用实打实的硬件测试数据说话。
在单张NVIDIA RTX 4090显卡上,完整未压缩的LLaVA-3D模型处理一个样本平均需要342毫秒。而3DZip压缩到128个标记后,这个数字降到178毫秒,相当于1.92倍的加速。
具体拆解一下这个加速从哪里来:标记数量从1410降到128,减少了90.9%;对应的浮点运算量(FLOPs)从9.18万亿次降到0.9万亿次,减少了90.2%;KV缓存(大语言模型推理时用来存储历史信息的显存开销)从722MB降到101MB,减少了86%。而准确率的代价只有2.5分(从55.7掉到53.2)。
KV缓存*:大语言模型在生成文本时,为避免重复计算之前每个词元的注意力信息而保存的中间结果,标记数量越多,这部分显存占用越大。
值得一提的是,虽然DTC方法在同样的128标记预算下理论浮点运算量跟3DZip接近,但实际运行速度3DZip反而更快(178毫秒对196毫秒)。原因在于3DZip的标记选择是"一遍过"的几何感知选择流程,不需要像DTC那样进行迭代式的匹配和精细调整。论文里专门测算了标记选择这一步本身的耗时:DTC的迭代匹配算法需要36毫秒,而3DZip基于DPP的贪心选择只需要18毫秒,几乎减半。
局限性:还没解决的两个问题
论文没有回避自己方法的短板,坦诚地讨论了两个尚待改进之处。
第一个问题出在第一阶段的体素化上。体素化虽然有效压缩了点级冗余,但对小物体不太友好。如果一个小物体(比如一个杯子)恰好和旁边的大物体或背景落在同一个体素格子里,它的标记就可能被平均掉,细节信息被稀释。论文的细粒度分析证实了这一点:在需要识别精细外观(形状、轮廓、材质、颜色)的问题子集上,完整版3DZip得分30.5,而去掉体素化的版本反而得分31.7,说明体素化确实会牺牲一部分细粒度信息来换取整体压缩效率。
第二个问题是超参数(体素尺寸δ和空间约束阈值τg)目前是固定值,没有根据场景复杂度自适应调整。论文做了一个场景规模的对照实验,把SQA3D场景按体积分成小场景(物体密度高达每立方米1.3个物体)和大场景(密度仅0.37个物体每立方米)两组,发现小场景更适合较小的δ值和更严格的τg(避免密集物体被误合并),大场景则相反。虽然固定设置(δ=0.2米,τg=5)整体上是个不错的折中方案,但作者也承认,让这些参数根据场景密度自适应调整,是一个值得继续探索的方向。
写在后面
读完这篇论文,最触动我的其实不是压缩比或者加速倍数这些数字,而是那张展示物体级标记分布的长尾图。
一千七百多个物体实例里,最大的那个物体独占两百六十六个标记,而绝大多数物体连十个标记都分不到。这个画面让我意识到一件事:很多时候我们以为"压缩"是个纯工程问题,其实背后往往藏着一个更根本的分配公平性问题。空间上占地方大的物体天然会产生更多观测数据,如果不施加干预,模型的注意力资源会不自觉地被这些"大块头"物体霸占,真正决定问答正确与否的小物体反而被边缘化。
这让我联想到很多资源分配场景里都存在的类似逻辑:曝光量、话语权、计算资源,如果按照"体积"或者"声量"简单分配,往往会导致大者恒大的马太效应。3DZip用特征多样性去打破这种空间上的马太效应,某种意义上是在做一件"按信息含量而非按体积分配注意力"的事情,这个思路或许能启发的领域,比其他三维视觉任务要广得多。
论文里还提到一个我没预料到的细节:DPP选出的锚点在计算耗时上反而比DTC的迭代匹配更快。通常我们直觉里觉得"更精细的算法"意味着"更慢",但这里恰恰相反,一次到位的几何感知选择,比反复迭代打磨的方案效率更高。这提醒我,工程上的优雅有时候不体现在算法多复杂,而体现在有没有找准问题的关键矛盾,然后用最直接的方式去解决它。
那个悬而未决的小物体问题倒是让我挺好奇后续会怎么发展,如果体素尺寸能根据场景里物体的实际大小分布自适应调整,会不会既保住压缩效率又不丢失那些容易被忽略的小物体细节?
Q&A
Q1:3DZip是什么?
A:3DZip是一种针对3D视觉语言模型的标记压缩框架,通过体素化、特征多样性锚点选择和空间约束合并三个阶段,把原本上千个三维视觉标记压缩到128个甚至更少,同时保留94.7%的问答准确率,推理速度提升1.92倍。
Q2:3DZip和其他压缩方法相比优势在哪?
A:现有二维视觉语言模型的压缩方法(如FastV、VisionZip)忽略了三维空间结构,而纯空间聚合方法(如体素化、DTC)又没法解决同一物体因多视角观测产生的重复标记问题。3DZip结合特征空间多样性和几何空间约束,能同时兼顾语义代表性和空间一致性。
Q3:为什么用特征空间距离而不是空间坐标距离来选标记?
A:论文实验发现,按空间坐标分散选标记(XYZ-DPP)只能覆盖51%的物体实例,标记容易堆积在体积大的物体上;而按特征空间差异选标记(Feature-DPP)能把物体覆盖率提升到70%,因为它能识别出真正语义不同的物体,而不只是空间位置分散。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.