Predicting Visual Features from Text for Image and Video Caption Retrieval

ryluo 2020-06-14 01:29:22

非对称特征处理的跨模态检索

Predicting Visual Features from Text for Image and Video Caption Retrieval (Word2VisualVec)

背景:

在使用文本进行图像和视频的检索时,文本和图像两个模态的特征没有可比性,所以一般将两个模态的特征都进行提取使两个模态到达一个公共的隐式空间,在这个隐式空间中两个模态的特征都得到了更好的表达,此外还可以在这个空间中进行跨模态相似度的计算。

主要内容:

这篇工作与之前绝大多数的对称特征处理的跨模态检索不一样,它直接在视觉特征空间中进行检索。这种做法的好处就是完全可以不管视觉模态的特征处理,而把精力完全放在文本到视觉的映射上。

形象的解释就是:对于一张图片或者一个视频,其描述可能有非常多种,那么如何在图像或者视频的文本描述空间找到与当前待查询的图片或视频最合适的文本特征。

image-20200411084704422

模型结构:

Image: 直接使用现有的图像分类模型队图像进行特征提取(ResNet-152, GoogleNet, AlexNet),之后就不再对图像的特征进行处理了,把它当作是图像的特征空间

sentence: 在该模型中对句子的处理使用了多尺度的特征提取,BoW, word2vec, GRU,分别从词频,词向量和句子向量进行考虑,将多尺度的句子特征拼接到一起。然后通过多层感知机对句子向量进行映射。

Similarity: 将映射好的sentence向量和由预训练模型提取到的特征向量使用余弦相似度作为损失函数,对模型进行训练

Predict: 预测的时候先将句子通过多尺度编码成向量之后,再与图像特征计算相似度,最终选出最相似的TopN.

image-20200411085553669

论文实验:

Word2VisualVec和word2vec的对比:

image-20200411100106548

DeepDream可视化

image-20200411100149158

Retrieval results

image-20200411100306903

论文总结:

对于这种非对称的跨模态检索问题,可以减少一个模态的特这个提取,但是加大了另一个模态建模的压力,这里作者通过可视化一种模态到另一种模态的效果,其实一方面方便调整模型,另一方面可解释性也更强。

这篇论文是关于从文本模态到图像模态的映射,下周准备看的论文是从图像模态到文本模态的映射,都有相应的可视化,我觉得这写可视化的方式也可以借鉴来检验自己的模型的可解释性。

本周实验

Pytorch版本不同导致的问题

Pytorch0.3-Pytorch0.4的改变

0.3到0.4版本是大改,主要修改的内容如下:

  1. 梯度

    • Variable()中,requires_grad=Fasle时不需要更新梯度, 适用于冻结某些层的梯度;
    • volatile=True相当于requires_grad=False,适用于测试阶段,不需要反向传播。在torch>=0.4中,这个现在已经取消了,使用with torch.no_grad()或者torch.set_grad_enable(grad_mode)来替代:
  2. tensor与Variable

    • requires_grad 已经是Tensor的一个属性了

    • Tensor在0.4中,现在默认requires_grad=False的Variable了,相当于(tensor 等价于Variable(Tensor,requires_grad=Fasle)),
      torch.Tensor和torch.autograd.Variable现在其实是同一个类! 没有本质的区别! 所以也就是说, 现在已经没有纯粹的Tensor了, 是个Tensor, 它就支持自动求导! 你现在要不要给Tensor包一下Variable都没有任何意义了

  3. .item()
    以前取tensor的值用.data,现在用.item()
    比如为了显示loss到命令行:以前了累加loss(为了看loss的大小)一般是用total_loss+=loss.data[0] , 比较诡异的是, 为啥是.data[0]? 这是因为, 这是因为loss是一个Variable, 所以以后累加loss, 用loss.item().

Pytorch0.4-Pytorch1.0的改变

0.4到1.0只是小改,具体修改内容如下:

这周主要的工作是调参,但是不管怎么调参结果都和原作者的结果不一样,后来发现不仅仅是python版本带来了各种问题,而且pytorch的版本影响也是非常大。(自己使用python3.6,pytorch1.0改写原作者的python2.7, pytorch0.3)

下周计划