ZHCACO4 may 2023 AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM67A , AM68A , AM69A
如上一节所述,如果使用 edgeai-modelmaker 进行训练,则可以自动处理编译。如果一个模型需要自行编译,或者用户希望更多地参与编译和校准,那么他们可以参考本节。Edgeai-tidl-tools 托管用于此目的的代码。模型编译必须在 x86 主机上完成。
edgeai-tidl-tools 存储库为模型编译提供了多个选项,例如 Jupyter 笔记本和 python3 脚本。该存储库中有用于编译自定义模型的说明。使用 Jupyter 笔记本的过程可以在 Edge AI Cloud 上完成,也可以使用自定义模型的工具完成。Jupyter [7] 笔记本是一种以模块化形式逐步显示和开发代码的理想工具,但 Jupyter 内核在执行长时间运行或内存密集型任务时可能不稳定。由于 Python3 脚本在运行时稳定性更高,因此被用于 mobilenetv2SSD 模型编译。
为了编译模型,一组图像将在模型的选择运行时(对于食品识别模型为 ONNX)传递,在此期间,TI 深度学习编译后端会分析中间值和格式。当此脚本运行时,“工件”以编译的二进制文件的形式生成,用于在 C7xMMA 上运行模型。这包括一个“io”文件(用于说明 CPU 如何向/从 C7xMMA 传递信息),以及一个对网络层本身进行编码的“net”文件。
在此过程中,一组图像用于校准 模型,以实现从原生 32 位浮点到定点整数(8 或 16 位)的量化。这些工具会在执行期间分析模型中的中间值范围,并选择与该范围非常匹配的量化方案。在实践中,使用能更好地描述输入场景广度的较大图像集可以提高量化质量,但需要更长的时间。
edgeai-tidl-tools/examples/osrt_python/ 下的 Python 脚本可以处理模型编译的所有步骤,但与更具互动性的 Jupyter 笔记本相比,对预处理、配置等 进展不太明确。要完成编译,需要对 onnxrt_ep.py 和 model_configs.py 文件进行一些更改:
调用环境中的 TIDL_TOOLS_PATH 环境变量应指向目标处理器的 tidl_tools。默认情况下,它指向设置 edgeai-tidl-tools 时下载的工具,在此期间,应该已经设置了供器件编译的 SOC 变量,例如 SOC=am62a。
完成后,编译的工件位于一个目录中,该目录的型号全名位于 edgeai-tidl-tools/model-artifacts 下。
在继续实际使用模型之前的最后一项(可选):使类标签在模型输出和文本名称之间保持一致。这仅在使用 edgeai-gst-apps 或 tidlpostprocess GST 插件时才是必要的,因为它们会尝试在图像上为已识别的对象编写文本。当 modelmaker 尝试编译模型时,它会创建一个 dataset.yaml 文件来描述数据集,其中包括将输出类整数映射到文本标签。这是从保存标签的 COCO JSON 文件中检索的。param.yaml 文件还需要提供从模型输出到 dataset.yaml 中索引的映射(键 [metric][label_offset_pred])。对于食品识别模型,它是一对一的,因为使用了所有接受过训练的类。dataset.yaml 由 TI 的训练框架自动生成,但 param.yaml 可能需要手动更新。