【论文阅读】Progressive Spatio-Temporal Prototype Matching for Text-Video Retrieval

资料链接

论文链接:https://openaccess.thecvf.com/content/ICCV2023/papers/Li_Progressive_Spatio-Temporal_Prototype_Matching_for_Text-Video_Retrieval_ICCV_2023_paper.pdf
代码链接:https://github.com/imccretrieval/prost

背景与动机

文章发表于ICCV 2023,来自中科大IMCC实验室。
文本-视频检索是近年来比较新兴的领域,随着多模态和大模型的发展,这一领域也迸发出了前所未有的潜力。目前的主流方法是学习一个joint embedding space,将视频和文本编码成特征向量,在空间中含义相近的向量的位置也是相近的,从而通过计算向量间相似度实现检索。本文梳理了近期的一些工作,主要分为以下三个方向:
细粒度匹配:单一的特征向量难以编码丰富的细节信息,需要进行更细粒度的视频文本匹配。
多模态特征:视频有着丰富的多模态信息,使用多种多模态特征可增强检索性能。
大规模预训练:近年来大规模预训练广泛应用,经过预训练的模型检索能力得到显著提升。
作者团队在这一问题上,主要着重于第一个方向的研究。

典型的解决方案是直接对齐整个视频与句子的特征,这会忽视视频内容与文本的内在关系。因此,匹配过程应当同时考虑细粒度的空间内容和各种时间语义事件。这就是细粒度的匹配。
为此,作者团队提出一种具有渐进式时空原型匹配的文本-视频学习框架。它的大致框架如下:

方法

给定一个由n个视频以及它们对应的m个文本描述组成的数据集,文本-视频检索(TVR)旨在学习一个函数,以有效地衡量模态之间的相似性。

对于文本查询,应当有:

 因此,需要强大的文本编码网络和视频编码网络来生成高质量的特征,从而实现有效的匹配。

采用 CLIP 作为骨干网络。给定输入视频,均匀地选择L个帧作为关键帧,提取连续特征:

其中是全局帧token特征,KPatch数量,D是特征维数,XiShape(K+1) × D

给定查询文本,添加开始token和结束token,输出文本token特征可以定义为:

其中,是全局文本token特征,MD分别是单词和特征维数,yiShape(M+2) × D

方法 - 总体框架

对象-短语原型匹配阶段

空间原型生成机制预测关键Patch或单词,这些Patch或单词被聚合成对象或短语原型。重要的是,优化对象-短语原型之间的局部对齐有助于模型感知空间细节。

事件-句子原型匹配阶段

设计了一个时间原型生成机制,将帧内对象与帧间时间关系相互关联。这样逐步生成的事件原型可以揭示视频中的语义多样性,用于动态匹配。

方法 - 对象短语原型匹配

相较于现有方法学习一个单一的Patch-Event投影,作者团队使用分而治之的方式解耦时空建模过程。

首先进行Patch-对象和单词-短语的空间原型聚合,来揭示关键的局部细节。

分为两个步骤:

空间原型生成 Spatial Prototype GenerationSPG

对于Patch特征,首先需要生成它们的空间对象原型:

使用两个全连接(FC)层和ReLU函数来预测稀疏权重,其中No是对象原型的数目,这样就可以避免对象原型受到冗余Patch的影响,从而使得对象原型更准确、集中。

其中,Po为对象原型, ShapeNo×D

对于文本,同样借鉴SPG机制,并设计了一个类似的网络结构来聚合单词标记,生成短语原型

对象-短语匹配 Object-Phrase Matching

基于上一步骤生成的对象、文本原型,实现对象-短语原型匹配。

计算每个帧内的对象-短语原型的最大相似度,将最相似的短语原型和每个对象原型关联起来,反映了跨模态的细粒度分配。

然后,对于多帧对象相似度矩阵,找到跨帧序列的最大相似度分数,得到置信度更高的对象-短语匹配概率。最后将匹配得分求和,得到最终的相似性Sop

其中,No是对象原型的数量、Np是短语原型的数量、L是帧的数量。

这一部分的矩阵处理细节如下所示:

Pp与Po相乘以后,得到的矩阵首先按列取最大值,得到下面的矩阵:

它的含义是,对于每个对象原型,其与短语原型的最大相似度。

然后,对于每个关键帧都有一个上述的矩阵,在跨帧之间再取对于每个对象原型与短语原型的最大相似度,从而得到置信度更高的对象-短语匹配分数

方法 事件句子原型匹配

接下来,到了事件句子原型匹配阶段。

时间原型生成 Temporal Prototype GenerationTPG

直接基于全局帧特征获得视频级特征会导致模型不能感知局部细节,并且只能得到单一的视频级特征。

作者团队提出一种渐进式的方法,逐步将对象原型聚合到帧原型中,然后进行帧间交互,以生成各种事件原型。

首先设计一个帧解码器,将所有对象原型聚合到帧级原型中:

其中,是帧Query(Learnable),KoVo是对象原型Po的线性变换后的特征。

注意力掩码的定义是:

这一部分的矩阵处理细节如下所示:

注意观察Mf与的关联,可以理解它的作用是使得注意力仅存在于同一帧的对象原型之间,从而不受到其他帧的对象原型的干扰。

Softmax后的权重再乘以对应帧的𝑣𝑜从而得到帧原型矩阵Pf,形状为(L × D

后面使用全局帧信息Qf进行一个Residual Connection。

将帧原型pf和相应帧的原始全局特征xc相加,以增强模型的稳健性:

然后,使用一个动态事件解码器来学习Pf中的帧间关系,它可以获得不同的事件原型 来展示视频的丰富信息。

其中,是事件Query(Learnable),KfVf是帧原型Pf的线性变换后的特征。

在训练过程中,每个事件Query都学习如何自适应地聚焦于视频帧原型,而多个Query隐含地保证了一定的事件多样性。

事件句子匹配 Event-Sentence Matching

由于同一个视频通常对应多个文本语义描述,我们直接使用全局文本表示yE作为句子原型与事件原型Pe进行对齐,找到句子原型与事件原型的最大相似度,作为最终的相似性Ses

方法 – 训练与推断

训练阶段

采用InfoNCE损失函数来优化batch内的原型匹配。将文本-视频对视为正样本,同时考虑batch内的其他成对组合作为负样本:

其中,SopSes分别为来自 对象短语原型匹配 和 事件句子原型匹配阶段 的 对象-短语原型相似度 和 句子-事件原型相似度 。

推理阶段

直接对最终相似度匹配加权了时空匹配得分:
其中是空间匹配因子。

实验 评价指标与结果

Recall@K (R@K)

这个指标衡量在前K个检索结果中正确匹配的比例。

Median Rank (MdR)

中位数排名指标表示正确匹配项在所有检索结果中的中位数排名。

Mean Rank (MnR)

平均排名指标表示所有正确匹配项在所有检索结果中的平均排名。

实验 消融实验

此外,作者进行了消融实验并做出了以下分析:
  • 只使用ESPM时,R@1下降了2.6个点,证实了细粒度空间细节对于ESPM的补充作用。
  • 只使用OPPM时,模型性能仍然较差,因为其缺乏对时间的理解,无法解决关系模糊性。
  • SPG替换为TPG,性能下降说明了原始视频标记中存在冗余,SPG能够有效地过滤冗余信息。
  • TPG替换为SPG,性能下降说明了帧间信息的交互对于生成更好得到事件原型是很重要的

  • -F-M-R(移除帧解码器、attention mask、残差连接)的结果下降,表明帧内的局部对象关系和全局帧特征共同补充了全面的帧级空间信息。
  • P-PO-W(使用patch-phraseobject-word,而不是原型)表明使用原型匹配能减缓模态对齐问题。
  • F-WF-S(直接使用CLS或直接使用平均池化获得帧token)会影响信息的细节,从而降低性能。
  • 在原型数量的设置上,也进行了实验,最后确定了最好的原型配置。表明在原型太多时会引入局部噪音,而太少时则无法表达语义。
  • 同时也针对空间匹配因子β做了测试,找到了最合适的β值。表明需要同时合理地利用底层细粒度的空间信息和时间原型匹配,才能得到好的结果。

实验 定性分析

原型可视化

通过对象原型和时间原型的可视化图片,可以看见它们之间具体的匹配关系。可以看到不同的事件原型在不同帧上的权重差异很大,说明模型能够学习到时间关系。

检索结果

通过举例分析说明了对象-短语原型匹配提供了重要的细粒度空间知识,从而能够给出更好的查询结果。

总结

提出了一种新颖的文本-视频检索框架,称为ProST,将匹配过程分解为互补的对象-短语和事件-句子原型对齐。

在对象-短语原型匹配阶段,设计了空间原型生成机制,以便专注于重要的视频内容并加强精细的空间对齐。

在事件-句子原型匹配阶段,他们使用时间原型生成机制逐渐生成多样化的事件原型,并学习动态的一对多关系。

希望通过这篇论文不仅能够提供有关互补的时空匹配的重要性的见解,还能够促进未来的研究,通过解决设计缺陷而不是主要是尝试和错误来推动文本-视频检索领域的进展。

个人感受

读完这篇文章,唯一的感觉就是太花了,实在是太花了。学习之路任重而道远!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/187163.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营Day 47 || 198.打家劫舍、213.打家劫舍II、337.打家劫舍 III

198.打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系…

Qframework 中超级方便的kitres

using QFramework; using System.Collections; using System.Collections.Generic; using UnityEngine;public class TestResKit : MonoBehaviour {ResLoader mResLoader ResLoader.Allocate();private void Awake(){}/// <summary>/// 每一个需要加载资源的单元(脚本,界…

【Unity之UI编程】在Unity中如何打图集,来降低DrowCall

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;UI_…

pytest 的使用===谨记

发现用例的规则 a) 文件test_.py开头和_test.py结尾 b) Test开头的类中test开头的方法&#xff08;测试类不能带有__init__方法&#xff09; c) 模块中test开头的函数&#xff08;可以不在class中&#xff09; 注意点&#xff1a; pytest是以方法为单位发现用例的&#xff0c;你…

摔杯算法(要求用最少的测试次数找出恰巧会使杯子破碎的楼层。)

题目: 一种杯子&#xff0c;若在第N层被摔破&#xff0c;则在任何比N高的楼层均会破&#xff1b;若在第M层不破&#xff0c;则在任何比M低的楼层均不会破。给你两个这样的杯子&#xff0c;让你在100层高的楼层中测试&#xff0c;要求用最少的测试次数找出恰巧会使杯子破碎的楼层…

vue:实现顶部消息横向滚动通知

前言 最近有个需求&#xff0c;是在系统顶部展示一个横向滚动的消息通知。需求很简单&#xff0c;就是消息内容从右往左一直滚动。 效果如下&#xff1a; 因为我的需求很简单&#xff0c;功能就这样。如果有什么其他需求&#xff0c;可以再继续修改。 代码 使用 <noti…

数据中台之数据分析

效果界面 技术方案 Notebook集成 在您的数据平台上,创建一个能够与Jupyter Notebook通讯的服务。通过Jupyter Notebook的HTTP API与Notebook实例进行交互,执行代码、获取输出等。用户界面 在数据开发/数据分析的代码框右上方,添加一个机器人样式的图标,用户点击后可以调起…

Ubuntu 安装常见问题

1. 安装oh my zsh 搜狗输入法不能用 vim /etc/environmentexport XIM_PROGRAMfcitx export XIMfcitx export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx export XMODIFIERS“imfcitx” export LANG“zh_CN.UTF-8”配置完后重启&#xff0c;稍等一会&#xff0c;右上角会有个…

Linux--vim

文章目录 Vim的介绍Vim的几种模式命令模式下的基本操作批量化注释Vim的简单配置使用插件 Vim的介绍 Vim是一个强大的文本编辑器&#xff0c;是从vi编辑器发展而来的&#xff0c;在vi编辑器的基础上进行了改进和拓展&#xff0c;具有强大的特性和功能。 Vim是一个自由开源软件&…

城市内涝积水监测,万宾科技内涝预警监测系统

每一个城市的排水体系都是一个复杂的网络系统&#xff0c;需要多个部分配合协调&#xff0c;预防城市排水管网带来安全隐患&#xff0c;也因此才能在一定程度上缓解城市内涝带来的安全问题。在海绵城市建设过程中不仅要解决大部分道路硬化导致的积水无法渗透等问题&#xff0c;…

AR眼镜硬件解决方案_AR/VR智能眼镜安卓主板芯片方案介绍

随着近两年来增强现实(AR)技术的逐渐成熟&#xff0c;采用MT8788芯片解决方案的AR眼镜已经问世。众所周知&#xff0c;AR技术可以帮助开发者打造一个既强大而又实用的混合现实世界&#xff0c;将虚拟与真实世界相结合。 据了解&#xff0c;MT8788芯片采用了多芯片分布式处理系统…

HelloGitHub 社区动态,开启新的篇章!

今天这篇文章是 HelloGitHub 社区动态的第一篇文章&#xff0c;所以我想多说两句&#xff0c;聊聊为啥开启这个系列。 我是 2016 年创建的 HelloGitHub&#xff0c;它从最初的一份分享开源项目的月刊&#xff0c;现如今已经成长为 7w Star 的开源项目、1w 用户的开源社区、全网…

nacos做服务配置和服务器发现

一、创建项目 1、创建一个spring-boot的项目 2、创建三个模块file、system、gateway模块 3、file和system分别配置启动信息,并且创建一个简单的控制器 server.port9000 spring.application.namefile server.servlet.context-path/file4、在根目录下引入依赖 <properties&g…

2023-11-Rust

学习方案&#xff1a;Rust程序设计指南 1、变量和可变性 声明变量&#xff1a;let 变量、const 常量 rust 默认变量一旦声明&#xff0c;就不可变(immutable)。当想改变 加 mut&#xff08;mutable&#xff09; 。 const 不允许用mut &#xff0c;只能声明常量&#xff0c;…

【黑马程序员】SpringCloud——Eureka

文章目录 前言一、提供者与消费者1. 服务调用关系 二、远程调用的问题三、eureka 原理分析1. eureka 的作用 四、Eureka 案例1. 搭建 eureka 服务1. 服务注册1.1 注册 user-service1.2 启动 user-service3. order-service 完成服务注册 3. 服务发现1. 在 order-service 完成服务…

算术运算符、自增自减运算符、赋值运算符、关系运算符、逻辑运算符、三元运算符

1.算术运算符 public class OperatorDemo1 {public static void main(String[] args) {int a 10;int b 2;System.out.println(a b);System.out.println(a - b);System.out.println(a * b);System.out.println(a / b);System.out.println(5 / 2);System.out.println(5.0 / 2);…

element-ui中el-table数据合并行和列,应该怎么解决

最近接到一个任务,要实现一个数据报表,涉及到很多合并问题,一开始想着原生会简单点,实际上很麻烦,最后还是用elemen-ui中table自带的合并方法. 最终的效果是要做成这种:1.数据处理,后端返回来的数据是,一个大对象,包含三个数组,既然合并,肯定是要处理成一个数组,并且要把相同的…

户外台灯设计:照亮你的户外空间

在一个温暖的夏夜&#xff0c;能够在户外享受美味的晚餐是一种特殊的愉悦。这种露天用餐的体验不仅让你感受大自然的美丽&#xff0c;还提供了独特的放松感。为了让这个时刻更加难忘&#xff0c;户外台灯的用途与设计至关重要。 户外台灯能够创造出温馨的氛围&#xff0c;为用餐…

Excel中功能区的存放位置很灵活,可以根据需要隐藏或显示

在这个简短的教程中,你将找到5种快速简单的方法来恢复Excel功能区,以防丢失,并学习如何隐藏功能区,为工作表腾出更多空间。 功能区是Excel中所有操作的中心点,也是大多数可用功能和命令所在的区域。你觉得功能区占用了你太多的屏幕空间吗?没问题,只需单击鼠标,它就被隐…

使用python批量修改图片名称

一、使用场景 修改模式&#xff1a;原图片名称.png 》 目标图片名称.png条件&#xff1a;目标图片名称 包含 原图片名称准备工作&#xff1a;目标图片名称填写在excel当中&#xff0c;把excel放进图片文件夹内 二、代码示例 import os import pandas as pd import numpy as …