基于AM67A的嵌入式语音识别功能实现(三):虚拟机端编译及验证

虚拟机端编译及验证

方案一:.prototxt 配置方式 早期 TIDL SDK 中旧式方法

1.增加asr_model.prototxt文件和将 asr_model.onnx文件放置到对应位置

# 目录图
edgeai-tidl-tools/
├── models/
│   └── onnx/
│       └── asr_model.onnx
└── examples/
    └── models/
        └── prototxt/
            └── asr_model.prototxt
# asr_model.prototxt
modelType              = 1                         # ONNX模型
numParamBits           = 8                         # 8-bit量化
quantizationStyle      = 2                         # 2 = 训练后量化 (Post-Training Quantization)

inputNetFile           = "../../models/onnx/asr_model.onnx"          # 你的ONNX模型路径
outputNetFile          = "asr_model.bin"
outputParamsFile       = "asr_model.params"

inDataNamesList        = spec
outDataNamesList       = logits

inputDimensions        = 1, 1, 161, 200            # 固定输入shape: [NCHW]
numChannels            = 1                         # C=1
numRows                = 161                       # H
numCols                = 200                       # W

preprocType            = 0                         # 不做图像预处理
metaDataFile           = meta_data.bin             # 可留空,或者你生成一个量化校准文件(用于量化校准)

2.进入 TIDL 主目录执行:

cd edgeai-tidl-tools
./tools/tidl_model_import.out ./examples/models/prototxt/asr_model.prototxt

注意:执行后可能会遇到 modelType 参数重复和device_config.cfg 找不到 的问题,默认寻找路径是…/…/test/testvecs/config/import/,实际存在路径为./device_config.cfg,更改路径或复制到默认路径

方案二:YAML 模板导入流程 官方 edgeai-tidl-tools 的标准方法,新版本 SDK 更鼓励使用 YAML + run_import_on_pc.py

1.找到已有示例模板 run_import_on_pc.py

cd ~/edgeai-tidl-tools/examples/osrt_python

2.准备model_list.yaml 文件

examples/osrt_python/model_list/ 文件夹下,每一个 YAML 对应一个模型的导入配置。

🔧复制一个现有的配置(例如 mobilenet_v2.yaml):

cp model_list/mobilenet_v2.yaml model_list/asr_model.yaml

并修改如下关键字段:

model_path: ../../models/onnx/asr_model.onnx
input_data_path: ../../test_data/input/your_input_file  # 可以随便写一个虚拟路径
preprocess:
  mean: [0.0]
  scale: [1.0]
  channel_order: "NCHW"
  data_layout: "NCHW"
  # 根据你模型输入调整
session:
  model_name: "asr_model"
  model_type: "onnx"
  runtime_options:
    tidl:
      artifacts_folder: "./output/asr_model"
      platform: "am67"
      version: "9.1"
      tensor_bits: 8

3.运行导入命令

examples/osrt_python 下运行:

python3 run_import_on_pc.py --model_list model_list/asr_model.yaml

注意:可能克隆的edgeai-tidl-tools仓库并没有run_import_on_pc.pymodel_list/ 文件夹等,需要获取完整版本的,可以在主目录下运行以下命令(重新克隆):

git clone https://github.com/TexasInstruments/edgeai-tidl-tools.git
cd edgeai-tidl-tools
git checkout main  # 如果提示 tag,可以切到 v9.x 的 tag

确保 examples/osrt_python/ 目录中含有:

run_import_on_pc.py
model_list/
session/

方案三:使用 TVM + Python 编译路径 对 ONNX 支持更友好,尤其适合语音这种序列模型

1.准备 ONNX 模型和校准样本(log-mel 特征)

a.安装TVM 依赖环境

cd ~/edgeai-tidl-tools  

git clone --recursive https://github.com/apache/tvm.git
# 拉取子模块
git submodule sync
git submodule update --init --recursive --force
# 安装 LLVM
sudo apt install llvm-11 llvm-11-dev clang-11
export LLVM_CONFIG=/usr/bin/llvm-config-11

cd tvm
mkdir build
cp cmake/config.cmake build

# 然后编辑 build/config.cmake:
nano build/config.cmake
修改以下行(取消注释):
set(USE_LLVM ON)
set(USE_RELAY ON)

b.编译 TVM

cd build
cmake ..
make -j$(nproc)

c.设置Python环境变量

export TVM_HOME=$PWD/..
export PYTHONPATH=$TVM_HOME/python:$PYTHONPATH

d.测试安装是否成功

python3 -c "import tvm; print(tvm.__version__)"

2.编写一个 TVM Python 脚本,调用 tvm.contrib.tidl.compile.compile_model(...)

# run_import_asr_tvm.py  (放在 examples/osrt_python 目录下)
import os
import numpy as np
import onnx
import tvm
from tvm import relay
from tvm.contrib.tidl.compile import compile_tidl_model

# 路径配置
model_path = "asr_model.onnx"
artifacts_folder = "./artifacts_asr"
os.makedirs(artifacts_folder, exist_ok=True)

# 模拟一条校准数据 [1, 161, time],你也可以用真实样本
input_data = np.random.rand(1, 161, 100).astype(np.float32)
input_name = "spec"

# 加载 ONNX
onnx_model = onnx.load(model_path)
mod, params = relay.frontend.from_onnx(onnx_model, shape={input_name: input_data.shape})

# TVM -> TIDL 编译
tidl_mod, status = compile_tidl_model(
    mod=mod,
    params=params,
    artifacts_folder=artifacts_folder,
    platform="am67",
    tensor_bits=8,
    input_data=[input_data],
    tidl_tools_path=os.environ["TIDL_TOOLS_PATH"],
    # 根据情况调整:
    enable_tidl_offload=True,
    enable_c7x_codegen=True,
)

print("[✓] 编译完成,输出位于:", artifacts_folder)
python3 examples/osrt_python/run_import_asr_tvm.py

3.配置参数,如 platform="AM62A"enable_tidl_offload=Trueenable_c7x_codegen=Truetensor_bits=8

4.脚本会生成 model-artifacts,包括 .bin + io + lib

5.拷贝部署至板子推理

完整的tvm+python流程如上所示,但再调用tvm的时候会显示内部有空指针崩溃错误,且无法调用relay模块,后来发现使用的不是使用 TI repo 自带的 TVM

正确的克隆命令应该为:

git clone --recursive https://github.com/TexasInstruments/tvm.git

目前还没试正确的tvm方法,因为搞得很晕,所以还是想验证环境配置有没有问题,所以去试着跑了图像识别的例程,步骤也顺便分享一下:

一、自训练模型

  1. 预训练模型及对应配置文件获取,链接

  2. 模型训练

    过程详见edgeai-yolov5,得到best.pt

  3. 格式转化

    使用export.py得到.onnx格式

二、虚拟机端编译及验证

  1. test_data文件夹中添加用于推理的输入图像
  2. 创建models文件夹,存放自训练得到的.onnx及对应的配置文件.prototxt
  3. 替换examples/osrt_python中的common_utils.pymodel_configs.py,在examples/osrt_python/ort中新增onnx_test.py,主要差异在于:
    a) 修改模型对应的类:原文件中是模型对应的coco数据集中80个类,修改为自训练模型中的
CLASSES = ("empty", "z", "f","other")

这里是因为训练的时候我用的是模板正反面的图片训练的,“z” "f"就代表的是正、反。

b) 修改相关文件路径:artifacts_folderoutput_images_foldertidl_tools_path

c) 增加目标框边标注相关信息:draw.text((int(xmin), int(ymin)), CLASSES[int(outputs[0][i][5])], (255, 0, 0) , ImageFont.load_default())

增加yolov5对应的配置,指定使用该模型models = ['yolov5s6_640_best']

models_configs = {
    'yolov5s6_640_best' : {
        'model_path' : os.path.join(models_base_path, 'best.onnx'),
        'mean': [0, 0, 0],
        'scale' : [0.003921568627,0.003921568627,0.003921568627],
        'num_images' : numImages,
        'num_classes': 4,
        'model_type': 'od',
        'od_type' : 'YoloV5',
        'framework' : '',
        'meta_layers_names_list' : os.path.join(models_base_path, 'best.prototxt'),
        'session_name' : 'onnxrt' ,
        'meta_arch_type' : 6
    },
}

d) 运行python3 onnx_test.py -c编译模型,在model-artifacts下生成编译后的模型文档

运行python3 onnx_test.py完成虚拟机端模拟推理,在output_images生成推理结果

三、edgeai-tidl-tools板端部署—python

  1. 复制tidl_python文件夹到/opt目录,各文件介绍如下:
  • model-artifacts:在虚拟机上编译后得到的模型文档,推理所必
  • models:原始的模型文件,包括.onnx及对应的配置文件.prototxt
  • output_images:模型推理结果
  • test_data:用于推理的输入图像 common_utils.py:test.py中会用到的一些工具函数
  • test.py:推理脚本
  1. 参考edgeai-tidl-tools中examples/osrt_python进行修改,主要差异如下:
  • 在虚拟机端修改的基础上,将model_configs.py合并到test.py中
  • 在原来的基础上精简无用的分支
  1. 运行python3 test.py即可完成推理过程

结果验证此例程可行,代表配置环境没问题,但要部署语音识别,还需增加一些处理函数,并没有相应参照文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值