微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 让机器人看懂动作,却不需要它看清深度

让机器人看懂动作,却不需要它看清深度

2026-08-26 17:10
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-08-26 17:10 科技行者

你有没有想过一件挺奇怪的事:现在教AI理解人类动作的方法,几乎都要求先精确重建出一副3D骨架,包括每根骨头转了几度、每个关节离地面多高。可现实里,我们观察一个人的动作,靠的通常就是一台普通摄像头,一个平面画面。

这中间的落差,就是这篇论文想要解决的问题。

先说说现在的动作理解AI是怎么工作的。学界有一类模型叫做**运动语言模型**

运动语言模型(MoLM):一种能理解和生成人类动作的AI系统,工作方式类似语言模型处理文字,只不过它处理的是动作序列,可以完成"看动作写文字描述"或者"看文字生成动作"这类任务。

比如MotionGPT这样的代表模型,训练时喂给它的都是动作捕捉设备或者多摄像头系统采集来的高精度3D数据。这些数据里藏着丰富信息:每个关节相对身体中心点的三维坐标、关节的旋转角度、全局位置的移动轨迹。模型在这样干净、完整的数据上练出了不错的本领,能看懂"一个人挥手告别"和"一个人愤怒地摔门"之间的区别。

问题来了。真实世界里,你想让机器人或者监控系统理解一个人在干什么,它能拿到的往往只是一段手机录的视频,一个单摄像头拍下来的2D画面。要从这样的画面里反推出精确的3D姿态,本身就是一个出了名难解决的技术问题,估计得又慢又不准。这就好比你训练了一个厨师只用顶级食材做菜,然后突然让他去菜市场剩菜堆里找同等品质的原料,这中间的落差谁来填?

这篇论文的作者们决定不填这个坑,而是绕开它。

核心问题:动作理解真的离不开3D信息吗

这篇论文提出了一个挺大胆的假设:如果只用2D姿态信息,是不是也能让这些已经训练好的3D运动语言模型正常工作?

这个问题背后其实藏着一个更根本的追问,动作理解这件事,到底有多依赖深度信息和关节旋转这些只有3D数据才有的东西?如果答案是"其实不太依赖",那意味着过去大家训练3D模型、追求高精度3D姿态估计的努力,有一部分可能是在解决一个比实际需要更难的问题。

这不是说3D信息没用,而是说也许对于"理解动作语义"这个具体任务来说,2D信息已经够用了,就像你要判断一个人是在挥手还是在敬礼,光看侧面的平面投影往往就能分辨,不一定非要知道他手臂具体抬高了多少厘米、旋转了多少度。

论文里有一句话说得很谨慎,他们的分析是建立在"2D特征被显式对齐到3D潜空间"这个设定下的,而不是要证明"3D专属信息完全不需要"。这个措辞上的克制其实挺重要,说明作者们知道自己在做的是一个特定条件下的验证,而不是要颠覆整个领域的假设。

带着这个问题,他们设计了一套方案,叫做**2D运动接口**

2D运动接口:一个可以直接插入到已经训练好的3D运动语言模型上的外挂模块,不需要改动原模型的任何参数,就能让原模型接受2D动作输入。它的核心是一个2D动作编码器,负责把2D动作数据翻译成原模型能听懂的"内部语言"。

这个设计思路的巧妙之处在于,它完全不碰原来的运动语言模型,只是在旁边搭了一座桥。

方法拆解:如何让3D模型"看懂"2D输入

要理解这座桥是怎么搭起来的,得先弄明白运动语言模型内部到底长什么样。

论文里提到的这类模型,核心组件是一个叫**VQ-VAE**

VQ-VAE(向量量化变分自编码器):一种把连续数据压缩成离散"词汇表"的神经网络结构。它先用编码器把输入数据变成一串数字向量,然后从一个固定大小的"码本"里找最接近的条目替换掉这些向量,得到的结果就像是把动作翻译成了一串"动作单词",可以像处理文字一样处理它。

的东西。3D动作数据(论文里用一个263维的向量描述每一帧的姿态,包含根关节的旋转速度、位置、21个关节的坐标、旋转角度、速度以及脚部接触信息)先经过VQ-VAE的编码器,压缩成一串连续的隐藏特征,再经过量化,变成一串离散的"动作词元"。这些词元接着被喂给一个语言模型(比如T5),去完成"看动作写字幕"这样的任务。

整个流程很像你把一段舞蹈动作翻译成了一句由"动作单词"组成的话,然后让一个精通语言的AI去理解这句话在说什么。

那2D运动接口要做的事情,就是让原本只认识3D动作的编码器,也能处理2D动作输入。方法是这样的:先训练一个全新的**2D动作编码器**

2D动作编码器:论文中新增的一个神经网络模块,专门负责把2D姿态数据转换成和原3D运动语言模型内部隐藏空间完全一致的表示形式,这样原模型的其他部分完全不用改动,就能直接使用这些转换后的特征。

它接收的是从2D骨架序列构造出来的68维特征向量,包含根关节的线速度、y轴位置、13个关节的相对坐标、关节朝向和速度。这个2D编码器的训练目标很直接:让它输出的隐藏特征,尽可能和原始3D编码器处理同一段动作时输出的隐藏特征长得一样。用的是一个简单的L1损失函数去衡量两者的差距,然后不断调整2D编码器的参数,让差距越来越小。

训练过程中,原本的运动语言模型全程锁死,一个参数都不改,只有这个新加的2D编码器在学习。

这里有个细节值得多说一句,2D动作数据是怎么来的?作者们没有额外去采集新的2D数据集,而是从已有的3D动作数据里"降维"出来的。具体做法是先从3D动作重建出22个关节的骨架,然后随机做一个视角旋转(论文里叫**视角随机化**

视角随机化:训练时人为地让虚拟摄像机从随机的偏航角和俯仰角去观察同一个3D动作,然后投影成2D画面。这样做是为了让2D编码器不会只学会一个固定视角下的动作模式,而是能应对现实中千变万化的拍摄角度。

),再把旋转后的骨架投影到一个平面上,只保留COCO关键点格式里的13个关节点(因为这是市面上主流2D姿态估计器的标准输出格式),最后组装成前面说的68维特征。

这个视角随机化的设计其实挺关键。你想象一下,如果训练时摄像机永远固定在正前方拍摄,那这个编码器学会的可能只是"正面站立挥手"长什么样,一旦摄像机换个角度,比如侧面或者斜上方,编码器可能就懵了,因为它从没见过这种投影形式。就像一个只在老家方言环境里长大的人,突然被扔到另一个说着完全不同口音的城市,哪怕说的是同一种语言,他也得花时间去适应发音的变化才能听懂。视角随机化相当于提前让这个编码器"见过世面",各种角度的投影都练过,遇到新场景时才不至于抓瞎。

论文的实验也验证了这个设计的价值:在后面的分析里,他们让同一段3D动作从不同视角生成2D投影,再看编码器输出的离散词元是否一致。结果显示两个视角下的词元一致率达到63.6%,三个视角下是50.9%,五个视角下是39.7%。这个数字看起来不算特别高,但对比一下随机情况下的期望值会发现差距巨大:如果完全靠随机猜,两个视角下词元恰好一致的概率只有大约0.2%。这说明编码器确实学到了某种跨视角的稳定表示,而不是每换个角度就"失忆"重新理解一遍动作。

效果验证:2D输入真的能打平3D输入吗

光有设计思路还不够,得看实际效果。

论文在两个数据集上做了测试。第一个是HumanML3D,目前规模数一数二的动作语言数据集,包含14616段动作和44970条文字描述,用于测试基础的**动作字幕生成**

动作字幕生成:给定一段人体动作序列,让模型自动生成一句描述这个动作的自然语言文字,类似给一段视频配文字说明。

任务。第二个是FineMotion,它对HumanML3D里的动作重新做了更细粒度的标注,把每段动作切成小片段,每个片段都配有描述身体各部位具体动作的详细文字,一共有420968个片段,用来测试模型能不能理解更精细的动作细节。

对比的三种设置分别是:直接用3D动作作为输入(也就是原来的做法),完全从头用2D动作重新训练整个模型(作为对照,看看不用这个巧妙接口设计会怎样),以及用论文提出的2D运动接口。

结果相当亮眼。以TM2T模型为例,用3D输入时R-Precision的Top-1指标是0.488,用2D运动接口是0.485,几乎没有差别,平均性能差距只有0.2%。而如果完全从头用2D数据训练整个模型,Top-1直接掉到0.279,平均性能差距达到负25.8%。

这个对比说明什么?说明单纯把训练数据换成2D并不会自动带来好效果,模型从零开始学习2D动作的语义关联,效果反而大打折扣。但如果换一种思路,让2D数据去"模仿"一个已经在3D数据上训练成熟的语义空间,效果就完全不同了。这就好比同样是学一门外语,一种方法是扔给你一堆生词表从零死记硬背,另一种方法是找一个已经精通这门语言逻辑体系的老师,让你去理解他脑子里的语法结构,然后用自己的方式去匹配这套结构。后者显然更高效,因为你借用了一个已经被验证过的、成熟的语义框架,而不是自己摸索一套全新的规则。

在MotionGPT模型上,用了2D运动接口之后某些指标甚至比原来的3D输入还略高一点,涨了0.4%。在更复杂的MG-MotionLLM模型上,2D运动接口的平均性能差距是负2.8%,同样明显优于从头训练2D模型的负12.8%。

在细粒度的动作到详细文本任务上,结果也是类似的模式。以MG-MotionLLM为基础模型,序列级别的评测中,3D输入和2D运动接口的差距只有0.5%,而从头训练的2D模型差距达到4.9%。片段级别也是同样的趋势。

这些数字反复印证了同一件事:2D运动接口不是简单地把数据格式换了一下,而是巧妙地让2D数据"借用"了3D模型已经学好的语义理解能力,效果因此稳稳地追上了3D输入。

深挖原理:为什么2D特征能这么好地对齐3D空间

看到这么好的效果,自然会有个疑问,这背后到底发生了什么?2D编码器真的学到了什么有意义的东西,还是只是凑巧在几个指标上表现不错?

论文接下来做了一系列分析,试图打开这个黑箱。

第一个分析是可视化隐藏特征的分布。研究者们把3D动作和对应的2D动作分别喂给各自的编码器,得到两组隐藏特征,然后用**主成分分析**

主成分分析(PCA):一种常用的数据降维方法,能把高维度的数据投影到二维或三维空间里,方便肉眼观察数据点的分布情况和聚集规律。

把这些高维特征压缩到能画在纸上的二维空间里。结果显示,来自3D动作的特征点和来自2D动作的特征点,在这个降维后的空间里大范围重叠在一起。这说明2D编码器确实成功地把2D动作映射进了和3D编码器相同的语义区域,而不是各说各话。

第二个分析更定量一些,看的是量化之后的离散词元有多一致。前面提到的VQ-VAE会把连续特征映射成码本里最接近的词元,作者们统计了同一段动作,用3D数据得到的词元序列和用2D数据得到的词元序列,有多少比例是完全一致的。结果是Top-1一致率44.8%,Top-2是59.6%,Top-3是67.1%。码本大小是512,如果完全随机匹配,Top-1的期望一致率只有大约0.2%,Top-3大约0.59%。44.8%相比0.2%,差了两百多倍,这说明2D编码器确实学到了和3D编码器高度相似的量化规律。

但这里有个耐人寻味的地方:Top-1一致率虽然远高于随机水平,却也没到50%以上,也就是说超过一半的时候,2D和3D给出的确切词元并不完全相同。可前面的实验又清楚地显示,用2D输入做出来的动作字幕质量几乎和3D输入一样好。这两件事看起来有点矛盾,一个"词元经常对不上",另一个"最终效果几乎一样好",是怎么共存的?

作者们提出了一个假设:也许码本里那些"挨得近"的词元,语义上其实非常相似,就算词元编号不完全一致,语言模型收到的信息也差不太多。

为了验证这个猜想,他们设计了一个巧妙的实验,叫做**邻近词元替换测试**

邻近词元替换测试:一种验证码本内部语义结构的实验方法,做法是把原本正确的3D动作词元序列里随机选一半的词元,替换成码本里离它最近的k个邻居中随机挑一个,然后观察这种"故意扰动"之后,语言模型的表现下降了多少。

具体做法是,拿一段本来正确的3D词元序列,随机选一半的位置,把每个位置的词元替换成它在VQ-VAE隐藏空间里最近的k个邻居之一,k从1试到9,同时也做了一组完全随机替换的对照实验。

结果非常说明问题。当k在1到9之间时,性能下降幅度非常小,即使k等于9,平均性能差距也只有负1.4%。但如果是完全随机替换词元,平均性能差距一下子跳到负34.2%,性能断崖式下跌。

这个对比揭示了一件很有意思的事:VQ-VAE的码本内部不是杂乱无章的,相邻的词元大概率代表着相似的动作语义,就像字典里相邻页码的单词往往属于同一个字母开头、含义也可能相近。选错了具体某个词,只要选的是"邻居",语言模型依然能大致读懂你想表达的意思。这也解释了为什么Top-1一致率只有44.8%,最终效果却几乎不受影响:因为就算2D编码器没有精确命中3D编码器选的那个词元,它大概率也选中了那个词元的近邻,语义上的偏差被码本本身的"容错设计"给消化掉了。

这个发现其实挺让人意外的。原本你可能觉得"精确匹配"才是衡量对齐效果的黄金标准,但这个实验告诉我们,衡量标准应该更看重"语义邻近度"而不是"编号完全一致",这对理解离散化表示学习本身也是个有启发的角度。

走进真实世界:从干净数据到手机拍摄的视频

前面所有的实验,用的2D数据都是"干净"的,也就是直接从高质量3D动作数据投影得来的理想化2D骨架。可现实里的视频,拍出来的姿态估计结果哪有这么完美,会有各种噪声、遮挡、镜头畸变。

为了检验这套方法在真实场景下到底行不行,作者们专门搭建了一个新的评测数据集,叫**单目真实世界视频动作数据集**

单目真实世界视频动作数据集:作者们自己收集的一个小规模测试集,找了10位不同年龄段的参与者,让他们模仿HumanML3D里随机抽取的动作片段,用一台iPhone SE手机的普通摄像头拍下来。总共录制了132段视频,14878帧,时长743.9秒。参与者和摄像机之间的相对角度也做了变化,尽量覆盖不同的拍摄条件。

评测时用的文字描述,直接沿用了HumanML3D里对应动作片段原本的字幕。作者们还专门找了三位标注员来人工核查,视频里演的动作和这些字幕描述是否语义相符,结果86.4%的视频字幕对被判定为一致,说明这个数据集的标注质量基本靠谱,剩下的不一致可能是参与者模仿动作时和原始动作有偏差造成的。

有了真实视频,接下来是从视频里估计3D和2D姿态。3D姿态用了TRACE和WHAM两个方法,2D姿态用了ViTPose。这里有个技术细节值得一提,作者们没有选用"2D到3D抬升"这种更简便的方案去获得3D姿态,原因是这类方法通常只能给出关节的3D坐标位置,却给不出运动语言模型所需要的关节旋转角度信息,没法满足263维特征向量的完整需求。

真实视频带来的挑战比想象中更棘手。理想化的2D投影用的是**正交投影**

正交投影:一种简化的几何投影方式,假设观察者站在无限远的地方看物体,物体的远近不会影响它在画面里的大小。这和现实中相机的成像原理不一样。

而真实摄像机拍出的画面遵循的是**透视投影**

透视投影:真实相机的成像方式,遵循近大远小的规律,离镜头越近的东西在画面里显得越大,这和正交投影那种"距离不影响大小"的简化假设完全不同。这种差异会让模型在训练时学到的2D动作分布,和真实视频里观察到的2D动作分布之间产生系统性偏差。

这两种投影方式带来的画面差异,再叠加上姿态估计器本身的误差,会让训练时用的"干净2D数据分布"和真实视频里得到的"带噪声2D数据分布"出现明显的偏移。

为了解决这个偏移问题,作者们又设计了一个小插件,叫**真实视频适配器**

真实视频适配器:一个专门用来纠正真实视频姿态估计噪声的轻量级模块,插在2D动作编码器前面,负责把带噪声的、来自透视投影的2D姿态数据,尽量拉回到训练时用的那种干净的、正交投影风格的数据分布上,减少噪声对后续理解的干扰。

这个适配器怎么训练呢?现实里没有"真实视频对应的精确3D动作"这种成对数据,所以作者们想了个办法,用AMASS这个干净的3D动作数据集,通过Pyrender工具把3D动作渲染成视频,再用ViTPose对渲染出来的视频做2D姿态估计,这样就人工构造出了一批"伪真实"的训练数据对,一边是干净的3D动作真值,一边是带着姿态估计噪声的2D估计结果。用这批数据训练适配器,目标同样是最小化和3D特征之间的差距。

这个思路挺聪明的,本质上是用虚拟渲染去模拟真实拍摄会产生的那种误差模式,然后专门针对这种误差去纠偏。这就像你想训练一个人在嘈杂环境下听懂别人说话,但又没法一直拉着真人在嘈杂餐厅里陪你练习,于是干脆录一段干净的录音,人工叠加各种嘈杂的背景噪音制造出模拟场景,反复练习分辨能力。等真到了嘈杂的餐厅,这种练出来的抗噪本领就能派上用场。如果没有这个适配器环节,直接拿正交投影训练出来的编码器去处理透视投影的真实视频,那模型就相当于在"错误的假设"下工作,效果必然打折扣。

真实视频上的对决:2D还是3D更划算

有了适配器加持,接下来就是真刀真枪的比较:在真实视频这种噪声环境下,到底是用2D姿态估计输入更好,还是用3D姿态估计输入更好?

结果相当明确。加了真实视频适配器的2D输入,在几乎所有指标上都超过了各种3D输入方案,无论是用哪种3D姿态估计器。

以TM2T模型为例,参照原始3D动作(论文里称为Ref 3D Input,也就是收集视频时依据的那段原始HumanML3D动作,不是严格意义上视频里实际做出动作的3D真值)的BLEU-1指标是0.599。用TRACE估计的3D姿态,BLEU-1掉到0.453,平均性能下降37.7%。用WHAM估计的3D姿态稍好一点,0.474,下降35.9%。用ViTPose估计的2D姿态,不加适配器时是0.554,下降18.5%,已经比两种3D方案好不少。而加了真实视频适配器之后,BLEU-1达到0.619,反而比参照的原始输入还高,平均性能提升4.3%。

MotionGPT和MG-MotionLLM模型上也能看到相似的规律,加了适配器的2D输入始终优于所有3D输入方案。

这里还有个容易被忽略但很关键的信息:计算成本。WHAM这类先进的3D姿态估计方法,每帧需要250.2 GFLOPs的计算量(不算人体检测这一步),而ViTPose基础版每帧只需要17.2 GFLOPs,加上一个轻量级的适配器,总计算量依然远低于WHAM。这意味着2D方案不仅效果更好,跑起来还更快更省资源,对于需要实时处理或者部署在算力有限设备上的应用场景,这个差距会非常关键。

这个结果其实呼应了论文最初提出的那个大胆假设:既然理解动作的语义主要靠的是姿态结构而不是绝对的深度坐标,那与其花大力气去精确估计难度更高、误差更大的3D姿态,不如老老实实用估计起来相对简单可靠的2D姿态,再配合一个专门纠偏的小模块,反而能拿到更好更省钱的结果。

不过论文也很诚实地指出了这套方案的局限性。对比参照的原始3D输入和加了适配器的2D输入时,MotionGPT和MG-MotionLLM这两个更新、更能生成细节的模型,性能差距反而比TM2T更大。作者推测这可能是因为适配器在纠正噪声的过程中,把动作序列做了某种"平滑"处理,抹掉了一些细微的动作差异,让结果更接近某种"平均动作模式",牺牲了细粒度信息。

论文里给了两个具体的失败案例。一个是原本的动作是沿S形路径走路,但模型生成的描述只说"一个人四处走动然后停下",那种蜿蜒的路径特征丢失了。另一个是原本动作是把双手举到脸部附近两次,模型却错误地生成了"拍手"这样一个更泛化、更常见的动作描述。作者们进一步用VQ-VAE的解码器把词元序列还原回动作,画出重建的运动轨迹,果然发现加了适配器之后,S形的移动路径变成了一条更简单的直线,说明这类精细的空间信息在适配器纠偏的过程中被牺牲掉了一部分。

这也提醒我们,任何"降噪"或者"对齐"操作都不是免费的午餐,你在换取鲁棒性和稳定性的同时,往往也在悄悄丢失一些原始信号里的细节。这就像给一张照片做磨皮美颜,皮肤是变光滑了,但脸上那颗有特色的痣、皱纹里藏着的表情细节,可能也一起被磨没了。

写在后面

读完这篇论文,最触动我的其实是那个邻近词元替换实验。它告诉我们一件容易被忽视的事:离散化表示(比如VQ-VAE的码本)内部并不是均匀分布的杂乱符号,而是天然带着语义结构的,相邻的编号往往对应相近的含义。这个特性某种程度上给了"近似输入"很大的容错空间,2D数据不需要精确复刻3D数据的每一个细节,只要落在正确的语义邻域里,下游的语言模型依然能读懂。

这让我联想到人类语言里的同义词现象,我们说话时选词不会每次都命中"最精确"的那个词,但只要意思相近,交流照样顺畅。也许离散表示学习和自然语言之间,本来就存在着某种共通的容错机制,这大概不是巧合。

论文里没有深入回答的一个问题是:这种码本的语义连续性,是VQ-VAE训练过程自然涌现的性质,还是可以被有意识地设计和强化的?如果能主动优化码本让相邻词元的语义关联更紧密,是不是就能让类似2D运动接口这样的跨模态对齐方案做得更彻底、更省训练成本?这个问题留给未来的工作去回答。

Q&A

Q1:2D运动接口是什么?

A:2D运动接口是一个可以直接插到已经训练好的3D运动语言模型上的外挂模块,核心是一个2D动作编码器,能把2D姿态数据转换成原模型能理解的内部特征,不需要改动或微调原模型,就能让原本只认识3D数据的模型接受2D动作输入。

Q2:用2D动作输入效果会比3D动作输入差很多吗?

A:不会。论文实验显示,在HumanML3D和FineMotion数据集上,用2D运动接口的效果和直接用3D动作输入几乎持平,平均性能差距通常在3%以内,远好于把整个模型从头用2D数据训练(差距可达25%以上)。

Q3:在真实视频场景下,2D姿态和3D姿态哪个更实用?

A:论文构建的真实视频测试集结果表明,配合专门设计的真实视频适配器,2D姿态估计输入在几乎所有指标上都优于3D姿态估计输入,同时计算成本也远低于3D姿态估计方法,更适合实际部署场景。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-