Ad-hoc Video Search(AVS跨模态视频检索)

article/2025/9/22 15:57:27

AVS任务也是跨模态检索中的一种,即对于给定的句子,尝试在视频库中检索出语义相关的内容。而跨模态相关的文章,博主已经在其他跨模态检索的文章中介绍过了。Ad-hoc和传统的视频检索任务不太一样,如它的名字ad-hoc一样,这其实属于推荐中的两者形态:

  • ad hoc。类似于书籍检索。数据相对稳定不变,而查询千变万化。
  • routing。类型与新闻推荐。用户兴趣稳定不变,但数据不断变化。

一般的跨模态会有预定义语义标签,而AVS任务只能通过建模用户的 查询意图, 所以某种程度上它的难度更偏向于相似度匹配问题。

ASV主要有两种处理思路,一是基于concept/keyword这种概念,二是基于特征。接下来本文将从这两个方面进行整理。


基于概念一般需要做三个步骤:显式的概念–匹配—选择。

  • 从查询句子中提取一个或多个关键字。
  • 选择与关键字相关的一个或多个概念分类器。
  • 对于每个测试视频序列,通过集成来自多个概念分类器的分数来计算查询短语的分数。

[IVCNZ2018] Latent Concept Extraction for Zero-shot Video Retrieval
这篇文章对于文本概念的处理是:

  • 大量预先训练的概念分类器来提高查询中出现的单词的覆盖率,尝试把复杂的查询也变成多个概念的组合。
  • 引入自然语言处理技术,即使没有与关键字对应的概念分类器,也能够找到可替换的概念分类器,进一步提高词的覆盖率。

但是对于某些词的效果仍然很槽糕,虽然继续增加概念分类器的变化是一个解决方案,但不可能涵盖所有关键字。所以

  • 能找到关于未知关键字的潜在概念分类器吗?
  • 能用现有概念分类器的组合来表示查询短语吗?

于是基于特征的方法就开始流行了。将输入都映射到同一语义空间,再进行匹配与对比。


在这里插入图片描述
[MM2019] W2VV++: Fully Deep Learning for Ad-hoc Video Search
以往的AVS任务需要显式的概念建模(如对象、动作、场景)、匹配和选择,这份工作完全基于深度学习而不需要建模概念。同时W2VV发现对文本的多种建模要比一种有效,而W2VV++是基于此的升级版。模型结构如上图:

  • 文本端bow+w2v+GRU进行多种得到特征。
  • 视频端均匀采样帧后用ResNeXt-101+ResNet-152得到特征
  • 然后Triple loss。
class W2VV_MS(Base_model):def __init__(self, opt, we_weights=None):n_layers = opt.n_text_layers#只支持lstm和gru的文本计算assert (opt.rnn_style in ['lstm', 'gru']), "not supported LSTM style (%s)" % lstm_style#构建模型print("Building model...")#输入词到rnnmain_input = Input(shape=(opt.sent_maxlen,))#再分别用 bow, word2vec 或者word hashing来嵌入句子特征auxiliary_input = Input(shape=(n_layers[0],))if we_weights is None: #如果有预训练的结果we = Embedding(opt.vocab_size, opt.embed_size)(main_input)else: #没有就再Embeddingwe = Embedding(opt.vocab_size, opt.embed_size, trainable=True, weights = [we_weights])(main_input)we_dropout = Dropout(opt.dropout)(we)#lstm_out = LSTM(lstm_size, return_sequences=False, unroll=True, consume_less='gpu', init='glorot_uniform')(we_dropout)if opt.rnn_style == 'lstm':lstm_out = LSTM(opt.rnn_size, return_sequences=False, unroll=True, dropout=opt.dropout, recurrent_dropout=opt.dropout)(we_dropout)elif opt.rnn_style == 'gru':lstm_out = GRU(opt.rnn_size, return_sequences=False, unroll=True, dropout=opt.dropout, recurrent_dropout=opt.dropout)(we_dropout)x = concatenate([lstm_out, auxiliary_input], axis=-1) #拼接主特征和辅助特征for n_neuron in range(1,len(n_layers)-1): #再用mlp抽象一下x = Dense(n_layers[n_neuron], activation=opt.hidden_act, kernel_regularizer=l2(opt.l2_p))(x)x = Dropout(opt.dropout)(x)output = Dense(n_layers[-1], activation=opt.hidden_act, kernel_regularizer=l2(opt.l2_p))(x)self.model = Model(inputs=[main_input, auxiliary_input], outputs=output)self.model.summary()def predict_one(self, text_vec, text_vec_2):text_embed_vec = self.model.predict([np.array([text_vec]), np.array([text_vec_2])])return text_embed_vec[0]def predict_batch(self, text_vec_batch, text_vec_batch_2):text_embed_vecs = self.model.predict([np.array(text_vec_batch), np.array(text_vec_batch_2)])return text_embed_vecs

code: https://github.com/danieljf24/w2vv

[MM2020] A W2VV++ Case Study with Automated and Interactive Text-to-Video Retrieval
把上述文本侧的表示继续升级成了bow-w2v-bert。
code: https://github.com/li-xirong/w2vvpp

在这里插入图片描述
[ICMR2020] Attention Mechanisms, Signal Encodings and Fusion Strategies for Improved Ad-hoc Video Search with Dual Encoding Networks
视频侧和文本侧也是多种级别的表示方法。特别的地方在于使用了两种不同的注意力机制,目的是在每种模态中突出时间位置,以更好的进行文本和视觉表示。

来看一下对于视频的多级别表示的操作代码:

class Video_multilevel_encoding(nn.Module):""""""def __init__(self, opt):super(Video_multilevel_encoding, self).__init__()self.rnn_output_size = opt.visual_rnn_size * 2self.dropout = nn.Dropout(p=opt.dropout)self.visual_norm = opt.visual_normself.concate = opt.concate#用 BiGRU来编码特征self.rnn = nn.GRU(opt.visual_feat_dim, opt.visual_rnn_size, batch_first=True, bidirectional=True)#1-d的CNN层self.convs1 = nn.ModuleList([nn.Conv2d(1, opt.visual_kernel_num, (window_size, self.rnn_output_size), padding=(window_size - 1, 0))for window_size in opt.visual_kernel_sizes])#视觉投影层self.visual_mapping = MFC(opt.visual_mapping_layers, opt.dropout, have_bn=True, have_last_bn=True)def forward(self, videos):"""抽取视频表示特征."""videos, videos_origin, lengths, vidoes_mask = videos# Level 1. 用平均池化来编码全局特征org_out = videos_origin# Level 2. 用biGRU编码时间感知gru_init_out, _ = self.rnn(videos)mean_gru = Variable(torch.zeros(gru_init_out.size(0), self.rnn_output_size)).cuda()for i, batch in enumerate(gru_init_out): #也需要池化mean_gru[i] = torch.mean(batch[:lengths[i]], 0)gru_out = mean_grugru_out = self.dropout(gru_out)# Level 3. 编码局部特征vidoes_mask = vidoes_mask.unsqueeze(2).expand(-1, -1, gru_init_out.size(2))  # (N,C,F1)gru_init_out = gru_init_out * vidoes_maskcon_out = gru_init_out.unsqueeze(1)con_out = [F.relu(conv(con_out)).squeeze(3) for conv in self.convs1]con_out = [F.max_pool1d(i, i.size(2)).squeeze(2) for i in con_out]con_out = torch.cat(con_out, 1)con_out = self.dropout(con_out)# 拼接到一起if self.concate == 'full':  # level 1+2+3features = torch.cat((gru_out, con_out, org_out), 1)elif self.concate == 'reduced':  # level 2+3features = torch.cat((gru_out, con_out), 1)# 投影到共同空间features = self.visual_mapping(features)if self.visual_norm:features = l2norm(features)return features

code:: https://github.com/bmezaris/AVS_dual_encoding_attention_network

在这里插入图片描述
[MM2020] Interpretable Embedding for Ad-Hoc Video Search
不通过概念的方法虽然取得了很好的效果,但是这种将特征直接嵌入联合空间的做法不可解释,所以本文将特征嵌入和概念解释集成到一个神经网络中,用于统一的双任务学习,以让嵌入与语义概念列表相关联,作为对视频内容的解释。

  • 任务1:视觉-文本嵌入。
  • 任务2:多标签概念分类。

同时由于视频内容是多视角的,内容可以根据讨论主题中感兴趣的主题或上下文从不同的角度进行叙述。而且即使从一个角度来看,也有多种方法使用不同的单词来表达相同的语义,所以在caption中没出现的不一定就是错的,可能只是没有提到。所以作者提出一个新的BCE loss,分为两个部分:

  • 正常的算caption的词和视频语义概念之间的多标签loss。
  • 其他没有提到/激活的词的loss,并且给与较高的权重用来平衡以扩大语义概念。

数据集

  • IACC.3
  • MSR-VTT
  • TGIF
  • TRECVID 20xx

有一个github供下载数据集:https://github.com/li-xirong/avs


http://chatgpt.dhexx.cn/article/yZqbe2fF.shtml

相关文章

聚焦视频文本检索:一文概览视频文本检索任务最新研究进展

©PaperWeekly 原创 作者 | 小马 单位 | FightingCV公众号运营者 研究方向 | 计算机视觉 写在前面 近几年,随着抖音、快手等短视频平台,以及哔哩哔哩、优酷等视频平台的出现,网络中出现了大量的视频媒体。海量视频媒体给视频内容的准确检…

图片/文字/视频跨模态检索综述

向AI转型的程序员都关注了这个号???????????? 机器学习AI算法工程 公众号:datayx 0 引言 在过去的二十几年里,不同类型的媒体数据如文 本、图像和视频迅速增长。通常,这些不同类型的 数据用于描述相同的事件或主题。例如&#…

利用python打造你的视频检索引擎

各位广大影迷们,是不是在为自己几十上百G的视频文件而头大呢,又或者是看到了一部动作大片,明明记得自己硬盘上也有,想再次重温一下,却怎么也找不到的悲惨经历呢。 别着急,今天就陪同大家,一起打…

极智项目 | 实战多模态文本-视频检索

欢迎关注我的公众号,获取我的更多经验分享 极智传送《极智项目 | 实战多模态文本-视频检索》 大家好,我是极智视界,本文介绍 实战多模态视频检索,并提供完整项目工程源码。 本文介绍的实战多模态视频检索,提供完整的可…

CVPR 2020 论文大盘点-图像与视频检索篇

本文总结CVPR 2020 中所有与图像和视频检索(Image and Video Retrieval)相关论文,总计 16 篇。 图像和视频检索常见于搜索引擎、商品服饰搜索等应用场景,另外为进行高效检索,该领域往往会将图像或者视频的特征通过哈希算法映射到二值空间,使用汉明距比较相似度,所以哈希…

跨模态检索之文本视频检索(Text to Clip)(2)

《Cross-Modal and Hierarchical Modeling of Video and Text》(2018 ECCV) 这篇文章主要介绍了一个叫做分层序列嵌入(Hierarchical Sequence Embedding, HSE)的通用模型,其作用是对不同模态的数据进行分层建模并利用…

视频文本检索之CLIP4Clip

论文:CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip Retrieval GitHub:https://github.com/ArrowLuo/CLIP4Clip 学习是一种行动反射, 不是为了晓得些“知识”, 要切己体察,代入自己&#xff0c…

跨模态检索之文本视频检索(Text to Clip)

《Multilevel Language and Vision Integration for Text-to-Clip Retrieval》(2018 CVPR) 这篇文章引入了一个多层的模型,输入一个描述某个动作的查询语句,就可以从一段没有经过修剪的视频中找出对应的片段。 首先是第一个阶段…

MPEG-CDVA标准的特征提取(除深度学习) 视频匹配 视频检索

依据可查阅资料对CDVA标准中的特征提取(不涉及深度特征部分),视频匹配和视频检索流程做了分析说明。 1. 概要 1.1 描述子提取: 使用关键帧描述子 提取关键帧之前,视频做一个降采样,每隔2-10帧左右取一帧…

CLIP4Clip:用于端到端视频检索的CLIP实证研究

Luo, Huaishao, Lei Ji, Ming Zhong, Yang Chen, Wen Lei, Nan Duan and Tianrui Li. “CLIP4Clip: An Empirical Study of CLIP for End to End Video Clip Retrieval.” ArXiv abs/2104.08860 (2021). 1. Abstract 视频文本检索在多模态研究中起着至关重要的作用&#xff0c…

同时利用字幕、音频、视频进行检索!Inria谷歌提出MMT用于高效跨模态视频检索,代码已开源!...

关注公众号,发现CV技术之美 ▊ 写在前面 检索与自然语言查询相关的视频内容对于有效处理互联网规模的数据集起着关键作用。现有的大多数文本到视频检索方法都没有充分利用视频中的跨模态线索。此外,它们以有限或没有时间信息的方式聚合每帧视觉特征。 在…

视频检索——BLSTM(论文翻译、理解)

视频检索BLSTM方法论文翻译 摘要1 介绍2 相关工作3 自监督时序哈希3.1 时序感知的哈希函数3.2 二进制的LSTM3.3 学习目标3.4 框架细节 4 二进制优化4.1 二进制求导4.2 算法细节 5 实验5.1 数据集5.2 实验设置5.3 结果分析 6 结论 Play and Rewind: Optimizing Binary Represent…

基于内容的视频检索(CBVR)

参考 1. 视频检索的基本流程 2. 视频的结构分层 各层都可以用一些属性来描述: 1. 视频序列的属性主要包括场景的个数和持续时间; 2. 场景的属性包括标题、持续时间、镜头数目、开始镜头、结束镜头等; 3. 镜头的属性包括持续时间、动态特征…

人脸视频检索系统设计(C++)

目录 人脸检索系统框架的构建 1 一.软件实现的主要界面 1 二.软件的需求概括 1 三.软件代码设计过程中需要注意的问题 2 四.程序到目前为止产生的诸多缺陷 4 五.程序的详细设计过程 4 1.输入部分的设计 4 2.检测结果部分的设计过程 10 人脸检索系统框架的构建 ------FaceMFC_v…

AAAI 2023 | 基于多模态标签聚合的视频检索模型TABLE,多项SOTA

©作者 | QQ浏览器搜索技术中心、腾讯PCG ARC Lab 来源 | 机器之心 近年来,互联网短小视频内容的爆发式增长,对视频 - 文本检索(Video-Text Retrieval)的能力提出了更高的要求。在 QQ 浏览器搜索中,视频通常包含标…

5分钟实现「视频检索」:基于内容理解,无需任何标签

Notebook 教程:text-video retrieval 「视频检索」任务就是输入一段文本,检索出最符合文本描述的视频。随着各类视频平台的兴起和火爆,网络上视频的数量呈现井喷式增长,「视频检索」成为人们高效查找视频的一项新需求。传统的视频…

视频内容检索概述

视频内容检索 针对目前多媒体搜索引擎技术,视频数量的井喷式增加以及多媒体视频内容的多样性和数据结构的复杂性,如何快速的从有效地这些视频检索出人们感兴趣的已经成为当今信息化时代的难题。 数字视频内容检索 基于内容的视频检索(CBVR…

ad建集成库_手把手教你创建自己的Altium Designer集成元件库

一个善于规划、管理及总结的硬件开发工程师都喜欢创建自己的集成库,这样就相当于给自己打造了一款更适合自己的尖兵利器,无论是硬件设计的统一性还是硬件模块的可重用性,都会给工程师带来更多的设计便利。 一个管理规范的硬件开发企业,在集成库的制作及使用方面都会做出很多…

NC57中间表数据源的设置流程

目前场景如下:NC定时将数据写入中间库中,第三方去中间库中抓取; 方式一: 第一步:在NC客户端【客户化】——【二次开发工具】——【参数设置】——【参数模板管理】添加所设置的数据源数据 找到对应的数据库表pub_sysi…

分库分表介绍

目录 一、前言 二、何谓数据切分? 三、垂直切分 1、垂直分库 2、垂直分表 3、垂直切分优缺点 4、拆分需考虑的业务因素 四、水平切分 1、水平分库 2、水平分表 3、水平切分优缺点 五、垂直与水平切分的联合使用 六、数据分片规则 1、Hash取模分表 2、数…