图像理解快速上手:gemma-4-12B-it_rai_1.9.0_npu视觉编码器与Gemma4ImageTransform预处理详解

  • 人工智能
  • 大模型
  • 多模态
  • 模型量化
  • 本地部署

【免费下载链接】gemma-4-12B-it_rai_1.9.0_npu

项目地址: https://ai.gitcode.com/hf_mirrors/amd/gemma-4-12B-it_rai_1.9.0_npu
点击查看 免费下载

想做 Gemma4 12B 图像理解?这篇文章带你从零跑通。gemma-4-12B-it_rai_1.9.0_npu 是由 Google Gemma 4 12B IT 导出、面向 AMD Ryzen AI NPU 深度优化的多模态大模型:ONNX 格式 + AWQ/UINT4 量化,模型被拆分为 decoder、vision_encoder、audio_encoder、embedding 四个组件。本文详解视觉编码器如何工作、Gemma4ImageTransform 的每个预处理参数,并手把手教你完成第一次"图片问答"。

🗂️ 一分钟认识这个模型:4 个 ONNX 组件

项目采用"组合模型"(compositemodel)结构,完整定义见 model_config.json。模型被拆成 4 个独立 ONNX 模块,各司其职:

组件文件职责
vision_encodervision_encoder/model.onnx把图片编码成视觉特征向量
embeddingembedding/model.onnx把文本与视觉特征融合成统一输入
decoderdecoder/model.onnx语言模型本体,逐词生成回答
audio_encoderaudio_encoder/model.onnx音频编码(本文不展开)

💡 每个 model.onnx 旁边的 model.onnx.data 是 ONNX 外部权重文件,两者必须放在同一目录。decoder 目录还多一个 decoder/model.pb.bin,供 RyzenAI NPU 混合推理后端加载(见 genai_config.json)。

该模型通过 Quark 量化(AWQ / Group 128 / UINT4 权重)和 OGA Model Builder 导出,专为 AMD Ryzen AI 硬件部署优化,背景信息可参考 README.md。

🖼️ 图像理解流水线:一张图片如何变成答案

把一张图片交给模型后,它会依次经历 4 个阶段:

  1. 解码:DecodeImage 操作把图片文件解码为 RGB 彩色图像;
  2. 预处理:Gemma4ImageTransform 将图片切分为规整的 patch 网格,产出 pixel_values(像素值)与 pixel_position_ids(像素位置)——正好是 genai_config.json 中声明的两个网络输入;
  3. 编码:vision_encoder 网络输出 image_features(视觉特征),并通过 2×2 空间合并(spatial_merge_size: 2)把特征压缩为固定 280 个"软 token";
  4. 融合与生成:embedding 模块把文本 embedding 中图片占位位置替换为 image_features(输入输出定义见 genai_config.json),decoder 随即照常生成回答。

这就是 gemma4_unified 架构的精髓——"encoder-free"统一设计:视觉特征直接注入 embedding 层,流水线在 NPU 上更加高效。

📝 Gemma4ImageTransform 预处理参数详解

预处理流水线定义在 image_processor.json,Gemma4ImageTransform 有 3 个关键参数:

参数取值作用
patch_size48图片按 48×48 像素切块,等于网络侧"16 像素原生 patch × 3×3 池化"
max_soft_tokens280图片 token 数上限,保证任意尺寸图片都压缩到相同长度,兼顾精度与速度
pooling_kernel_size1预处理阶段池化操作的核大小

网络侧的对应参数在 model_config.json 的 vision_config 中,可以一一对照:

  • patch_size: 16 + pooling_kernel_size: 3 → 16×3=48,与预处理阶段的 patch_size 精确对齐;
  • num_soft_tokens: 280 → 与预处理的 max_soft_tokens 一致;
  • mm_embed_dim: 3840 → 与文本塔隐藏层维度 3840 相同,视觉特征因此能无缝"拼进"文本流。

图片的起止标记定义在 tokenizer_config.json 中:<|image>(id 255999)表示图片开始,<|image|>(id 258880)是图片占位 token,<image|>(id 258882)表示图片结束。280 个软 token 就填充在这段占位区间里。

⚡ 三步上手:跑通第一次图像理解

第 1 步:安装依赖

模型要求 Python 3.10 与 onnxruntime-genai >= 0.15.0,直接用项目自带的 requirements.txt 一键安装:

pip install -r requirements.txt

第 2 步:运行图片理解命令

项目内置了端到端测试脚本 test_model.py,直接用 image 模式运行图像理解:

python test_model.py . image dog.jpg "请用一句话描述这张图片。"

参数依次为:模型目录(. 表示当前目录)、模式 image、图片路径、想问的问题。不提供问题时,默认执行"用一句话描述这张图片"。完整参数说明见 test_model.py 顶部文档。

第 3 步:读取流式输出

脚本内部通过 create_multimodal_processor 自动完成"解码 → 预处理 → 编码 → 生成"全流程(见 test_model.py),运行时会流式打印模型回答,结束时显示生成的 token 数与耗时,方便评估 NPU 上的推理速度。

🧠 提示词格式小细节:图片占位符怎么写

在这个模型的对话模板 chat_template.jinja 中,提到图片必须在用户轮次写入 <|image|> 占位符,再在同一位置挂载图片数据:

<|turn>user
<|image|>请用一句话描述这张图片。
<turn|>
<|turn>model

test_model.py 会替你自动拼装这个格式(见 test_model.py);如果你要自己写脚本,照这个模式即可。

💡 新手避坑清单

  • 权重与图要成对:model.onnx 是图结构、model.onnx.data 是权重数据,复制部署时必须把同目录的两个文件一起搬走;
  • NPU 建议 1.6.0 以上:视觉编码器本身默认跑在 CPU(未配置 NPU provider,见 genai_config.json),decoder 通过 hybrid_opt_token_backend: npu 跑 NPU 混合后端;各 Ryzen AI 版本的最大提示长度限制记录在 rai_config.json(如 1.7.x 系列为 4096);
  • decoder 使用了"剪枝 LM head":它只为最后一个 token 输出 logits,这是部署层面的优化,ORT GenAI 会透明处理,你无需关心。

📚 相关文件资料

文件说明
image_processor.json图像预处理流水线定义(DecodeImage + Gemma4ImageTransform)
vision_encoder/视觉编码器 ONNX 模型与外部权重
genai_config.jsonORT GenAI 主配置:各组件输入/输出映射、NPU 推理选项
model_config.json组合模型结构及 vision_config / text_config / audio_config
tokenizer_config.json图片、音频占位 token 与处理器配置
chat_template.jinjaGemma 4 官方对话模板
test_model.py支持 text / image / audio 三模式的端到端测试脚本
requirements.txt运行环境依赖(onnxruntime-genai、numpy)
  • 人工智能
  • 大模型
  • 多模态
  • 模型量化
  • 本地部署

【免费下载链接】gemma-4-12B-it_rai_1.9.0_npu

项目地址: https://ai.gitcode.com/hf_mirrors/amd/gemma-4-12B-it_rai_1.9.0_npu
点击查看 免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值