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:TIDL RTOS 工具与 edgeai-tidl-tools

Guru**** 2420880 points
Other Parts Discussed in Thread: EDGE-AI-STUDIO

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1544678/faq-edge-ai-studio-tidl-rtos-tool-vs-edgeai-tidl-tools

部件号:EDGE-AI-STUDIO


工具/软件:

由于历史原因、TI 中的模型导入有两组工具。 这两套已在很长一段时间内并行开发。 以下说明了这两种工具的相似性和差异。

相似性:

Edgeai-tidl-tools 会调用 python API 来运行 import、这与 RTOS 工具相同。 RTOS 工具和 edgeai 工具都调用模型解析(将 onnx 模型解析为 tidlrt 格式)、模型优化器、校准、存储器规划器。 尽管它们调用这些函数块的方式不同、但最后调用的 API 是相同的。 一般来说、这两种工具是相同的。

差异:

参数:

edgeai-tidl-tools 通过提供默认值来隐藏大量参数、使其易于使用。 这些参数可以在 edgeai-tidl-tools 的文档中找到。 RTOS 工具参数说明可在较旧版本的 SDK(如 8.0)中找到。 虽然一些参数的名称不同、但主要的有效参数映射到源代码中名为 gparams 的结构中。

以下是 edgeai 工具和 RTOS 工具方面的 gparams 转储:

edgeai:

randParams: 0
modelType: 6
quantizationStyle: 2
calibrationOption: 0
activationRangeMethod: 0
weightRangeMethod: 1
percentileActRangeShrink: 0.010000
percentileWtRangeShrink: 0.010000
biasCalibrationFactor: 0.050000
biasCalibrationIterations: -1
quantRoundAdd: 50
numParamBits: 16
numFeatureBits: 16
inFileFormat: 1
numFrames: -1
numFramesBiasCalibration: -1
postProcType: 0
postProcDataId: 0
foldMaxPoolInConv2D: 0
foldDepthToSpaceInConv2D: 0
foldPreBnConv2D: 1
foldBnInConv2D: 1
foldEltWiseInConv2D: 0
metaArchType: -1
debugTraceLevel: 0
writeTraceLevel: 0
compileConstraintsFlag: 1601
executeNetworkCompiler: 1
msmcSizeKB: -1
deviceName: 1
numCores: 1
quantRangeUpdateFactor: -1.000000
quantRangeExpansionFactor: 1.000000
addDataConvertToNet: 3
isQuantParamsToBeExported: 0

RTOS:

randParams: 0
modelType: 6
quantizationStyle: 2
calibrationOption: 0
activationRangeMethod: 0
weightRangeMethod: 1
percentileActRangeShrink: 0.010000
percentileWtRangeShrink: 0.010000
biasCalibrationFactor: 0.050000
biasCalibrationIterations: 1
quantRoundAdd: 50
numParamBits: 16
numFeatureBits: 16
inFileFormat: 1
numFrames: 1
numFramesBiasCalibration: -1
postProcType: 0
postProcDataId: 0
foldMaxPoolInConv2D: 0
foldDepthToSpaceInConv2D: 0
foldPreBnConv2D: 1
foldBnInConv2D: 1
foldEltWiseInConv2D: 0
metaArchType: -1
debugTraceLevel: 0
writeTraceLevel: 0
compileConstraintsFlag: 1601
executeNetworkCompiler: 1
msmcSizeKB: -1
deviceName: 1
numCores: 1
quantRangeUpdateFactor: -1.000000
quantRangeExpansionFactor: 1.000000
addDataConvertToNet: 0
isQuantParamsToBeExported: 0

主要差异如下:

biasCalibrationItetatation: 1.
numFrames:–1
numFramesBiasCalibration:–1
addDataConvertToNet:3.

“biasCalibrationItetatation",“,"numFrames"、"numFrames"和“和"numFramesBiasCalibration"“"numFramesBiasCalibration"由“由 RTOS“ RTOS 工具中的导入配置纹理文件直接定义。 而 edgeai 工具中的这三个是稍后通过映射 python 脚本中定义的配置来定义的。 “addDataConvertToNet"在“在 edgeai tidl 工具中默认设置为 3、但需要在 RTOS 工具和相关的所需输入/输出格式中手动配置。

输入/输出格式:

在 edgeai 工具中、输入/输出格式将保持与 onnx 模型相同。 因此、无论输入/输出格式是原始 ONNX 模型、tidlrt 中的格式都将保持不变。 但是、在 RTOS 工具中、您可以定义所需的输入/输出格式、以便更轻松地与上游输入图像和下游后处理连接。 输入/输出始终定义为浮点、输入映像始终是 uint8、因此您可以在 RTOS 配置文件中将输入格式连同比例缩放和平均值一起设置为 uint8、从而使 TIDL 在推理处理中自动转换数据。

要使转换后的 TIDLRT 二进制文件接受 edgeai-tidl-tools 中的 uint8、您可以使用内部的脚本在提供的缩放和均值的原始 ONNX 模型中将输入更改为 int8。 因此、ONNX 模型将发生更改、您可以在 ONNXRT 和 TIDL 中使用 rgb888 作为输入。

尽管默认情况下使用 RTOS 工具和 edgeai 工具时输入/输出格式是不同的、但您可以使用脚本和配置文件、使它们生成要在 TIDL 中使用的相同 TIDLRT 二进制文件。

示例:

以下示例展示了如何使用 edgeai-tidl-tools 和 RTOS 工具来生成几乎相同的工件。

ONNX 模型:

e2e.ti.com/.../2553.SimpleBev_5F00_OD.onnx

RTOS 工具的导入配置:

modelType = 2
numParamBits = 8
numFeatureBits = 8
inputNetFile      = "SimpleBev_OD.onnx"
outputNetFile      = "output/tidl_net.bin"
outputParamsFile   = "output/tidl_io_"
inDataNorm  = 0 0
inDataFormat = 1
foldPreBnConv2D = 1
foldBnInConv2D = 1
inWidth  = 24 2 
inHeight = 18 32768
inNumChannels = 64 1
numBatches = 1 1
numFrames = 1 1

inData = "inputs.bin"
inFileFormat = 1

inDataNamesList = "/bev_encoder/Reshape_15_output_0, /bev_encoder/Unsqueeze_5_output_0"
outDataNamesList = "/bev_encoder/con_layer.0/con_layer.0.0/layer/layer.0/Conv_output_0"

outputFeature16bitNamesList = "/bev_encoder/con_layer.0/con_layer.0.0/layer/layer.0/Conv_output_0"
params16bitNamesList = "/bev_encoder/con_layer.0/con_layer.0.0/layer/layer.0/Conv_output_0"

perfSimConfig = /home/ht/edgeai/edgeai-tidl-tools/tools/AM69A/tidl_tools/device_config.cfg
perfSimTool = /home/ht/edgeai/edgeai-tidl-tools/tools/AM69A/tidl_tools/ti_cnnperfsim.out

tidlStatsTool = "/home/ht/edgeai/edgeai-tidl-tools/tools/AM69A/tidl_tools/PC_dsp_test_dl_algo.out"
graphVizTool = "/home/ht/edgeai/edgeai-tidl-tools/tools/AM69A/tidl_tools/tidl_graphVisualiser.out"

addDataConvertToNet = 3
outElementType = 6
inElementType = 6 6
debugTraceLevel = 1
writeTraceLevel = 0
writeOutput = 0
postProcType = 0
c7xFirmwareVersion = 11_00_08_00
compileConstraintsFlag = 83886080

quantizationStyle = 2
calibrationOption = 0
activationRangeMethod = 0
weightRangeMethod = 1
biasCalibrationIterations = -1

edgeai 工具的导入配置:

    "gridsample16bit": create_model_config(
        task_type="classification",
        source=dict(
            model_url="dummy",
            infer_shape=True,
        ),
        preprocess=dict(
            resize=256,
            crop=224,
            data_layout="NCHW",
            resize_with_pad=False,
            reverse_channels=False,
        ),
        session=dict(
            session_name="onnxrt",
            model_path=os.path.join(models_base_path, "SimpleBev_OD.onnx"),
            input_mean=[123.675, 116.28, 103.53],
            input_scale=[0.017125, 0.017507, 0.017429],
            input_optimization=True,
        ),
        postprocess=dict(),
        extra_info=dict(num_images=3, num_classes=3),
    ),

使用 RTOS 工具生成的工件

e2e.ti.com/.../7343.artifacts.tar.gz

使用 edgeai 工具生成的工件:

e2e.ti.com/.../artifacts_5F00_edgeai.tar.gz

您可以检查 xxx_net.bin.svg 文件和 bufinfolog_0.txt 以查看差异。

“xxx_net.bin.svg"描述“描述了模型的结构如何与使用的图层以及它们的连接方式。

“ bufinfolog_0.txt “描述了如何规划内存以及如何为每一层规划工作加载、例如如何将内存从上行卷积层传输到下行数据垂直层。

无论如何、您可以使用这些不同的工具实现几乎相同的结果。 您可以根据自己的需求选择您喜欢的任何一个。 此常见问题解答是对这些工具的一般比较、这两种工具之间仍然存在细微差异、将在进一步的指南中介绍。

此致、

Adam