1.3 GMACs 跑通图像分类:deit_tiny_distilled_patch16_224.fb_in1k 蒸馏 Transformer 快速上手
【免费下载链接】tt-metal:metal: TT-NN operator library, and TT-Metalium low level kernel programming model.项目地址: https://gitcode.com/GitHub_Trending/ttm/tt-metal
deit_tiny_distilled_patch16_224.fb_in1k 用5.9M 参数、约1.3 GMACs的单次推理开销就能完成 224×224 图像分类,是边缘端与移动端落地轻量视觉 Transformer 的实用之选。
一张表看懂关键参数
跑之前先确认几个核心规格,心里有数再动手:
| 参数 | 数值 | 说明 |
|---|---|---|
| 参数量 | 5.9M | 体积极小,搬运到端侧设备的成本很低 |
| 计算量 | 1.3 GMACs | 单次前向乘加次数,决定实时性上限 |
| 输入尺寸 | 224×224 RGB | 与 ImageNet 标准预处理分辨率一致 |
| 特征维度 | 192 | forward_features输出每个 token 的维度 |
| 训练集 | ImageNet-1k | 1000 类自然图像分类基准 |
提示:GMACs是"十亿次乘加运算"的单位,数字越小,对硬件算力的要求越低,也越省电。
它凭什么又快又好
先用一个类比理解知识蒸馏:学徒跟大厨学做菜,师傅不会把整本菜谱塞给他,而是现场演示火候与摆盘——学徒花远小于啃完所有书的力气,就能还原出九成的味道。知识蒸馏同理:大"教师"模型输出的不是唯一的硬标签,而是"猫 0.8、狗 0.1……"这样一份软概率排序,小"学生"模型去模仿这份排序。deit_tiny_distilled_patch16_224.fb_in1k 就是按这个思路训练出来的。
顺着"输入→处理→输出"把它的计算过程过一遍就清楚了。
输入端:你给它的是一张 224×224 的图。模型先把画面切分成 196 块 16×16 的 patch,再用线性映射把每一块变成 192 维向量——这就是patch token,你可以把 token 理解成模型眼中的"一句话":它不再逐像素看图,而是把每块图像当作一个可计算的单元。此外还会拼上两个特殊 token:汇总整图信息的CLS token,以及专为模仿教师软答案而生的distillation token,最终得到 198 个 token 的序列。
处理端:这 198 个 token 依次穿过 12 层编码块。每块里的多头自注意力让所有 patch 互相"交换信息",感受图像上下文;distillation token 则在每一层同步更新,把教师模型的知识一点点吸收进来。
输出端:CLS token 与 distillation token 各过一个分类头,得到两份打分(logits),两者取平均后就是最终预测。这也解释了为什么它"又快又好"——蒸馏信号全程参与,而不是只改最后一步。
上图来自仓库技术报告 tech_reports/ViT-TTNN/vit.md,展示同族 ViT 模型的注意力计算如何映射到 Tenstorrent 硬件上,想看底层细节可以参考。
三步跑通第一个推理
Step 1 环境安装:装好 timm 推理依赖
该模型已内置在 timm 库中,你不需要额外下载权重文件,一个装好 PyTorch 的干净 Python 环境即可。执行一条命令装齐依赖:
pip install timm torch torchvision✅ 装完后import timm不报错,就可以进入下一步。
Step 2 一次前向推理:8 行代码出分类结果
加载预训练 checkpoint,按模型自带的数据变换配置做预处理,再对一张本仓库的样例图做前向。最后一行打印预测类别索引:
import timm from PIL import Image model = timm.create_model("deit_tiny_distilled_patch16_224.fb_in1k", pretrained=True).eval() cfg = timm.data.resolve_model_data_config(model) tfm = timm.data.create_transform(**cfg, is_training=False) img = Image.open("models/sample_data/huggingface_cat_image.jpg") print(model(tfm(img).unsqueeze(0)).argmax(-1))样例图直接取自仓库:
models/sample_data/huggingface_cat_image.jpg,无需从网络拉取。
Step 3 抽取特征向量:拿 192 维图像嵌入
如果你的目标是相似度检索或特征存储,而非类别预测,把num_classes设为 0 去掉分类头,改调forward_features,即可得到形状为(1, 198, 192)的 token 序列:
feat_model = timm.create_model( "deit_tiny_distilled_patch16_224.fb_in1k", pretrained=True, num_classes=0, ).eval() feat = feat_model.forward_features(tfm(img).unsqueeze(0)) print(feat.shape) # torch.Size([1, 198, 192])落地场景对照
| 场景 | 为什么适合 |
|---|---|
| 手机 App 端图像识别 | 5.9M 参数 + 1.3 GMACs,端侧 NPU/手机芯片可轻松承载 |
| 物联网边缘视觉分析 | 无 GPU 依赖,功耗低,适合常电受限的传感器节点 |
| 高并发实时分类服务 | 单样本计算量小,同等算力下可支撑更高 QPS |
| 轻量特征检索与去重 | 192 维嵌入索引成本低,便于做相似图匹配 |
参考与延伸
论文引用(bibtex):
@InProceedings{pmlr-v139-touvron21a, title = {Training contenteditable="false">【免费下载链接】tt-metal:metal: TT-NN operator library, and TT-Metalium low level kernel programming model.
项目地址: https://gitcode.com/GitHub_Trending/ttm/tt-metal创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考