TS-CAM:由Vision Transformer架构产生CAM类别激活图的一种方法

文章目录

  • TS-CAM:由Vision Transformer架构产生CAM类别激活图的一种方法
  • 前言
  • 一、论文链接和代码链接以及重新训练模型得到可视化结果
  • 二、TS-CAM论文是如何由Vision Transformer得到类别激活图的?
    • 1.embedding层
    • 2.transformer encoder层+Conv2d head层
    • 3.可视化
  • 总结

前言

《TS-CAM: Token Semantic Coupled Attention Map for Weakly Supervised
Object Localization》这篇文章解决的是弱监督定位问题(单标签),但其主要内容是由Vision Transformer架构得到一种类别激活图: TS-CAM。本文结合论文内容和Vision transformer, TS-CAM的代码,用画图的形式解释作者的思路。


一、论文链接和代码链接以及重新训练模型得到可视化结果

TS-CAM论文:
论文
TS-CAM代码链接:
TS-CAM代码
Vision Transformer代码链接:
ViT代码
以下内容均来自于对以上文献和代码的理解,在此表示感谢!
在服务器上重新训练模型后,我们重新可视化CUB200种鸟类数据集的结果,确保代码应该无误。
以下是原文中的一张鸟类结果图。最后一张图是该图片对应的TS-CAM。

下面是重新训练模型后得到的该张图片的TS-CAM结果图(取阈值0.4)。

以下是另一张原文中的结果图。最后一张图是该图片对应的TS-CAM。

下面是重新训练模型后得到的该张图片的TS-CAM结果图(取阈值0.4)。

确认代码运行无误后,我们结合代码看作者的思路。

二、TS-CAM论文是如何由Vision Transformer得到类别激活图的?

1.embedding层

我们以一种规模的ViT模型vit_base_patch16_224_in21k为例,16表示每个patch大小是16×16个像素,224表示所有图像要先调整尺寸为224×224后再输入模型,in21k表示该模型已在Imagenet21k上预训练过。对于一个大小为[3, 224,224]的图像,每个patch大小为16×16,则一幅图像中有14*14个patch。
对于transformer模块,要求输入的是token序列(向量序列),得到每一个图像块的token是用卷积操作实现的。例如,要将每个patch编码为一个768长度的向量,则我们需要768个卷积核,每个卷积核大小为16×16,步长是16。如下图所示。

每一行是一个patch的token向量。
在输入到transformer block之前需要加上class token以及position embedding,这两个都是可训练参数。class token是作为一个单独的768维向量加到第一行上,position embedding是作为一个768维向量加进每一个token中,如此,embedding层最终得到的矩阵大小是[197,768], 第一行对应class token,其余行对应每一个patch token。

2.transformer encoder层+Conv2d head层

在得到class token和patch token后,我们就得到了embedded patches。将其送入transformer encoder中,transformer encoder的内部结构如下图所示:

除了Layer Norm和Dropout外,就是Multi-Head Attention和MLP两个模块了。论文中有用到12个transformer block,每个Multi-Head Attention模块里用到12个head。我们只看一个transformer block, 并以3个head为例,multi-head attenttion操作如下:

论文中有12个head, 所以对每个head而言,patch token(class token)的特征向量维度是768÷12=64维。对应的qqq矩阵和k⊤k^{\top}k矩阵如下图所示:

根据公式q⋅k⊤/dkq \cdot k^{\top} / \sqrt{d k}qk/dk

计算注意力矩阵attention matrix,然后以行为单位进行softmax操作。

矩阵中每一个元素是一个patch对另一个patch的特征依赖(qqqkkk之间的相似度)
然后我们将attention matrix和vvv矩阵相乘,得到每个patch的新的特征向量。操作如下图:

从上图可以看到,对于一个head而言,每一列是一个patch(class)的64维特征向量,我们将12个head的特征向量融合,融合的方式就是乘上一个矩阵。操作如下图所示:

上图中197×768的矩阵是经过一个多头注意力后得到的class token和patch token。这之后是一个MLP模块,里面是Linear层和GELU激活层,这里略。
之后的transformer block重复上述操作。在最后一个transformer block结束后,我们得到197×768大小的class token+patch token矩阵,如上图所示,我们将图像块的特征向量即patch token部分取出来,记作x_patch,我们将它按照在图像中的位置进行reshape,操作如下图所示:

然后经过一个卷积层,将通道数变为类别数,再由全局平均池化得到最终的类别分数。卷积层之后的特征层论文中记为feature_maps。作者在文中提到,这个feature_maps富含语义信息,可以和不含语义信息的注意力图相乘得到类别激活图。注意力图由我们在每个transformer block(一共12个)得到的attention matrix获得。具体做法如下图;

在得到注意力矩阵joint_attention后,作者只取了第一行(第一行第一列的元素也不要)向量,叫做class token的注意力向量,将这个向量按照patch在图像中的位置进行reshape操作,得到cams_re, 如下图所示:

最终的TS-CAM图由缺少语义信息的注意力图cams_re和富含语义信息的feature maps按元素相乘得到。

3.可视化

下面我们可视化几张COCO数据集上图片的注意力图cams_re和特征图feature maps,以及将它们两个相乘得到的TS-CAM图,COCO数据集有80个类别,所以feature maps和TS-CAM图都是80个通道,而注意力图是单通道的。
示例1:
将注意力图和特征图相乘即得到下图的TS-CAM类别激活图:

红色框是预测出的类别
示例2:


总结

以上是TS-CAM的具体获取细节。更多的可视化方法可参考github官方文件:
CUB数据集可视化TS-CAM

TS-CAM: Token Semantic Coupled Attention Map for Weakly Supervised Object Localization相关推荐

  1. Contrastive learning of Class-agnostic Activation Map for Weakly Supervised Object Localization and

    paper: Contrastive learning of Class-agnostic Activation Map for Weakly Supervised Object Localizati ...

  2. 【论文阅读--WSOL】Spatial-Aware Token for Weakly Supervised Object Localization

    文章目录 方法 实验 Limitation 论文:https://arxiv.org/abs/2303.10438 代码:https://github.com/wpy1999/SAT/blob/mai ...

  3. Weakly Supervised Object Localization:From CNN to Transformer、Weakly Supervised Semantic Segmentatio

    弱监督学习 知识点补充 一. 弱监督学习类型 不完全监督问题 1.主动学习 2.半监督学习 迁移学习 不确切监督问题(类似于一个包装盒子有标签,但是盒子中具体的东西没有标签) 解决办法----多示例学 ...

  4. 【论文阅读】Online Attention Accumulation for Weakly Supervised Semantic Segmentation

    一篇弱监督分割领域的论文,其会议版本为: (ICCV2019)Integral Object Mining via Online Attention Accumulation 论文标题: Online ...

  5. 阅读笔记:Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation

    Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation 基于等变注意力机 ...

  6. 【论文阅读】Regional Semantic Contrast and Aggregation for Weakly Supervised Semantic Segmentation

    论文标题: Regional Semantic Contrast and Aggregation for Weakly Supervised Semantic Segmentation 作者信息: 代 ...

  7. Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation

    A new way to generate CAMs by equivalent after affine PCM ( Pixel Correlation Module): less function ...

  8. BBAM: Bounding Box Attribution Map for Weakly Supervised Semantic and Instance Segmentation

    本文是对2021年CVPR论文弱监督BBAM进行总结,有一些自己的理解 原文链接:https://arxiv.org/abs/2103.08907https://arxiv.org/abs/2103. ...

  9. Self-supervised Equivariant Attention Mechanism for Weakly Supervised Semantic Segmentation论文解读

    (CVPR 2020|中科院VIPL实验室) 1.要解决的问题: 基于类别标签的弱监督语义分割是一个具有挑战性的问题,类别响应图(class activation map,简称CAM)始终是这一领域的 ...

最新文章

  1. Javascript实现导航锚点滚动效果实例
  2. python123平台作业答案第十二周_【2018年 网鼎杯CTF 第二场】红日安全-网鼎杯WriteUp(24日 更新:web详解)...
  3. tcpdump软件使用
  4. 【架构一】高可用之冗余备份
  5. java基本语法 2017_Java基本语法——(用于日后复习)
  6. 使用SpringBoot+JPA报错Incorrect syntax near 'hibernate_sequence'
  7. python中括号配对检测_使用模板匹配在Python上进行对象检测!(附代码)
  8. C#中的String类
  9. FFmpeg流媒体调试工具(六)
  10. 乐max2 android9,辣评烩:乐Max 2即将升级EUI 6.0 基于安卓7.0!
  11. ubuntu20.04下QT安装
  12. PostMan中文插件支持8.12.2
  13. jacod 使用 WPS或 office相关注册表信息
  14. 平台 -- 依赖平台 Nexus
  15. 获取淘宝订单的解决方案
  16. 2018/05/11,暗里着迷
  17. 自控力极差的人如何自救?
  18. 优恩解答GDT放电管是怎么工作的
  19. android 电池(一):锂电池基本原理篇
  20. 5000套web前端期末大作业 HTML+CSS+JavaScript网页设计实例 企业网站制作【建议收藏】

热门文章

  1. 知乎香港上市,首家以双重主要上市回港的中概股
  2. mysql脑裂_说说Keepalived的脑裂
  3. VS Code搭建Ts环境
  4. 【产品】什么是灰度发布
  5. 【女程序员故事】美女工程师的道路---思迅软件-专卖、母婴 --女售前工程师-熊工
  6. 流媒体服务器 php,简单的家庭流媒体服务器的PHP汉语拼音
  7. Sublime Text3 显示左侧的目录树
  8. 轮滑运动相关html网页,轮滑运动入门常识
  9. Hadoop资源调度框架YARN
  10. 关于springmvc项目中引入jackson处理JSON遇到的500错误的记录