论文阅读
论文阅读这部分我也是通过网上资料和有道翻译进行阅读的,这篇论文是中国人民大学博士生陈师哲今年发表在CVPR会议上的论文,网上资料并不是很多, 我也没有完全明白,就不说太多了。
Fine-grained Video-Text Retrieval with Hierarchical Graph Reasoning基于层次图推理模型的细粒度文本视频检索。细粒度是指比普通的检索更精细化一些,这里的HGR模型是作者提出的将视频文本匹配转换成全局到局部的层次模型。此模型将文本分解成包括事件、动作和实体的层次语义图,然后利用基于注意力机制的图推理生成层次文本嵌入矩阵,能更好的捕捉全局和局部信息。
Text-to-video retrieval examples (green: correct; red: incorrect)
Text-to-video retrieval examples (green: correct; red: incorrect)
1.论文介绍:
(1)互联网上如YouTube和TikTok等视频的迅速出现,给视频内容的准确检索带来了巨大挑战。
(2)传统的基于关键字搜索的检索方法由于关键词是有限的和非结构化的,检索各种不同的内容是困难的。
(3)为了解决基于关键词的视频检索方法的局限性,越来越多的学者开始关注使用自然语言文本进行视频检索。
文本编码分为整个句子、动词和名词短语来表示全局事件、局部动作和实体。视频编码为事件、动作、实体的层次化表示。不同的层次不是独立的,它们之间的相互作用解释了它们在事件中扮演的语义角色,本文在文本中建立了一个跨层次的语义角色图,并提出了一种基于注意力的图形推理方法来捕捉这种交互。
2.相关工作:
(1)Image-Text Matching
以往的图像文本匹配研究大多将图像和句子编码为公共潜在空间中的固定维向量进行相似性度量。
(2)Video-Text Matching
视频文本匹配与图像文本匹配具有一定的相似性,但由于视频具有更复杂的多模性和时空演化特性,使得视频文本匹配任务更具挑战性。
(3)Graph-based Reasoning
图卷积网络(GCN,对于每个节点,在其邻域使用卷积进行输出)是为图数据识别而提出的。对于每个节点,它在其邻域上使用卷积作为输出。
3.HGR模型
HGR模型将跨模态视频文本检索分为分层文本编码模块、分层视频编码模块和视频文本匹配模块,将视频文本匹配分解为全局到局部的层次。
该模型将文本分解为层次语义图,包括事件、动作、实体三个层次。利用基于注意的图形推理生成层次化的文本嵌入,可以指导不同层次视频表示的学习。HGR模型聚合来自不同视频文本级别的匹配,在每个语义层对齐跨模态成分,以便于匹配。所有三个级别的匹配分数聚合在一起,以增强细粒度的语义覆盖。
HGR模型的具体描述感谢这位博主,我也是参考这篇博客的。
代码实现
论文在GitHub上的代码
首先代码运行的环境是Python 3和PyTorch 1.3。PyTorch的安装网上很多资料都有,但是一般安装速度太慢就会导致出错,这里贴几个挺有用的网址,pytorch轮子文件,Python 更换国内pip源,pytorch 安装和测试是否安装完成。注意安装cuda,cudnn和pytorch时相应的版本要对应。作者提供了在MSRVTT, TGIF, VATEX 和 Youtube2Text video上的数据集,我是在win10下跑代码的。
训练和评估所需命令
进入t2vretrieval文件夹下driver,接下来是这两步命令,
python configs/prepare_mlmatch_configs.py $datadir
resdir=’’ # copy the output string of the previous step
这里将需要跑的数据集的路径添加到prepare_mlmatch_configs.py文件中
运行会输出生成的文件路径
我没有对数据集进行训练,而是直接跑作者给出的模型
python multilevel_match.py $resdir/model.json $resdir/path.json --load_video_first --eval_set tst
在multilevel_match.py文件加上model.json和path.json的路径,就是上一步输出的路径,加上–eval_set的参数tst。
总结
大多数成功的跨模式视频文本检索都是基于联合嵌入的方法。然而,简单的嵌入不足以捕获复杂视频和文本中的细粒度语义。因此,本文提出了一个层次图推理(HGR)模型,将视频和文本分解为事件、动作和实体等层次语义层。然后通过基于注意力的图形推理生成层次化的文本嵌入,并将文本与不同层次的视频对齐。总体的跨模态匹配是通过聚合来自不同层次的匹配来生成的。 这种分层分解还可以更好地跨数据集进行泛化,并提高区分细粒度语义差异的能力。