This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[FAQ] [参考译文] [常见问题解答] EDGE-AI-STUDIO:如何使用 TI 深度学习(TIDL) on Edge AI AM6xA 处理器、为我自己的数据集使用 TI Model Zoo 中的 AI 模型并对其进行重新训练?

Guru**** 1958595 points
Other Parts Discussed in Thread: AM69A, AM67A, AM68A
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1456107/faq-edge-ai-studio-how-do-i-use-and-retrain-ai-models-from-ti-s-model-zoo-for-my-own-dataset-using-ti-deep-learning-tidl-on-edge-ai-am6xa-processors

器件型号:EDGE-AI-STUDIO
主题中讨论的其他器件:AM68A、AM69A 、AM67A

工具与软件:

问:

"我发现 TI 的 Model Zoo 拥有神经网络、这些神经网络已使用 C7x AI 加速器在 AM6xA 处理器[AM62A、AM67A、AM68A、AM68PA、AM69A 或 TDA4x SoC]上经过验证并具有基准测试。"

"我需要使用我收集的数据集为自己的应用训练这些模型。 该怎么做?"

 

答:

以上是开发者想要将 TI 的预优化网络用于其定制应用时遇到的相当常见的问题。 建议使用其中一些模型、因为它们已针对运行时延迟和精度进行了分析和优化。 TI 提供的模型已就通用数据集(例如 COCO 或 Imagenet1k)进行了预训练、但可能需要重新培训才能应用于自定义用例。

对于某些网络、我们对原始网络架构进行了修改、对 AM6xA 和 TDA4x SoC 上使用的硬件加速器 C7xMMA 更加友好。 这些修改通常是为了提高我们的定点加速器的精度或运行时效率。 例如、将 SiLU 激活函数替换为 Relu 在定点上要快得多。 我们通过在基准或模型 zoo 存储库中的模型名称中包含"lite"或"TI lite"来表示这些修改后的架构。

在最近的操作员支持下、某些原始模型可能会按原样得到支持、而以前并不支持这些原始模型。 请参阅我们的受支持运算符/层列表(以及任何相关限制)以了解最新信息、并请注意、该文档是关于我们 SDK 的版本指定。

在后续回复中、我将对 Model Zoo 中与再培训和重复使用相关的模型进行描述和分类。

 

注释的链接和存储库:

  • edgeai-tensorlab
    • 拥有多种用于模型训练、优化、编译和基准测试的编程工具
  • edgeai-modelzoo
    • tensorlab 的一部分、托管 modelzoo 的链接和文件、包括一些预先生成的模型工件。 这之前是一个单独的存储库(2024年7月之前)、因此如果您在 GitHub 上找到 edgeai-modelzoo 的存档版本、那么它很可能已过时。
  • Edge AI Studio
    • 基于 GUI 的在线工具、用于训练模型、查看预先生成的基准测试和其他 AI 模型开发任务。
    • 请参阅模型选择工具以了解预生成的基准测试
  • edgeai-tidl-tools
    • 用于编译已导出为 ONNX 或 TFLITE 格式的已训练模型的独立工具

请注意、为了您的利益、我在文本中嵌入了大量链接。 这些链接中的大多数链接都可以访问 edgeai-tensorlab 或 edgeai-tidl-tools 存储库。

 

TL;DR (过长、未读取):TI 有一组 AI 模型已在我们的 SOC 上进行验证和基准测试。 这些器件可以重新训练、但并非所有架构都有 TI 提供的完整示例和编程工具供您自己进行再培训。 在本常见问题解答中、我将介绍负责设计此流程的可用资源和必要知识。 一些架构经过修改并标记为"TI Lite"、以表示架构与原始版本不同。 其他引脚由 TI 按原样制定。 TI-Lite 模型需要一些 TI 硬执行以便在训练过程中类似地进行的优化;未修改的架构对训练的 TI 支持有限(但 使用 TIDL 工具编译时支持 e2e)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    支持的型号类别1:完全支持的模型、可通过 Edge AI Studio 或 edgeai-modelmaker 在 TI 工具中重新训练。

    TI 支持一组有关自定义数据集的转让学习和再培训模型。 这些检查点通常从使用大型开源数据集从头开始进行训练的经过预先训练的模型检查点开始。 这些架构有 TI 的支持代码和示例来处理训练和模型编译。

    此处使用的基线工具是edgeai-modelmaker (edgeai-tensorlab 的一部分)、可以按原样以编程方式使用通过模型编写器(Edge AI Studio 的一部分)中的图形界面使用。 这使用 Pytorch 作为训练框架、并将模型导出为 ONNX 格式。 训练完成后、将针对目标 SoC 编译模型。 编译在edgeai-benchmark 中预先形成

    • 如果使用 edgeai-modelmaker、建议使用 Docker 或虚拟环境将开发 PC 上的任何全局依赖项与 modelmaker 将设置的版本分离。

     

    这些工具支持的架构集可能会发生变化、通常使用一组可扩展架构来提供多种折衷速度和精度的选项。 例如、YOLOX 架构具有多个可供选择的型号(毫微型、小型、小型等)。 支持的一组模型反映了 TI 深度学习解决方案的常见请求、先进技术以及速度与精度曲线。

     

    对于培训、实际的框架和培训代码来自 edgeai-tensorlab 存储库中的另一个子目录、例如基于 YOLOX 的键点检测架构将使用 edgeai-yolox。 modelmaker 使用多个训练工具。 Modelmaker 为每个培训工具提供一致的界面。

     

    开发人员可以更改与培训相关的各种参数、例如 epoch 数量、学习速度、体重减轻等 在模型编写器中、有这些框和描述符。 Edgeai-modelmaker 通过应用于训练和编译的 YAML 配置文件显示此类参数–此文件是与 modelmaker 的主要接口。 在编译期间、YAML 配置中的任何设置都将用于覆盖 edgeai-benchmark/configs 中的默认设置集

    例如、edgeai-modelmaker/config_classification.yaml 将默认为 mobilenet_v2_lite 以用于训练和编译。

    • 在 edgeai-modelmaker 源 代码中可以更深入地为此模型设置训练配置
      • 请‘、每个模型都有一个带有"model_compilation_id"的小"编译"段、这是将任务类型缩写(例如 CL=classification)与数字标识符配对的速记法。 CL-6090对应于 mobilenet_v2_lite。 用于查找默认编译设置。
    • 编译配置在 关联的 model_selection 的 edgeai-benchmarks 源代码 (也称为模型编译 ID、上述模型名称的缩写)中使用默认值进行设置。
      • 请注意、编译/基准测试配置比训练配置多得多–这是因为所有模型 zoo 都在此工具中编译和基准测试、而并非我们使用的所有模型都是使用 modelmaker 进行训练的。
      • 某些型号具有我们发现的可提高精度的特定选项。 例如、 Yolo-x 架构指定多个层以16 位模式(与默认的8位模式相比)运行以提高精度
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    支持的型号类别2:用于再培训的 TI-Lite 模型–modelzoo 上提供已上传的权重、参数、模型源

    对于已被 TI 修改为"lite"或"TI lite"的模型、执行了对网络架构的一些更改以优化速度和精度。 在本例中、我们获取了模型的上游版本、调整了加速器的架构、然后将其重新上传到我们的 Model Zoo 中。

    我们对这些模型类型再培训的支持有限、开发人员应利用开源代码和支持工具来针对其用例训练这些经过修改的架构。 以上信息介绍了重现这些 TI Lite 模型的一般流程和资源。

    • 如果某个模型未由 TI 修改、请查看第三个选项、了解支持的模型类型 更多详细信息 . 使用模型的上游版本。
    • 请‘、某些模型本质上在名称中使用了"slite"(例如 efficentdet-lite3或 SSDLite)、并且 TI 未对其进行修改。 如果不确定、请尝试检查模型集线器、如钩环面、Tensorflow、paperswithcode 等、以查看该特定模型的其他资源中是否普遍使用相同名称。

     

    开发人员可通过2种方法来重现此类 TI-Lite 模型:

    • 查找此 TI-lite 模型和所述架构的配置代码的可训练权重。 然后使用它们来训练您自己的 TI-Lite 模型
    • 从上游位置提取经过预先训练的原始重量、原始模型架构。 执行模型优化以匹配 TI-lite 模型(或支持的运算符集)和训练。

    你也可以跳过预先训练的重量,从零开始,但这将是更具挑战性的训练。 从头开始进行训练需要更大的数据集和许多 epoch。

     

    对于大多数 TI-lite 模型、我们提供了 Pytorch PTH 文件格式的可训练权重、以及导出的 ONNX 文件。 对于 tensorflow 模型、不支持重新训练这些架构、因此必须坚持使用此架构的开发人员将需要分析上游版本和 TI 版本、描绘差异并相应地修改 Tensorflow 中。

     

    在 modelzoo 中、模型按任务类型、数据集和训练工具进行分组。 如果培训工具包括"edgeai"、则该模型可能是在 edgeai-tensorlab 中进行训练(工具名称可能缩写、例如 tv=torchvision)。  顶层目录结构包含流行的上游训练工具(如毫米波检测、毫米波和 yolox)叉、它们也依赖于 edgeai-torchvision。

     

    modelzoo 的这些 edgeai-子目录中的模型通常包含:

    • a。 PTH 包含受过训练的 Pytorch 格式重量–这是进一步训练所必需的!
    • a。 从 Pytorch 训练导出的 ONNX 文件
    • a。 YAML 文件、描述了 TI 使用 TIDL 进行预处理、编译和后处理时使用的配置
    • 对于某些情况、A。 包含训练期间捕获的日志和信息消息的日志文件。

    请注意、其中一些文件具有。 链路扩展。 这些文件为单行文本、且带有指向主文件的链接。 这减小了 git 存储库的尺寸。 大多数链接还将包括 SDK 版本、表明此模型已在该版本中进行测试和验证。

     

    为了重新训练模型、您需要构建模型架构的代码和包含起始权重的 PTH 文件。

    • 模型架构的代码应位于训练模型架构的存储库中。
      • 应在 modelzoo 目录名中引用该训练工具、该目录名包含。 PTH 文件。 工具名称可能会缩写
      • ‘培训工具存储库的自述文件、了解任何有关"摘要"的提及或参考。 该团队的做法通常是在上游版本的原始自述文件之前添加/链接到 ti-lite 模型的 TI 特定指令
        • G.edgeaailite in edgeai-torchvision
        • 对于某些培训重排、文档将准确描述对使用该工具可进行的模型应用了哪些修改
      • 请遵循标准的 Pytorce 操作规范、将 PTH 检查点作为初始重量。 权重的名称必须与构造的模型一致。

    模型完成训练后、必须将其导出为 ONNX 格式。 如果模型是使用检测头进行物体或关键点检测、还需要根据TIDL 元架构导出描述该头的 PROTOTXT 文件

    还建议寻求训练期间执行的任何预处理信息–在推理之前、应在输入上进行类似的预处理。 除非有意对其进行更改、否则它可能与 modelzoo 使用的相同(请参阅模型的配置。 YAML)

    准备好导出的模型文件后、请参阅 edgeai-tidl-tools、以了解如何使用 TIDL 进行独立编译/导入。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    支持的模型类别3:不进行 TI 修改的开源架构

     

    本常见问题解答中介绍的 modelzoo 中的最后一类模型是完全源自 TI 外部的开源模型。

    对于这些型号、我们的技术支持非常有限、因为它与培训有关。 我们已从外部源下载模型、例如 Pytorch 的模型集线器、onnx 的模型集线器、tensorflow 的模型园艺、齿槽面等、使用 TIDL 工具编译了模型、并对我们的加速器的性能进行了基准测试。

    对于这些模型、我们支持使用 TIDL 工具进行编译。 为此、modelzoo 包括导出的模型文件和一个描述预处理和编译参数的 YAML 配置文件。 有关使用 TIDL 进行独立编译/导入的信息、请参阅 edgeai-tidl-tools。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    附加主题:TIDL 和 C7x 的模型优化

    C7x 是利用矩阵乘法硬件和 DSP 的定点加速器。 某些层和配置在此架构上效率更高、并且大多数模型受益于此类架构的一些优化。

    首先、所有层都应采用支持的配置、如我们的支持运算符文档 https://github.com/TexasInstruments/edgeai-tidl-tools/blob/master/docs/supported_ops_rts_versions.md 中所述

     

    TI 有一些用于自动优化的工具、这些工具作为 tensorlab edgeai-modeloptimization 部分的一部分进行托管。 大多数优化要么将不受支持的层配置替换为受支持的层配置、要么将受支持的操作替换为效率更高的操作。 这些优化也可以根据需要应用的时间进行分类–训练之前或之后。 对模型架构本身的任何更改都被称为"模型外科手术"。

    任何将影响从某个层发出的数值的模型更改都应在训练完成之前执行。 训练前的优化将包括、例如:

    • 更改激活功能
    • 更改卷积或池内核大小、跨度或扩张的大小
    • 通过改变插值技术进行缩放
    • 量化感知训练的示例
    • 修剪/加强稀疏性

    或者、当变化实际上并未影响值本身时、训练后优化是合适的、例如:

    • 将大型最大池转换为多个级联池
    • 将动态轴替换为静态张紧器形状
    • 修改图层的次要属性/参数
    • 修复训练后模型导出的尴尬结果
    • 添加层以处理输入数据预处理(减去均值、按比例取多、转换 YUV->RGB 格式)

    训练前优化

    作为 tensorlab 的一部分、torchmodelopt 是一个 python 库、用于在使用手电筒进行训练时应用模型优化。 该工具套件包括用于量化感知训练、稀疏度/修剪和模型手术的工具。

    请参阅 torchmodelopt 页面上的自述文件和文档、了解使用指南。 一种常见的方法是通常训练模型、应用优化、然后继续以较低的学习率和次数(50-100)进行训练。 应用优化后继续训练非常重要。

     

    训练后/导出优化(ONNX)

    训练后优化工具是edgeai-tidl-tools 的一部分主要面向 ONNX 模型、因为这些模型最容易解析和修改。

    tidl-onnx-model-optimizer 用于在上应用优化。 ONNX 模型、并且有一组不断增加的规则可应用于模型。 请参阅自述文件了解使用说明、此工具开放供您参考。

     

    预处理的额外优化–yuV 和 input_optimization

    大多数模型需要对输入数据进行预处理、因此值通常位于间隔[0、1]或[-1、1]上。 该模型然后接受单精度浮点数作为网络的输入。 但是、在 CPU 内核上运行该预处理并将所有输入数据以每个值4字节的形式传输到加速器会导致公共 SoC 资源(CPU、DDR、缓存)浪费。

    在加速器之外尽可能少地对输入进行预处理会更加高效。 这名义上意味着将模型更改为接受8位 RGB 或 YUV 编码、并使用>= 256bit-SIMD DSP 在加速器本身上运行这些元件操作。

    YUV 编码非常有用、因为许多摄像头和 ISP (包括 AM6xA 和 TDA4x SoC 中视觉预处理加速器(VPAC)内的 VISS)都倾向于使用基于 YUV 的编码。 将其包含在模型中、则无需再进行额外的图像格式转换。  

     

    edgeai-tidl-tools/scripts 中、有 ONNX 和 TFLITE 特定的工具来实现此功能、因此在 Conv 层之前像这样添加层(显示了 YOLOX-nano 的 ONNX 模型):

x 出现错误。请重试或与管理员联系。