CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)

本文为随笔,主要记录个人寒假的一些工作情况,其中2月份因病休息了两周

Contents

    • Things to do
    • Overview of the papers in CVPR 2019
    • The change of bottom-up-attention code

Things to do

  • Update the code of bottom-up-attention of Visual Question Answering
  • English prepration
  • Preprare the first draft of the paper and submit it to Arxiv
  • Follow the work in my paper list (4/7+1)
  • Build a homepage for myself

Overview of the papers in CVPR 2019

This list is filtered by one of the following keywords: attention, visual question answering

  1. Deep Modular Co-Attention Networks for Visual Question Answering
    这篇文章将Transformer的结构引入到VQA中,并设计了两个attention的模块:SA(self-attention)与GA(guided-attention), 如下图:
    tylukf CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第1张图片
    依照上图的module,可以组成更深度的attention模块。作者将该方法与dense attention的方法进行了比较(如BAN、MFH等),随着attention层数的递增,该方法的performance有更显著的提高。在此基础上,作者有提出了两种层数的叠加策略(inspired by the transformer):
    CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第2张图片
    另外作者做了三部分实验,值得我们参考:第一部分为MCAN(Modular Co-attention Network)的变种比较;第二部分为attention map的可视化分析;第三部分为performance的对比与当前state-of-the-art。实验充分,让这篇paper的质量有不少提高。

  2. Attention Branch Network: Learning of Attention Mechanism for Visual Explanation
    这篇文章和下篇文章均是关于CNN的可解释性的相关工作,这里简单介绍下这方面的related work:

    1. CAM机制(Class Activation Mapping):以Saliency Map的形式展示决策依据;利用GAP(Global Average Pooling,相当于一个size为整个特征图大小的pooling层,让每个feature-map特别对应于每个类别)取代了原本CNN的全连接层。如下图所示(上侧为原始CNN,下侧为采用GAP的模型):
      CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第3张图片
      CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第4张图片
      有篇博客讲的很好,引用一下其中的一句话解释:

    很重要的一点是,在最后的mlpconv层(也就是最后一层卷积层)强制生成了和目标类别数量一致的特征图,经过GAP以后再通过softmax层得到结果,这样做就给每个特征图赋予了很明确的意义,也就是categories confidence map

    1. Grad-CAM机制:为了解决CAM机制的缺陷,即需要修改原模型并重新训练。这里再引用下一句话:CAM通过替换全连接层为GAP层,重新训练得到权重,而Grad-CAM另辟蹊径,用梯度的全局平均来计算权重。 具体这里不再赘述,感兴趣的请参考这篇博客。另外在VQA任务中,19年NIPS有篇文章也将Grad-CAM的机制引入,来确定image中各个区域对最后answer的影响因子,并利用ground-truth来引导模型达到:正确的image region对正确的answer影响大,并对错误的answer影响小。方法很简单明了,论文名:Self-Critical Reasoning for Robust Visual Question Answering


    在本文中,作者在CAM基础上,提出了新的网络结构。在不依赖back propagation的情况下,利用CAM结构引入attention mechanism,并提高CNN的准确率。(原始的CAM因为修改了CNN的最后结构,会导致performance下滑)。该模型与CAM比较,如下图所示:
    CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第5张图片

  3. Attention-based Dropout Layer for Weakly Supervised Object Localization
    首先介绍下weekly supervised object localization,即只给定label(object的名字),但要求模型能够完整的定位这个object,类似于segmentation。在这个task下,为了定位完整的object,常见的方法是mask图像中most discriminative的区域,然后让模型继续在mask后的图像中进一步寻找discriminative的区域,最终组合成完整的object。关于这个task的论文很多,但基本思路都大体不变,即如上所述。
    在这篇文章中,作者将传统的mask-and-seek机制,替换为了dropout layer,在不引入新的参数的同时,减少了计算量并提高了性能。模型图如下:
    CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第6张图片
    在上图模型中,作者通过对‘self-attention map’进行threshold和sigmoid操作得到了drop mask与importance map,再通过随机选择这二者之一,应用到原feature map,得到最终结果。注:1)这里是针对每个feature-map进行操作,也就是它对应的mask和importance是针对细度的feature。而传统的mask-and-seek是指对image的区域进行mask。2)随机选择的目的是为了保证模型能利用好most discriminative的feature来预测结果,同时也能让模型学会利用less discriminative的feature。

  4. Dynamic Fusion with Intra- and Inter-modality AttentionFlow for Visual Question Answering
    这篇文章针对多模态的fusion方式,Motivation:现有的VQA任务的模型几乎都是基于inter-modality的关系进行fusion,虽然也有部分基于intra-modality的模型,但是inter与intra却未曾同时考虑过。下面是模型框架:
    CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第7张图片)
    从上图看出,第一步为inter-fusion,第二步为intra-fusion。同时,这篇论文还指出dynamic-intra-modality-fusion在boost performance上起到了重要作用。注:这篇论文也是将transformer架构引入VQA任务中的一项工作,不过选择了一个好的角度(从两种modality切入,不过个人认为并不是superior insight)。下图为dynamic-intra-modality-fusion的架构图:
    CVPR 2019关于Attention导读与Bottom-up代码修改(已附github链接)_第8张图片
    关于为什么采用dynamic-intra-modality-fusion的方式,作者做出了如下解释:所谓dynamic,其实是针对不同的question,应该有不同的intra-attention,也就是conditional的intra-fusion。具体来讲,对于同一张image,但是输入不同的question,modality内部各个region直接的关系应该在不同的question下存在差异。引用下作者原句:“Some relations are important but could only be identified conditioned on information from the other modality. For instance, even for the same input image, relations between different visual region pairs should be weighted differently according to different questions. ”

  5. Heterogeneous Memory Enhanced Multimodal Attention Model for Video Question Answering

  6. Learning Unsupervised Video Object Segmentation through Visual Attention

  7. Object detection with location-aware deformable convolution and backward attention filtering

The change of bottom-up-attention code

附上修改后的github链接:https://github.com/BierOne/bottom-up-attention-vqa,已更新

  • 数据预处理与数据读取改动:
    • 更新了image-rcnn的提取代码,并取消了img_id2idx文件的创建。
    • 更新了utils.py,进行更简洁的数据读取。
    • 对dataset.py进行了修改,对代码添加了test功能
    • 对训练时load_image进行了修改,将init dataset时打开image_feature.h5文件写到了函数中。因为在训练时会有多个线程运行,按照原始代码在init时打开h5会导致多个线程用同一个file object。而改到函数中,则有多个reader读取不同的file object,加快读取速度。
    • 调整了预处理文件的创建过程,可以更方便的进行数据集间的切换(v1, v2, cpv1, cpv2),现在只需第一次切换的时候预处理一次即可。
    • 对config.py进行了补充,并修剪了所有代码的有关部分
  • 对model部分进行了小的改动,进行了一些修剪。另外在转换python2到python3版本的时候,遇到了performance下滑的问题,不过已经分析处理原因,具体可以参考下面的博客。
  • 对代码进行了重新整理分类,规整化
  • 对train模块进行了较大的改动,参考自改源码,个人认为这份代码的训练模式较为优雅。
  • 模型采用0.3版本的pytorch,将其更新到1.0版本。

代码修改过程中的相关问题和一些知识见如下博客:

  • pytorch-由python版本切换引起weight_norm计算不一致?
  • pytorch-1.0.1-RNN相关
  • pytorch-rnn.flatten_parameters作用
  • python2.7与python3的一些常见差异
  • pytorch-dropout相关
  • pytorch-1.0.1-embedding相关问题

你可能感兴趣的:(神经网络,深度学习,pytorch,python,computer,vision)