1. 这次复现做的是什么

这次我没有换数据集,而是在原来的 Fashion-MNIST 复现线上继续往前走了一步。

上一条线我做的是:

  • CNN baseline
  • MCNN15

这次我想验证的是:

如果把模型换成更新一点的 Vision Transformer,在同一个小型公开图像数据集上,会不会更容易体现出优势。

当前选择的论文是:

  • Enhancing Fashion Classification with Vision Transformer (ViT) and Developing Recommendation Fashion Systems Using DINOv2

这里我没有一上来就碰论文里的推荐系统扩展,而是先把最核心、也最适合复现起步的分类分支单独拿出来做。


2. 为什么继续用 Fashion-MNIST

这条线我依然保留 Fashion-MNIST,原因其实很简单:

  • 数据集公开
  • 十分类任务边界清楚
  • 图片尺寸小,适合个人设备做迭代
  • 可以直接和已有 MCNN15 结果做横向比较

也就是说,这次的变量不是“换一个更大的数据集”,而是:

在同一个 benchmark 上,把模型从传统卷积推进到更现代一点的 ViT

这对复现来说很有意义,因为它更容易看清:

  • 是模型变了
  • 还是训练策略变了
  • 或者只是工程代价变高了

3. 这次我具体做了什么

这条 ViT 复现线目前主要做了三部分工作。

3.1 保留已有 Fashion-MNIST 数据入口

数据入口没有重造,继续使用:

  • torchvision.datasets.FashionMNIST

这样做的好处是:

  • 保持和上一条 MCNN15 线的数据口径一致
  • 更方便比较模型,而不是被数据处理差异干扰

3.2 新增 ViT 模型线

这次新增的是:

  • ViT

而不是继续只在卷积模型内部做小修小补。

但和很多“直接贴个 ViT 名字就开跑”的做法不一样,这次我还额外做了一个工程判断:

  • 不自己手写一套 transformer 结构
  • 直接切到 timm

3.3 把 timm 引进来

最后我把实现底座换成了:

  • timm

这里面最重要的几个原因是:

  • 它有统一的视觉模型工厂接口
  • 可以方便切换不同 ViT / DeiT / 其他变体
  • 不用自己维护很多 transformer 细节
  • 后面如果继续升级到更强模型,改动更小

换句话说,这次不只是“跑一个新模型”,而是把这条线的工程底座也升级了。


4. 为什么我最后没有坚持用标准 224 输入

理论上说,很多标准 ViT 都是按 224 x 224 输入来设计的。

所以一开始我也试了比较标准的 timm ViT 口径。
但实际一跑,很快就碰到一个现实问题:

在本地环境里,这个代价太高了。

主要问题不是代码不通,而是:

  • 全量 Fashion-MNIST
  • ViT
  • 224 x 224 resize

放在一起以后,首轮正式实验的训练成本明显偏大,不适合作为这条线的第一轮复现口径。

所以后面我做了一个比较务实的调整:

  • 继续保留 timmViT 路线
  • 但把输入改成 64 x 64

这个调整的意义是:

  • 保住 ViT 模型家族和后续扩展能力
  • 同时把本地训练成本压到可以接受的范围

这其实也是论文复现里很典型的一步:
不是所有标准论文设置,都适合原封不动搬到本地第一轮实验里。


5. 这次用 timm 有什么优势

这一点我觉得很值得单独讲。

很多人做论文复现,容易陷入一个误区:
为了“显得是自己实现”,把所有结构都手写一遍。

但对于 ViT 这种模型,我这次更倾向于直接用成熟库,原因是:

5.1 模型切换成本低

通过统一接口,可以比较方便地切换:

  • ViT
  • DeiT
  • 其他视觉 transformer 变体

5.2 实现更成熟

比起自己维护一套本地 transformer 模块,timm 的实现更稳,也更省掉很多低价值 bug。

5.3 更适合后续升级

如果后面我还想试:

  • 预训练权重
  • 更强 backbone
  • 其他 transformer 族模型

改动会很小。

5.4 更适合写成持续更新的复现线

这条 Fashion-MNIST 线如果后面继续写文章,不会只停留在 MCNN15 或一个单独 ViT 模型上。
有了 timm,后面很自然就能扩成:

  • CNN
  • MCNN15
  • ViT
  • DeiT

这种连续比较线。


6. 第一轮正式结果:ViT 并没有短训即赢

先看最关键的一轮正式对比。

当前可用的第一轮结果是:

  • CNN, 5 epochs

    • accuracy 0.8885
    • macro-F1 0.8901
  • ViT, 5 epochs, 64 x 64

    • accuracy 0.8162
    • macro-F1 0.8063

这个结果说明一件很现实的事:

ViT 并不会因为“模型更新”就自动在短训练里赢过简单 CNN

这点我觉得非常值得讲,因为很多时候大家默认会有一个印象:

  • 架构更新
  • 模型更现代
  • 结果就应该更高

但在 Fashion-MNIST 这种小型图像任务上,事情没有这么简单。


7. 更长训练 + 调度器之后,ViT 确实有提升

为了确认问题是不是“训练还不够”,我又补了一轮更正式的 ViT

  • ViT, 10 epochs, 64 x 64, cosine scheduler
    • accuracy 0.8544
    • macro-F1 0.8515

和前一轮相比:

  • ViT 5 epochs

    • accuracy 0.8162
  • ViT 10 epochs + cosine

    • accuracy 0.8544

这个提升幅度其实已经很明显了。

所以这次更准确的判断不是:

  • ViT 不行

而是:

  • ViT 对训练时长和调度策略更敏感
  • 在小数据集上,它没有像小型 CNN 那样容易短时间起效

但即便如此,这一轮它还是没有超过:

  • CNN 5 epochs = 0.8885

也就是说,当前最客观的结论仍然是:

ViT 已经能跑通,也能通过更合理的训练策略显著提升结果,但在这版本地实现和当前预算下,还没有打过简单 CNN baseline

下面这张图是结果图:
在这里插入图片描述

8. 这条线现在最有价值的地方是什么

对我来说,这次最值得分享的,不是“我又用了一个新模型”,而是下面这个过程:

  1. 在同一个数据集上延续复现线
  2. 从卷积模型升级到 ViT
  3. 引入 timm 作为更成熟的工程底座
  4. 发现标准 224 口径本地代价过高
  5. 调整到 64 x 64 的务实版本
  6. 通过更长训练和 cosine scheduler 验证 ViT 的提升空间
  7. 最后得到一个不夸张、但很真实的结论

这比一句“我跑了 ViT”更有参考价值。

因为真正做论文复现时,很多时候最关键的不是模型名字,而是:

  • 你怎么做工程折中
  • 你怎么判断实验是否成立
  • 你怎么区分“模型不行”和“训练没给够”

9. 这条 ViT 线现在能不能算成功

如果问我能不能说“我已经成功复现出 ViT 优于 CNN 的结论”,那答案还是:

不能。

因为当前证据还不支持这个说法。

但如果换个更准确的表述,那么这条线已经可以算:

一条成立的 Fashion-MNIST + ViT 无源码论文初版复现实验。

现在能确定的事情包括:

  • ViT 链路已经跑通
  • timm 工程底座已经接入
  • 224 口径在本地第一轮实验里代价过高
  • 64 x 64 务实口径可以正式训练
  • 更长训练和调度器对 ViT 有明显帮助
  • 但当前结果还没有超过简单 CNN

所以它现在的定位应该是:

  • 新模型复现线已经建立

而不是:

  • 新模型已经证明更强

10. 小结

一句话总结这次 Fashion-MNIST + ViT 复现:

模型确实更新了,复现链路也已经成立,但在当前本地可承受的训练设置下,ViT 还没有立刻赢过简单 CNN

不过这条线最有价值的地方,也恰恰在这里。
它提醒我一件很重要的事:

更现代的模型,不等于在小数据集上短训就一定更强。

如果你也想做一条“数据集不变、模型逐步升级”的论文复现线,Fashion-MNIST 确实是一个很合适的起点。
它的价值不只是训练快,而是它能把很多模型与训练策略之间的真实差异暴露得很直接。
需要资料的私信我哟

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐