真正的难点不是“看见动作”,而是“在多人场景里,快速判断每个人正在做什么”。论文把这个问题定义成一个多标签、多人、实时的识别任务:输入是一段视频和每个人的边界框序列,输出是每个人对应的多个非语言行为标签。这个定义很贴近商店现场,因为顾客可能同时做出多个动作,比如一边靠近、一边挥手,或者一边看机器人、一边和同伴商量。图3:用户非语言行为识别的整体架构公式:视频经过特征提取得到全局视觉表示。这里的 f = φ(X) 表示把输入视频片段 X 送进预训练视觉编码器 φ,得到 N 个 token、每个 token 维度为 D 的特征。说人话就是:先把整段视频压成一组“场景摘要”。公式:每个人的边界框序列按帧拼接。b̃i 是第 i 个人在 T 帧中的位置序列,形状是 T×4,四个数分别表示位置和尺寸。这里先把框坐标按图像大小归一化,避免不同分辨率把模型搞晕。公式:位置序列经过 MLP 得到时序位置特征。pi = ψ(b̃i) 表示把第 i 个人的轨迹喂给一个共享的多层感知机,提取出位置相关的表示。这里的关键不是“识别人体姿态”那种重模型,而是先把“人在哪儿、怎么移动”编码出来。接下来,论文用一个很聪明但不花哨的操作把“场景特征”和“位置特征”合起来:用逐元素乘法做门控。这样做的意思很直白——同样一帧画面,机器人只需要关心和某个顾客相关的那部分信息,而不是把全场都看成一锅粥。公式:场景特征与位置特征逐元素融合。hi = f ⊙ pi 的作用是把通用视觉表示“掰”到第 i 个人身上。这个设计很实用,因为商店里多个人同时出现时,模型必须知道“谁在做动作”,而不是只知道“画面里发生了动作”。再往后,模型用一个可学习查询向量和 cross-attention 做汇聚,最后输出每个行为的多标签概率。它的好处是,不用为每个动作硬写一套规则,而是让模型自己从视频里学“哪些线索更像挥手,哪些线索更像展示商品”。损失函数也很朴素:二元交叉熵加上类别权重,原因也很现实——数据极不均衡,像“展示商品”“触碰随身物品”这类行为很少,不加权就容易被模型当空气。公式:通过 CrossAttn 得到每个人的表示。zi = CrossAttn(q, hi) 表示用查询 q 去从融合特征里“捞”出和第 i 个人最相关的信息。这个步骤相当于让模型先问一句:现在该盯谁?公式:分类器输出每个行为的多标签概率。si = g(zi) 再经过 sigmoid,就得到每个动作的独立概率。因为一个人可以同时“接近+挥手”,所以这里不能用单标签分类那套老办法。公式:带类别权重的二元交叉熵损失。这里用 wc = 1 / nc 给少数类更高权重,避免模型只会认“接近”“挥手”这种大户,结果把真正有价值的稀有动作全漏掉。表4:非语言线索识别结果结果上,模型的微平均 F1 达到0.80,多数类别都能稳定识别;像“接近”“展示商品”这种动作幅度更明显、语义更清晰的类别表现更好,而“与同伴交互”这类更依赖上下文的行为就难一些。这个结论并不意外,但很说明问题:不是所有非语言行为都适合直接上系统,先挑那些高频、可见、服务相关的动作,才是能落地的路线。
Yuga Yano, Yuki Okafuji, Ryo Miyoshi, Sanae Yamashita, Yoshiki Ohira. Breaking the 15% Barrier: A Real-World Data-Driven System for Proactive Social Robot Triggered by User Nonverbal Cues. arXiv:2607.11633v1, 2026.原文链接:https://arxiv.org/pdf/2607.11633v1.pdf项目与演示:暂无公开链接。