Appearance
Part 5(进阶2 选做):视觉新范式 —— ViT 的“迁移”与“透视”
本题为全流程实战,重点考察两点:
- 迁移学习:能否驾驭预训练模型,并修改模型结构(Head)以适配新任务。
- 可解释性:提取并可视化 Attention Map,证明模型“看懂了哪里”。
🎯背景与目标
本任务要求你利用 ImageNet 上预训练好的 ViT 模型,将其迁移到一个小数据集(CIFAR-10 或 猫狗分类)上,并使用可视化手段证明你的模型不仅仅是“猜对了类别”,而是真正“看懂了图片”。
🛠️任务拆解
Step 1:论文精读
- 阅读对象: An Image is Worth 16x16 Words
- 关注重点:
- 重点阅读实验部分,理解为什么 ViT 在小数据集上由预训练转微调时效果会更好。
- 理解 Attention 机理:模型是如何通过 Self-Attention 聚合全局信息的?
Step 2:迁移学习实战
场景
官方的 ViT 是分 1000 类的(ImageNet),现在我们要分 10 类。
任务
- 加载模型:使用
timm或torchvision加载一个预训练好的vit_base_patch16_224。 - 修改头部:将模型最后的Head从输出 1000 维改成输出 10 维。
- 冻结与解冻:
- Linear Probing:冻结除了 Head 以外的所有参数,只训练最后一层。
- Full Fine-tuning:解冻所有参数,用很小的学习率微调整个网络。
- 训练:在 CIFAR-10 上训练。
提交
- 记录 Linear Probing 和 Full Fine-tuning 的 Accuracy 对比曲线。
Step 3:Attention Map 可视化
背景
CNN 看图通常是“从局部到整体”,而 ViT 一上来就是“全局视野”。我们想看看 ViT 到底在关注图片的哪里。
任务
- 找 1 张测试图片(比如一只狗在草地上)。
- 将图片输入你训练好的模型。
- 核心难点:提取最后一层 Transformer Block 中的 Self-Attention Weights。
- Attention 的权重形状应为:
(Batch, Heads, N+1, N+1) - 其中
N+1表示 Patch 数量 + CLS Token
- Attention 的权重形状应为:
- 处理权重:取出
[CLS]Token 对其他所有 Image Patches 的注意力权重。- 含义:模型认为哪些 Patch 对分类最重要。
- 可视化:将该权重向量 reshape 回
14x14的 2D 矩阵,插值放大到224x224,并以此作为热力图(Heatmap)叠加到原图上。
提交
- 几张不同图片的“原图 + 热力图”叠加结果。
- 预期:如果是一张狗的图,热力图的高亮区域应当尽量覆盖“狗”的主体,而尽量忽略背景。
一些问题
关于感受野:
- CNN 的感受野是随着层数加深慢慢变大的。请结合论文和代码原理分析:ViT 的第一层的有效感受野是多大?
- 为什么 ViT 能够捕捉到 CNN 很难捕捉的长距离依赖
关于位置编码:
- 如果输入图片尺寸不是
224x224,而是384x384,Patch Size 保持 16 不变,那么 Patch 的数量会变多。 - 这时候预训练好的 Position Embedding 长度不够用,程序会报错。
- 问题:根据论文,应该如何处理这些预训练的位置编码,才能让它适配更大的分辨率?
- 如果输入图片尺寸不是
关于归纳偏置:
- 论文中反复提到 ViT 缺少 CNN 的“归纳偏置”。这导致了 ViT 在小数据集上直接从头训练的效果通常不如 ResNet。
- 请解释原因。
📂提交清单
- 代码:
- 模型加载
- Head 修改
- 训练循环
- Attention Map 可视化代码
- 实验报告:
- Loss / Accuracy 曲线图
- 可视化结果图(原图 vs 热力图)
- 对上述 3 个问题的回答
