视觉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 为:
其中
即每个token/patch对应的输入显著值为所有Block b的saliency map累乘。对
下图为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可视化方法。
参考: