写点什么

视觉 Transformer 中的输入可视化方法

作者:百度Geek说
  • 2022 年 3 月 30 日
  • 本文字数:3682 字

    阅读完需:约 12 分钟

视觉Transformer中的输入可视化方法

导读:视觉 Transformer 的输入可视化方法,正广泛应用于百度内容理解和内容风控相关业务中,帮助研究人员构建效果更好的模型。百度内容策略团队,基于 Transformer 的输入可视化方法分析风控色情图像分类模型的误检数据,定向设计数据处理策略,在保持色情图像召回不变的情况下误检相比 base 下降 76.2%,极大的提升了模型的准确性。

全文 2760 字,预计阅读时间 7 分钟

一、可视化含义与意义

自 2012 年 AlexNet 出现以来,卷积神经网络逐渐成为图像分类、目标检测、语义分割等常见视觉任务中效果最好的方法之一,引起了广泛的关注和使用。后来研究人员又将在 NLP 等序列任务中大火的 Transformer 引入视觉领域,在多项任务中取得媲美甚至超越 CNN 的效果。然而不论 CNN 还是 Transformer 都是端到端的训练和推理,一定程度上属于黑盒模型。研究人员对模型内部的参数分布和特征变化接触较少,对于模型效果的分析和掌控十分受限。


神经网络可视化的目的,在于将模型内部的参数或激活值转化成能直接传递信息的特征图或显著图,帮助研究人员直观准确的判断模型当前的拟合状态,或者在推理结果不正确时对可能出现的问题进行定位和分析。


此前,有研究人员训练了一个图片分类器来区分北极熊和森林棕熊,测试准确率 100%。有好事者将北极熊照片 p 到森林环境后喂给分类器就被误判成棕熊了。原来这个图片分类器压根没学到北极熊和棕熊的特征,而是学到了根据周围环境来做判断。模型对于输入数据的可视化就可以用来解决这类问题,具体来说,给定一个图像分类模型和测试图像,希望能得到模型将测试图像分成某个类别 C 的输入依据,即模型是凭借哪些像素或区域判断出测试图像属于类别 C 的。


本文主要以图像分类任务为例,讨论模型对于输入数据的可视化。

二、视觉任务中 CNN 与 Transformer 的输入可视化区别

神经网络中的数据主要包括前向传播时神经元的激活值(Activation)和反向传播时神经元或参数的梯度值(Gradient),几乎所有可视化方法都是使用这两类数据来构造特征图或显著图。

2.1 CNN 中的输入可视化

常见的图像分类 CNN 模型结构中,输入为具有一定宽高的 1 或 3 通道图片,经过一系列卷积层和 pooling 层,再经过 GAP 和全连接层,最终映射为各个类别的概率。网络中的特征图相比输入宽高缩小、通道数增加,可以看做是“更矮、更瘦但更厚”的输入。根据卷积和池化的计算原理可知,特征图在宽高维度的特征和输入图像在宽高维度的特征是对应的,即特征图宽高维度左上角区域的值也对应输入图像宽高维度左上角区域的值。因此 CNN 中常用特征图的激活值或梯度值来构建输入图像的可视化结果。


如 Class Activation Map(CAM)方法中,将 GAP 前一层的特征图  上采样到输入分辨率  ,以全连接层学习到的 weights 为权重,将  的各个通道特征图加权求和归一化作为显著图。



再如 Gradient Class Activation Map(Grad-CAM)方法中,采用输出对  中每个单张特征图的梯度均值代替全连接层学习到的 weights 作为权重,再对所有特征图加权求和归一化得到显著图,可以摆脱模型对全连接层的依赖。

2.2 Transformer 中的输入可视化

Transformer 处理的是序列数据,Vision Transformer(ViT)将输入图像切成 n 个小 patch,每一个 patch 经过 embedding 后得到固定长度的一维 token。加上 class token 总计 n+1 个 token 分别编码成 q、k、v 后进行 self-attention 得到权重,对所有的 v 进行加权求和得到输出,在 ViT 中不再有类似 CNN 中“更矮、更瘦但更厚”的特征图作为 base 来构建针对输入的可视化显著图。



那么 ViT 中应该使用什么数据来构建输入显著图呢?


我们注意到输入显著图代表的含义是:找出输入图像中那些对最终分类决策起到重要影响的像素区域。ViT 的输出本质就是一系列 value 的加权和,权重的大小就代表了重要性。而权重是由不同 token 之间计算 self-attention 得到的,每个 token 又跟图像的每个 patch 一一对应,即某些 patch 的突出导致了最终的决策结果,这也正是输入可视化的含义所在。因此 ViT 的输入可视化关键就在于,哪个 patch 对应的 token 和 class token 做 self-attention 时得到了更大的权重,哪个 patch 对应的像素区域就对最终的分类结果起到更大影响。

三、Transformer 输入可视化方法

3.1 常见 Transformer 输入可视化方法

目前 Transformer 的输入可视化研究成果不多,现有方法基本都是围绕 self-attention 模块构建。rollout[1]方法中使用模型前向传播的 self-attention 激活值构建输入显著图,但是构建结果是 class-agnostic 的,不能反映不同类别对于模型决策结果的影响。LRP[2]通过 Deep Taylor Composition 来建模神经元之间的相互影响,并结合反向传播的思路构建输入对输出 logit 的影响。Partial- LRP[3]考虑了 Transformer 中 multi-head 的重要性不同,通过对 weights 范数的排序剔除对结果贡献较小 head 的影响,基于 LRP 构建输入显著图。但是这类方法依赖复杂的 LRP 计算过程,且对小目标的可视化效果较差。

3.2 一种鲁棒的 Transformer 输入可视化方法

结合 2.2 节分析和 Grad-Cam 思路,我们提出一种鲁棒的 Transformer 输入可视化方法,使用 self-attention 的激活值和梯度值来构建输入的显著图。以 ViT 为例,假设模型有 B 个 Transformer-Encoder Block,包括 class token 在内输入共 n+1 个 token,每个 Block b 的 self-attention 部分包含 h 个 heads,class token 在 Block b 中与其他 n 个 token 的 self-attention 值 ,对应的梯度  由可视化目标类别对应的输出置 1 其余类别全部置 0 后反向传播得到。则 Block b 中 class token 对应的 saliency map  为:


其中 为点乘,即 saliency map  为 Block b 中各个 head 中 self-attention 模块激活值和梯度值点乘结果的均值。所有 token/patch 对应的输入显著图  为:


ε


即每个 token/patch 对应的输入显著值为所有 Block b 的 saliency map 累乘。对 进行值平移使得最小值为 0 防止出现偶数个负值相乘反而变成正值的情况,对  加上 ε 防止累乘时 0 值将其他 Block 的显著值淹没。得到每个 patch 对应的输入显著值后,再按照 patch 切分的顺序将其拼成二维数据并上采样至输入尺寸,归一化后作为输入的可视化结果。下图为 ImageNet 训练的 ViT 模型可视化结果,其中奇数列为输入图像,偶数列为模型预测结果 top1 class 对应的输入可视化显著图。可以看到模型的判断依据准确的命中了相应的像素区域,表明模型确实学习到了准确的输入信息分类标准。



下图为 ViT 模型在相同输入针对不同输出类别的可视化结果,其中奇数列为输入图像,偶数列为模型预测结果 top2 class 对应的输入可视化显著图,可以看到模型对于不同类别的可视化结果也十分准确,这对于分类模型的收敛效果是一个强有力的证明。



下图为 ImageNet 训练的 ViT、Swin-Transformer 和 Volo 模型使用本文方法在相同输入下的可视化结果,可以看到不同架构的 Transformer 使用都能够比较准确的得到输入可视化结果,证明了该方法良好的鲁棒性和泛化性。




3.3 业务应用案例

在内容风控任务中,我们训练了一个基于 volo 的图像分类模型来识别百度图片搜索场景下的色情图像。由于百度图片搜索场景的图片数据总量巨大,几乎覆盖了全网所有图像类别,模型在召回满足要求的情况下误检较高,很长一段时间难以继续优化。后来我们在充分测试的基础上通过本文方法对误检数据进行可视化分析和统计,归纳出暗色短裤、手臂交叉、婚礼、格斗、人群聚集等 19 种容易引起误检的物体和场景,定向补充了负样本对模型进行 finetune。在保持召回相同的情况下误检相比 base 下降 76.2%,极大的提升了模型的准确性。

四、结语

本文介绍了一种鲁棒的视觉 Transformer 输入可视化方法,实验结果表明该方法对于多种不同 Transformer 架构的模型都有良好的可视化效果,目前这项技术广泛的应用于百度内容理解和风控相关业务中,帮助研究人员构建效果更好的模型。本文方法主要考虑了 Transformer 中的 token 对应 q、k 之间的 self-attention 值对于分类决策的影响,后续可以进一步研究将 token 对应的 v 值也纳入可视化考量中,构造更加准确、鲁邦的视觉 Transformer 可视化方法。


参考:


[1] Samira Abnar and Willem Zuidema. Quantifying attention flow in transformers. arXiv preprint arXiv:2005.00928, 2020.


[2] Sebastian Bach, Alexander Binder, Gre ́goire Montavon, Frederick Klauschen, Klaus-Robert Mu ̈ller, and Wojciech Samek. On pixel-wise explanations for non-linear classi- fier decisions by layer-wise relevance propagation.


[3] Elena Voita, David Talbot, Fedor Moiseev, Rico Sennrich, and Ivan Titov. Analyzing multi-head self-attention: Spe- cialized heads do the heavy lifting, the rest can be pruned. In Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics, pages 5797–5808, 2019.


推荐阅读:


深入理解 WKWebView (渲染篇) —— DOM 树的构建


深入理解 WKWebView(入门篇)—— WebKit 源码调试与分析


GDP Streaming RPC 设计


百度APP视频播放中的解码优


百度爱番番实时CDP建设实践


当技术重构遇上DDD,如何实现业务、技术双赢?


---------- END ----------


百度 Geek 说


百度官方技术公众号上线啦!


技术干货 · 行业资讯 · 线上沙龙 · 行业大会


招聘信息 · 内推信息 · 技术书籍 · 百度周边

用户头像

百度Geek说

关注

百度官方技术账号 2021.01.22 加入

关注我们,带你了解更多百度技术干货。

评论

发布
暂无评论
视觉Transformer中的输入可视化方法_后端_百度Geek说_InfoQ写作平台