Skip to content

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 类。

任务

  1. 加载模型:使用 timmtorchvision 加载一个预训练好的 vit_base_patch16_224
  2. 修改头部:将模型最后的Head从输出 1000 维改成输出 10 维。
  3. 冻结与解冻:
    • Linear Probing:冻结除了 Head 以外的所有参数,只训练最后一层。
    • Full Fine-tuning:解冻所有参数,用很小的学习率微调整个网络。
  4. 训练:在 CIFAR-10 上训练。

提交

  • 记录 Linear ProbingFull Fine-tuning 的 Accuracy 对比曲线。

Step 3:Attention Map 可视化

背景

CNN 看图通常是“从局部到整体”,而 ViT 一上来就是“全局视野”。我们想看看 ViT 到底在关注图片的哪里。

任务

  1. 找 1 张测试图片(比如一只狗在草地上)。
  2. 将图片输入你训练好的模型。
  3. 核心难点:提取最后一层 Transformer Block 中的 Self-Attention Weights
    • Attention 的权重形状应为:(Batch, Heads, N+1, N+1)
    • 其中 N+1 表示 Patch 数量 + CLS Token
  4. 处理权重:取出 [CLS] Token 对其他所有 Image Patches 的注意力权重。
    • 含义:模型认为哪些 Patch 对分类最重要。
  5. 可视化:将该权重向量 reshape 回 14x14 的 2D 矩阵,插值放大到 224x224,并以此作为热力图(Heatmap)叠加到原图上。

提交

  • 几张不同图片的“原图 + 热力图”叠加结果。
  • 预期:如果是一张狗的图,热力图的高亮区域应当尽量覆盖“狗”的主体,而尽量忽略背景。

一些问题

  1. 关于感受野:

    • CNN 的感受野是随着层数加深慢慢变大的。请结合论文和代码原理分析:ViT 的第一层的有效感受野是多大?
    • 为什么 ViT 能够捕捉到 CNN 很难捕捉的长距离依赖
  2. 关于位置编码:

    • 如果输入图片尺寸不是 224x224,而是 384x384,Patch Size 保持 16 不变,那么 Patch 的数量会变多。
    • 这时候预训练好的 Position Embedding 长度不够用,程序会报错。
    • 问题:根据论文,应该如何处理这些预训练的位置编码,才能让它适配更大的分辨率?
  3. 关于归纳偏置:

    • 论文中反复提到 ViT 缺少 CNN 的“归纳偏置”。这导致了 ViT 在小数据集上直接从头训练的效果通常不如 ResNet。
    • 请解释原因。

📂提交清单

  1. 代码:
    • 模型加载
    • Head 修改
    • 训练循环
    • Attention Map 可视化代码
  2. 实验报告:
    • Loss / Accuracy 曲线图
    • 可视化结果图(原图 vs 热力图)
    • 对上述 3 个问题的回答

Released under the MIT License.