想象一下,你正在观看一部电影。画面中的人物在走动、交谈,物体在移动、碰撞。传统的计算机视觉技术只能识别每一帧中的物体和它们之间的静态关系,就像给每一帧拍一张照片然后单独分析。而动态场景图生成要做的是理解整个视频中物体和关系的演变过程,就像把照片连成电影,还要理解剧情发展。
静态场景图生成技术已经发展了多年。它通常分两步走:先用目标检测器找出图片中的物体,再分析这些物体之间的关系。比如在一张厨房照片中,可以识别出"人"、"冰箱"、"苹果"等物体,以及"人打开冰箱"、"冰箱里有苹果"等关系。但这种技术有个致命缺陷——它无法理解运动和变化。
在实际视频中,物体和关系都是动态变化的。比如一个人从冰箱里拿出苹果的过程,包含了"走近冰箱"、"伸手开门"、"取出苹果"等多个连续动作。静态方法只能分析每一帧的独立关系,无法捕捉这种连续变化。这就是为什么我们需要动态场景图生成技术。
Transformer最初是为自然语言处理设计的,它的核心是自注意力机制。这个机制有个很形象的比喻:就像读书时用荧光笔划重点,Transformer会自动找出输入数据中哪些部分需要特别关注。在语言模型中,它帮助理解词语之间的远距离依赖关系。
当Transformer跨界到计算机视觉领域后,它展现出了惊人的潜力。传统的CNN在处理图像时有个局限——感受野有限,难以捕捉全局信息。而Transformer的自注意力机制可以同时关注图像的所有区域,非常适合理解物体之间的空间关系。
STTran的创新之处在于,它把Transformer的能力扩展到了时空两个维度。空间编码器负责分析单帧画面中物体之间的空间关系,就像理解一幅画的构图;时间解码器则负责分析帧与帧之间的时间关系,就像理解电影镜头的衔接。
这种双重能力使得模型能够:
空间编码器的工作流程非常精巧。首先,它使用Faster R-CNN从每帧视频中提取物体特征、边界框和类别信息。然后,它为每对物体构建关系表征向量,这个向量包含了:
这些关系表征通过多层自注意力机制进行精炼。每一层都会重新评估各个关系的重要性,让模型能够聚焦于最相关的交互。比如在厨房场景中,"人拿苹果"的关系会比"苹果在冰箱旁边"获得更多关注。
时间解码器采用滑动窗口机制处理视频序列。这个设计非常巧妙——它既避免了处理整个长视频的内存压力,又能捕捉相邻帧之间的时间依赖。
窗口内的帧关系表征会加上专门学习到的时间位置编码,然后通过自注意力机制进行信息交换。这样,模型就能发现诸如"人的手正在接近冰箱门"这样的跨帧模式。实验表明,3层解码器就能很好地捕捉这种时间依赖。
在Action Genome数据集上,STTran在三个标准任务上都取得了SOTA成绩:
特别是在Recall@50指标上,STTran相比之前最好的方法提升了5-8个百分点。这说明它在捕捉复杂关系方面有明显优势。
STTran提出了创新的"半约束"场景图生成策略。传统方法要么严格限制每对物体只能有一个关系(With Constraint),要么完全放开限制(No Constraint)。半约束策略则设定置信度阈值,只保留高置信度的多重关系。
这个方法很符合实际场景。比如"人-拿着-食物"和"人-吃着-食物"经常同时成立,应该被同时保留;而低置信度的错误关系则被过滤掉。实验证明,这种策略在准确率和召回率之间取得了更好的平衡。
动态场景图生成技术正在打开许多新的应用场景。在智能监控领域,它可以理解复杂的人群行为模式;在自动驾驶中,它能更准确地预测行人和其他车辆的意图;在人机交互方面,它为更自然的虚实交互提供了基础。
不过这项技术也面临一些挑战。长视频的处理效率还需要优化,复杂场景下的关系推理准确性也有提升空间。此外,如何将动态场景图与其他AI模块(如决策系统)无缝衔接,也是值得探索的方向。
在实际项目中应用STTran时,我发现调整时间窗口大小和关系置信度阈值对效果影响很大。通常需要根据具体场景的数据分布进行调优。另外,结合领域知识设计特定的关系类别体系,也能显著提升实用效果。