人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载本文以 candle-examples/examples/hiera/README.md 为核心主体讲解如何在 Rust 深度学习框架 candle 中利用 timm 预训练的 Hiera 层级视觉 TransformerHierarchical Vision Transformer模型完成 ImageNet 图像分类推理。文中既给出可复现的完整命令行示例也结合 candle-transformers/src/models/hiera.rs 的模型实现源码与 candle-examples/examples/hiera/main.rs 的推理入口逐层剖析模型结构、配置与推理流程。读完本文你将掌握从 Hugging Face Hub 自动拉取权重、在 CPU/GPU 上完成分类推理、切换 tiny/small/base 等 6 种模型规格以及理解 Hiera 中「无花哨组件」的分层注意力设计。背景Hiera 是什么Hiera 是 Meta 团队提出的一类层级视觉 Transformer其论文《Hiera: A Hierarchical Vision Transformer without the Bells-and-Whistles》arXiv:2306.00989的核心思想是此前 ViT 类模型往往通过引入各种复杂模块如局部注意力、移位窗口、相对位置编码等来提升效果而 Hiera 认为如果使用MAEMasked Autoencoder自监督预训练提供足够的归纳偏置模型结构本身可以保持简单只需通过层级下采样 稀疏掩码注意力即可高效处理多尺度视觉特征无需那些「花哨bells-and-whistles」的组件。candle 仓库中的这一实现基于 timmpytorch-image-models中对应的 hiera.py 模型进行移植用于**推理inference**场景加载 timm 预训练权重分类头基于 ImageNet 数据集训练最终输出 Top-5 类别的概率。模型与权重通过 Hugging Face Hub 按需下载无需在本地预先准备权重文件。运行示例一条命令完成 ImageNet 分类candle 为每个示例都组织在 candle-examples/examples/hiera 目录下。hiera 示例的运行命令如下$ cargo run --example hiera --release -- --image candle-examples/examples/yolo-v8/assets/bike.jpg --which tiny命令中各部分的含义cargo run --example hiera在 candle-examples crate 中运行名为hiera的示例二进制--release启用优化视觉 Transformer 推理在 release 模式下才能获得可接受的性能--image path指定输入图片路径示例使用仓库自带的 candle-examples/examples/yolo-v8/assets/bike.jpg800×556 的公路自行车赛事照片--which size选择模型规格默认tiny可选值见下文「模型规格」一节。首次运行会在model.safetensors缺失时通过 hf-hub 客户端见 candle-examples/src/hub.rs其中实现了带进度条、支持本地缓存优先的下载逻辑自动下载预训练权重到本地缓存之后再次运行直接命中缓存无需重复下载。原文档给出的典型输出如下loaded image Tensor[dims 3, 224, 224; f32] model built mountain bike, all-terrain bike, off-roader: 71.15% unicycle, monocycle : 7.11% knee pad : 4.26% crash helmet : 1.48% moped : 1.07%输出解读第一行loaded image Tensor[dims 3, 224, 224; f32]输入图片已被加载并预处理为形状(3, 224, 224)、f32类型的张量3 个 RGB 通道 224×224 分辨率第二行model built模型结构已按选定配置构建完毕权重加载完成随后五行Top-5 分类结果每行格式为类别名称: 概率百分比。在示例图片上模型以 71.15% 的置信度判定为「mountain bike, all-terrain bike, off-roader」山地自行车/全地形自行车其余候选类别独轮车、护膝、头盔、轻便摩托车概率较低分类结果合理。命令行参数全解示例的 CLI 参数解析由 candle-examples/examples/hiera/main.rs 中基于clap的Args结构定义参数类型默认值说明--imageString无必填输入图片路径运行前必须提供--which枚举tiny模型规格tiny/small/base/base_plus/large/huge--modelOptionString无手动指定本地model.safetensors文件路径跳过 Hub 下载--cpuboolfalse强制在 CPU 上运行不尝试 GPU参数之间的协作逻辑对应 main.rs--cpu为真时直接用Device::Cpu否则按「CUDA → Metal → CPU」的顺序自动选择设备这一选择逻辑封装在 candle-examples/src/lib.rs 的device()辅助函数中未提供--model时根据--which推导出 Hub 上的模型仓库名timm/hiera_{size}_224.mae_in1k_ft_in1k例如tiny对应timm/hiera_tiny_224.mae_in1k_ft_in1k再调用api.get(model.safetensors)拉取权重若提供--model则直接使用本地文件权重通过VarBuilder::from_mmaped_safetensors以 F32 精度内存映射加载随后构建模型并执行前向推理。因此你可以通过--which large切换为参数量更大的规格通过--model /path/to/model.safetensors在离线或自备权重场景下运行。模型规格与配置Hiera 的 6 种规格由 candle-transformers/src/models/hiera.rs 中Config结构体字段channels、heads、stages的构造方法定义与 timm 预训练权重的参数一一对应规格通道数channels注意力头数heads各 stage 层数stages对应权重仓库名tiny961[1, 2, 7, 2]timm/hiera_tiny_224.mae_in1k_ft_in1ksmall961[1, 2, 11, 2]timm/hiera_small_224.mae_in1k_ft_in1kbase961[2, 3, 16, 3]timm/hiera_base_224.mae_in1k_ft_in1kbase_plus1122[2, 3, 16, 3]timm/hiera_base_plus_224.mae_in1k_ft_in1klarge1442[2, 6, 36, 4]timm/hiera_large_224.mae_in1k_ft_in1khuge2564[2, 6, 36, 4]timm/hiera_huge_224.mae_in1k_ft_in1k要点说明stages表示 4 个 stage 各自的 Transformer 块数量tiny共 12 层、base共 24 层、large/huge共 48 层模型总层数为stages.iter().sum()见 hiera.rs 的hiera_blocks每经过一个 stage块内会通过 stride 4 的 max-pooling 将 token 序列长度缩减为 1/4同时通道数翻倍、注意力头数翻倍见 hiera.rs名字中的224表示输入分辨率与 candle-examples/src/imagenet.rs 中load_image224的 224×224 预处理完全一致权重命名中的mae_in1k_ft_in1k表示「在 ImageNet-1k 上 MAE 预训练 → 在 ImageNet-1k 上微调」这正是 README 中「分类头在 ImageNet 上训练、输出 Top-5 类别概率」的来源。源码级解析Hiera 模型结构candle 的 Hiera 实现整体为「Patch Embedding → Unroll → 层级 Blocks → 分类头」的流水线见 hiera.rs 的hiera_model。以下逐一拆解其组件。Patch Embedding卷积下采样与位置编码对应hiera_embeddings函数hiera.rs使用conv2d(3, channels, 7, stride4, padding3)的 7×7 卷积将 224×224 的 RGB 图像下采样为(1, 56, 56, channels)的 patch 特征命名为patch_embed.proj与 timm 权重键对应加载形状为(1, 56*56, channels)的可学习位置编码pos_embed通过广播相加叠加到 patch 序列上常量NUM_TOKENS 56 * 56即下采样后保留的 token 数量。UnrollMAE 风格的重排对应hiera_unroll函数hiera.rsHiera 在训练时通过 MAE 在「展开unrolled」的 token 网格上做掩码重建推理时同样需要把(b, 56, 56, c)特征按 2×2 分块、permuteflatten的方式重复 3 次逐步从 56×56 递归合并为 7×7 网格最后重排回(b, NUM_TOKENS, c)供后续层级注意力消费。层级 Blocks下采样 注意力 MLP对应hiera_blocks/hiera_blockhiera.rs每个块遵循LayerNorm → (可选)通道投影 stride 4 空间 max-pooling → 注意力 → 残差 → LayerNorm → MLP → 残差的顺序下采样通过「通道投影 按 stride4 reshape 后在空间维度上取 max」实现即把每 4 个相邻 token 合并为 1 个token 数降为 1/4、通道数升为 2 倍MLP为fc1 → GELU → fc2结构hiera_mlphiera.rs中间层宽度为输出通道的 4 倍注意力hiera_attentionhiera.rs同时支持两种模式前两个 stages 2见 hiera.rs使用掩码窗口注意力token 序列被切分为num_windows n / (q_stride * window_size)个窗口仅计算窗口内部的自注意力控制计算量后两个 stage 退化为全局注意力num_windows 1当q_stride 1时Query 在局部q_stride范围内先做 max-pooling 再参与注意力这是 MAE 预训练引入的空间冗余结构window_size初始为 64、每个 stage 除以 4注意力内部先计算Q·Kᵀ经 softmax 后与 V 相乘缩放因子为head_dim^(-0.5)代码注释说明 6 维 matmul 不受支持因此先squeeze(0)再执行 matmul。分类头全局池化 线性层对应hiera_headhiera.rsBlocks 输出的 token 序列先在时间维上做mean全局平均池化hiera.rs再依次通过 LayerNorm 与全连接层fc输出维度为nclasses。示例传入 1000即 ImageNet 的类别数。此外实现还提供了hiera_no_final_layerhiera.rs导出特征向量无分类头的入口可用于迁移学习与特征提取场景。图像预处理与 timm 完全对齐输入图片的预处理由 candle-examples/src/imagenet.rs 完成确保与 timm 预训练模型的数据约定一致用imagecrate 解码图片缩放到 224×224resize_to_fill三角形滤波见load_image_with_std_mean转为 RGB8重排为(3, 224, 224)的 CHW 布局归一化除以 255 后按 ImageNet 统计值做标准化均值IMAGENET_MEAN [0.485, 0.456, 0.406]标准差IMAGENET_STD [0.229, 0.224, 0.225]这正是 candle-examples/examples/hiera/main.rs 中load_image224(args.image)的执行路径也是输出Tensor[dims 3, 224, 224; f32]的由来。随后图像张量被移动到目标设备加 batch 维度unsqueeze(0)后送入模型logits 经softmax转换为概率取 Top-5 并以candle_examples::imagenet::CLASSES1000 个 ImageNet 类别名见 candle-examples/src/imagenet.rs映射为可读文本输出。设备与加速CPU / CUDA / Metal示例默认不指定--cpu时会按 CUDA → Metal → CPU 的顺序自动选设备candle-examples/src/lib.rs 的device()。若在 macOS (aarch64) 上运行控制台会提示「build this example with--features metal」以启用 Metal GPU在其他平台则会提示用--features cuda启用 CUDA。candle-examples 的相关 feature 开关定义在其 Cargo.toml 中mkl链接 Intel MKL配合 candle-examples/examples/hiera/main.rs 顶部的intel_mkl_src在 CPU 上显著加速矩阵乘acceleratemacOS 上启用 Accelerate 框架cuda启用 CUDA 后端metal启用 Metal 后端。例如在装有 NVIDIA GPU 的机器上可这样运行cargo run --example hiera --release --features cuda -- --image candle-examples/examples/yolo-v8/assets/bike.jpg --which base需要说明的是示例本身不依赖上述任一 feature 也能在纯 CPU 上编译运行加速 feature 只影响后端选择与矩阵运算性能。常见问题与运行提示首次运行下载权重较慢model.safetensors通过网络下载期间 stderr 会显示百分比进度对应 candle-examples/src/hub.rs 中的进度渲染逻辑下载完成后缓存在本地后续运行无需重复下载。也可预先设置HF_HUB_CACHE等环境变量控制缓存位置。图片路径错误会怎样--image指向不存在的文件时load_image224会在解码阶段直接报错退出请使用绝对路径或相对仓库根目录的路径。精度要求默认以 F32 加载权重Hiera 属于中等规模视觉模型CPU 推理在--release下即可接受若追求更快的 GPU 推理可组合--features cuda并选择较小的--which规格。想用自定义图片只需替换--image为任意包含目标物体的图片例如自拍人像、宠物照片或产品图模型会输出对应的 Top-5 概率无需修改代码。小结candle 的 hiera 示例是一条「零配置」的视觉分类流水线cargo run --example hiera --release -- --image 图片 --which 规格即可完成从图片加载、归一化、权重自动下载、模型构建到 Top-5 概率输出的全部流程。其模型实现在 candle-transformers/src/models/hiera.rs 中忠实还原了 timm 预训练 Hiera 的层级结构——patch embedding、MAE 风格 unroll、前两阶段掩码窗口注意力与后两阶段全局注意力、以及带下采样的残差块——为 Rust 侧接入 ImageNet 级视觉 Transformer 提供了可直接复用的参考实现。若需要提取特征向量用于下游任务hiera_no_final_layer也提供了现成的无分类头入口。赞分享人工智能大模型机器学习深度学习本地部署模型推理服务【免费下载链接】candleMinimalist ML framework for Rust项目地址https://gitcode.com/GitHub_Trending/ca/candle点击查看免费下载相关推荐Hiera 分层视觉 Transformer 使用与实现解析从无冗余架构到 MAE 预训练、图像分类与 Backbone 应用 TransformersHiera 分层视觉 Transformer 使用与实现解析从无冗余架构到 MAE 预训练、图像分类与 Backbone 应用 Transformers人工智能大模型深度学习NLP预训练微调模型推理服务jetson-inference 实战用 imagenet / imagenet.py 在 Jetson 上运行实时摄像头图像分类jetson inference 实战用 imagenet / imagenet.py 在 Jetson 上运行实时摄像头图像分类 imagenet came人工智能计算机视觉深度学习微调3行代码实现图像分类pytorch-image-models视觉Transformer注意力机制解析3行代码实现图像分类pytorch image models视觉Transformer注意力机制解析 pytorch image modelstimm是由人工智能计算机视觉深度学习预训练上一篇Balena Etcher下载问题深度解决方案从异常识别到根源修复下一篇Balena Etcher Mac下载异常实战指南从诊断到根治的技术方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考