netrans/examples/multi_input/README.md

4.2 KiB
Raw Permalink Blame History

多输入模型转换示例

概述

本示例演示如何使用 Netrans 转换多输入 Caffe 模型。模型有两个输入分支,各自经过卷积和 ReLU 后,在通道维度 Concat 拼接输出。

Netrans 支持多输入模型的完整转换流程load → quantize → add_pre_post → export。

模型结构

target: [1, 3, 112, 112]           image: [1, 3, 112, 112]
      │                                      │
  Conv(3x3,8) + ReLU                    Conv(3x3,8) + ReLU
      │                                      │
      └────────── Concat(axis=1) ────────────┘
                      │
              pool_concat: [1, 16, 112, 112]

快速开始

1. 环境准备

请先在源码根目录执行 make install 安装 Netrans完整步骤见安装指南

2. 进入示例目录

cd examples/multi_input

3. 一键转换

bash run.sh       # CLI 一键转换
# 或
python3 run.py    # Python API 一键转换

分步详解

已预先提供以下文件:

  • multi_input.prototxt — Caffe 模型结构
  • multi_input.caffemodel — 模型权重
  • input0.jpg / input1.jpg — 两个输入端口的校准图像

Step 1: 加载模型

netrans load . --mean 0 0 0 --std 1.0

Netrans 从 multi_input.prototxt 自动识别两个输入端口 targetimage,并生成 multi_input_inputmeta.yml

channel_mean_value.txt 保存 mean 和 std 值。当前 --mean--std 只接受一组共享配置,并应用到所有输入端口;暂不支持为每个输入端口分别传入不同的 mean/std。

Step 2: 量化并嵌入前后处理节点

netrans quantize . asymu8
netrans add_pre_post . asymu8 --preprocess --postprocess

多输入量化需要为每个输入端口提供单独的校准数据文件,命名格式为 dataset0.txtdataset1.txt...,每个文件内填写对应输入端口的图片路径。

# dataset0.txt 格式(第一个输入端口 target
input0.jpg

# dataset1.txt 格式(第二个输入端口 image
input1.jpg

Step 3: 导出 NBG

netrans export . asymu8

Python API 示例

from netrans import Netrans

model = Netrans()
model.load('.', mean=[0, 0, 0], std=1.0)
model.quantize('asymu8')
model.add_pre_post('asymu8', preprocess=True, postprocess=True)
model.export('asymu8')

多输入关键要点

要点 说明
模型格式 Caffe (.prototxt + .caffemodel),也支持 ONNX/TF 等多输入模型
dataset<N>.txt 每个输入端口一个文件(dataset0.txtdataset1.txt...),文件内为图片路径
channel_mean_value.txt 一组共享的 mean/std 作用于所有输入端口;各输入独立 mean/std 暂不支持
inputs_outputs.txt 指定输出端口名 --outputs 'pool_concat'
前后处理节点嵌入 同时作用于所有输入/输出端口

输出文件

multi_input/
├── multi_input.prototxt                 # Caffe 模型结构
├── multi_input.caffemodel               # Caffe 模型权重
├── input0.jpg / input1.jpg              # 校准图像
├── channel_mean_value.txt               # 预处理参数
├── dataset0.txt / dataset1.txt          # 各输入端口的校准数据配置
├── inputs_outputs.txt                   # 输出端口配置
├── multi_input.json                     # 模型结构(生成)
├── multi_input.data                     # 模型权重(生成)
├── multi_input_asymu8.quantize          # 量化配置(生成)
├── multi_input_inputmeta.yml            # 输入元数据(生成)
├── multi_input_postprocess_file.yml     # 后处理配置(生成)
└── wksp/                                # 工作空间(生成)
    └── multi_input_asymu8_nbg_unify/
        └── network_binary.nb            # 最终 NBG 文件

相关文档


版本: 6.33.6+ 更新日期: 2026-06-18