ZHCACO4 may   2023 AM62A3 , AM62A3-Q1 , AM62A7 , AM62A7-Q1 , AM68A , AM69A

 

  1.   1
  2.   摘要
  3.   商标
  4. 1引言
    1. 1.1 目标读者
    2. 1.2 主机信息
  5. 2创建数据集
    1. 2.1 收集图像
    2. 2.2 标记图像
    3. 2.3 增强数据集(可选)
  6. 3选择模型
  7. 4训练模型
    1. 4.1 输入优化(可选)
  8. 5编译模型
  9. 6使用模型
  10. 7构建最终应用
    1. 7.1 使用 TI 的 Gstreamer 插件优化应用
    2. 7.2 使用原始 MIPI-CSI2 摄像头
  11. 8总结
  12. 9参考文献

编译模型

如上一节所述,如果使用 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.pymodel_configs.py 文件进行一些更改:

  • 有一个要编译的模型列表。对于食品识别模型,这包括“od-8020_onnxrt_coco_edgeai-mmdet_ssd_mobilenetv2_lite_512x512_20201214_model_onnx”。
  • 该模型的配置保存在上面目录中 model_configs.py 的大 Python 字典内。键是上一个项目符号中的字符串。
    • “model_path”必须指向自定义数据集中经过训练的模型。
    • “meta_layers_names_list”必须指向描述模型架构的 PROTOTXT 文件路径。
    • 如果上述两个文件不存在,则会下载它们,前提是该文件是已受支持的模型架构,并可在提供的 URL 上下载。

调用环境中的 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 可能需要手动更新。