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.

TDA4VM: Jacinto 7 TIDL 08.00.00 tidlModelImport 工具: TIDL_InnerProductLayer 图层需要是 Faltten

Part Number: TDA4VM

本帖内容是由机器翻译所得,供您参考。

部件号:TDA4VM

根据此处的发布信息

https://software-dl.ti.com/jacinto7/esd/processor-sdk-rtos-jacinto7/08_00_00_12/exports/docs/tidl_j7_08_00_00_10/TIDeepLearningProduct_ReleaseNotes.html

“滴定模型导入工具: TIDL_InnerProductLayer 图层需要是 Faltten ”错误应由  TIDL - 1534 解决并修复。

However, when I download the latest 
ti-processor-sdk-rtos-j721e-evm-08_00_00_12
and try converting my .tflite model with Reshape layer followed by Fully Connected layer I still get the same error.
Fullscreen


Above is the code I use for conversion. Additionally I attach .tflite model for easier debugging.
drive.google.com/.../view

```
(tidl) ubuntu@ubuntu-computer:~/ti-processor-sdk-rtos-j721e-evm-08_00_00_12/tidl_j7_08_00_00_10/ti_dl/test/tflrt$ python create_artifact.py --model_path model-8-23.tflite --dataset_path ~/donkeycar/model_t/data/images/

 Running model model-8-23.tflite
 0.0s: VX_ZONE_INIT:Enabled
 0.16s: VX_ZONE_ERROR:Enabled
 0.18s: VX_ZONE_WARNING:Enabled

 Number of subgraphs:1 , 10 nodes delegated out of 10 nodes 
 
In put of TIDL_InnerProductLayer layer needs to be Faltten. Please add Flatten layer to import this mdoels 
```

本帖内容是由机器翻译所得,供您参考。

  • 有什么帮助?

    本帖内容是由机器翻译所得,供您参考。

  • 杰森:

    很抱歉耽误你的时间,我正在处理此问题, 很快会更新。

    谢谢,

    普拉文

    本帖内容是由机器翻译所得,供您参考。

  • 杰森:

    我们可以复制并修复此问题:  

    此修复程序需要在以下 2 个文件中进行更改,请使用此文件并重建导入工具,然后检查?

    1. tidl_import_common.cpp :在该文件中,用下面更新的代码替换“ tidl_convertReshapeToFlatten ”函数。

    Int32_t tidl_convertReshapeToFlatten(sTDL_OrgNetwork_t &pOrgTIDLNetStructure , Int32_t 数字图层 )

    (int i1 = 0 ; i1 < numLayers ; i1++)

    如果 (pOrgTIDLNetStructure。 TIDLPCLayers[i1]。 图层类型 = TIDL_ReshapeLayer)

    pOrgTIDLNetStructure。 TIDLPCLayers[i1]。 图层类型 = TDL_FlattenLayer ;
    TidL_tfOutReshapeFlattenLayer (&pOrgTIDLNetStructure , i1) ;
    Int32_t outIdx = tidl_getOutLayer(pOrgTIDLNetStructure , numLayers , pOrgTIDLNetStructure , TIDLPCLayers[i1]。 outData[0]。 dataId) ;
    IF (outIdx ! = -1)

    pOrgTIDLNetStructure。 TIDLPCLayers[outIdx]。 inData[0] = pOrgTIDLNetStructure。 TIDLPCLayers[i1]。 outData[0] ;
    }
    }
    }

    返回 0 ;
    }

    2. tidl_import_core.cpp :在该文件中,用下面更新的代码替换“ tidl_optimizeNet ”函数。

    void tidl_optimizeNet(sTidL_OrgNetwork_t &pOrgTIDLNetStructure , Int32_t &layerIndex , Int32_t &dataIndex )

    如果 (gParams.debugTraceLevel > 0)

    printf("running tidl_optimizeNet \n");
    }
    pOrgTIDLNetStructure . numLayers = 图层索引;
    IF (gParams.modelType == TDL_IMPORT_Model_format_TFLIT_RT && gParams.metaArchType == -1)

    tidl_AddTFODDS 输出图层 (orgTIDLNetStructure ,图层索引, &dataIndex) ;
    }

    // 检查模型中是否存在所有必需的输入
    TIdl_addInDataLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    // 使用导入配置文件更新输入数据形状
    TIdl_filedInDataLayerShape(orgTIDLNetStructure , &gParams , orgTIDLNetStructure , numLayers) ;

    // 将具有多数据的单个 outDataLayer 拆分为多个 outDataLayers
    TIdl_splitOutDataLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure ,
    orgTIDLNetStructure . numLayers) ;

    IF (TRUE == tidl_isYuvLayerPresent())

    tidl_addLayersForUVConversion(orgTIDLNetStructure , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    /* 如果用户请求相同的 */ ,则添加标准化层
    IF ((gParams.inDataNorm[0]) && (false = tidl_isYuvLayerPresent()))

    TIdl_addNormalLayerToInData (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    // 解析随机图层 (仅限 ONNX)
    tidl_FindOnnxShuffleLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    // 删除添加图层,在 Caffe 中不可应用 (仅限 ONNX)
    tidl_mergePadLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    // 删除分割图层
    tidl_mergeSplitLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    // 用 NN 调整大小替换 Pack-Pack-Reshape
    TIdl_mergePackToNNResizeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers);
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    IF(!tidlInputTensorDimCheck(orgTIDLNetStructure ))

    退出 (0) ;
    }

    如果 (gParams.debugTraceLevel > 0)

    tidl_printOpsMgr 列表 (orgTIDLNetStructure) ;
    }


    // 调用整形函数,用于确定每个图层的输入 / 输出形状。
    tidl_updateOutDataShape(orgTIDLNetStructure , 0 , orgTIDLNetStructure。 numLayers , (sTidL_tfOutReshapeMap_t *)&sTIL_OutReshapeTable ;

    // 复制层图层。 3 个输出的 3 层。
    tidl_duplicateSliceLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    // 当调整比例大于 4x 时,将图层重新调整为多个图层。
    tidl_splitResizeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers , dataIndex) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_convertSqueezeToFlattenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeIdentityLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeReluLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeBiasLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_convertBiasToBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_mergeBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeReluLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    IF (gParams.folddMaxPoolInConv2D ==1)

    TIdl_mergePoolingLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }
    否则, IF (gParams.folddDepthToSpaceInConv2D ==1)

    TIdl_mergeDeptthToSpaceLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers);
    }

    tidl_removeDivideByOneLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_mergeBatchToSpaceInDWConvLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_merge1x1MaxPoolingLayer (orgTIDLNetStructure , orgTIDLNetStructure . numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_merge1x1 ResizeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers);
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeFlattenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    Tidl_mergeMinimumLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeClipLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_convertRelUToBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    TIdl_FindFlattenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_convertConv2DToIpLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , (sTDL_tfOutReshapeMap_t *) &sTIL_OutReshapeTable) ;
    tidl_mergeFaltenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeReshapeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers , (sTidL_tfOutReshapeMap_t *)&sTidL_OutReshapeTable ;
    tidl_removeMergedLayersFromNet(&G) ;

    如果 (gParams.numBatches [0] > 1)

    /* 检查网络中的所有层是否都支持批量处理,如果不退出导入工具 */
    对于 (Int32_t I = 0 ; i < orgTIDLNetStructure . numLayers ; I++)

    如果 (TidL_ns) 不支持 LayerSupportBatchProcessing(&orgTIDLNetStructure.TIDLPCLayers[I]) == -1)

    printf(" 错误:此 %s 不支持批处理,因此退出导入 \n", TidL_LayerString[orgTIDLNetStructure。 TIDLPCLayers[I].layerType]) ;
    退出 (-1) ;
    }
    }

    如果 (gParams.enableHighResOptimization == 0) // 检查 ST 已禁用

    Int32_t 图层地址被设置 =0 ;
    Int32_t 分层标识 = 0 ;
    Int32_t batchPadTotal =1 ;
    行动

    LayerAdded = tidl_addBatchReshapeLayerForBatchProcessing (orgTIDLNetStructure , &dataIndex , orgTIDLNetStructure . numLayers , &layerIdx , &batchPadTotal) ;
    IF (分层式 ==-1)

    printf(" 错误:批处理不支持这些图层集 \n" ;
    退出 (-1) ;
    }
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    } 当时 (分层地址) ;
    tidl_resetBatchPadValues (&orgTIDLNetStructure) ;
    tidl_initAndUpdateBatchPadRequirements(&orgTIDLNetStructure ) ;
    tidl_updateOutDataShape(orgTIDLNetStructure , 0 , orgTIDLNetStructure。 numLayers , (sTidL_tfOutReshapeMap_t *)&sTIL_OutReshapeTable ;
    }
    否则

    printf(" 错误:超级拼贴大小写不支持批处理 \n") ;
    退出 (-1) ;
    }
    }

    /*
    * 分析 SSD 结构
    * 步骤:
    * 1. 将 Softmax 图层合并为 DetectionOut 图层
    * 2. 将整形图层合并为分离图层
    * 3. 手柄宽度方向锥形
    * 4. 删除永久图层
    * 5. 删除所有 Priorbox 图层,并将参数发送到 DetectionOut 图层。
    * 搜索带有主框输入和检出输出的所有凹面图层。
    * 按顺序解析每个主框。
    *
    tidl_mergeDetectionoutLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_addPadLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    IF(gParams.foldedPreBnConv2D)

    tidl_mergePreBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;
    }

    IF (TRUE == tidl_isYuvLayerPresent())

    TIdl_mergeYUVtoRGB 转换 (orgTIDLNetStructure , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    如果 ((gParams.metaArchType == TDL_metaArchTIDLSSD) ||
    (gParams.metaArchType == TDL_metaArchTFSSD) ||
    (gParams.metaArchType == TDL_metaArchTFFasterRcnn) ||
    (gParams.metaArchType == TDL_metaArchTILYolo) ||
    (GParams.metaArchType == TDL_metaArchTIDLRetinaNet) ||
    (gParams.metaArchType == TDL_metaArchTILYoloV5)
    ) //todo :我们可以不写以上所有条件,而只写 (GParams.metaArchType=-1)

    tidl_addMetaArchLayersTONet(orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    /* 删除探测层中的类并平图层 */
    如果 (gParams.modelType == tidL_import_model_format_TFLITE_RT && gParams.metaArchType == -1) // 元拱类型特别设置为 -1 (如果网络具有探测后的 proc 层)

    // 如果 TIDL 添加了探测 POST 处理器层,则我们不想调用此函数,仅当实际网络具有探测 POST 处理器层时才调用
    tidl_removeConcatReshapeLogisticLayerInDetNet(orgTIDLNetStructure , orgTIDLNetStructure。 numLayers);
    }
    否则

    tidl_removeConcatFlattenLayerInDetNet(orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    如果 (gParams.modelType == tidL_import_model_format_TFLITE_RT && gParams.metaArchType!= -1)

    tidl_AddTfODDS 分层效果详细信息 (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex) ;
    }
    IF (gParams.modelType == TDL_IMPORT_Model_format_ONNX_RT)

    tidl_AddOnnxOutputLayers (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex) ;
    }
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    IF (gParams.addDataConvertToNet)

    IF (false == tidl_isYuvLayerPresent())

    TIdl_addDataConvertLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }
    否则

    printf(" 警告 :: addDataConvertToNet 被忽略,因为 YUV 输入不支持此功能 \n");
    }
    }

    LayerIndex = orgTIDLNetStructure . numLayers ;

    tidl_convertReshapeToFlatten(orgTIDLNetStructure , orgTIDLNetStructure。 numLayers);
    tidl_convertIpLayerInputShape (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_convertSoftMaxLayerInputShape (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    TIL_convertDeconv2DtoConv (orgTIDLNetStructure ,图层索引) ;
    TIdl_makeDataIdLayerIdSame(&orgTIDLNetStructure , layerIndex) ;

    tidl_updateHighResOptimization (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    如果 (gParams.debugTraceLevel > 0)

    printf("completed tidl_optimizeNet\n");
    }
    }

    谢谢,

    普拉文

    本帖内容是由机器翻译所得,供您参考。

  • 你好,普拉文!

    感谢您关注问题。 在对进行更改后

    tidl_import_common.cpp

    tidl_import_core.cpp

    并设置环境变量,我尝试构建 TI DL Importer 工具。 但是,在编译过程中遇到错误。

    命令:

    (@) Ubuntu~ Ubuntu-computer : Δ T / ti 处理器 -SDK-RTos-j721e-EVM-EVM-EVM-08_00_12/ tidl_J7_08_00_00_10$ make target_platform=PC

    输出:

    ========= 制作导入 libs =================
    使 -C ./ti_dl/utils/tidlModelImport -f makefile_shared
    品牌 [1] :输入目录 '/home/Ubuntu/i-processor-SDK-RTos-j721e-EVM-EVM-EVM-EVM-EVM-EVM-08_00_12/tidl_J7_08_00_00/ti_dl/utils/tidlModelImport'
    编译 .//./custom/tidl_custom_import.c.
    正在编译 tidl_import_core.cpp
    TIdl_IMPORT_CORE . cpp : In Function ‘void tidl_optizeNet(sTidL_OrgNetwork_t& , Int32_t& , Int32_t&) ’ (函数‘ void tidl_opt_opt& ’) :
    TIdl_IMPORT_CORE : CPP:1444 : 46 :错误:未在该 ‘中声明“ TIdl_resetBatchPadValues ”
     tidl_resetBatchPadValues (&orgTIDLNetStructure) ;

    ======== MAKING IMPORT LIBS =================
    make -C ./ti_dl/utils/tidlModelImport -f makefile_shared
    make[1]: Entering directory '/home/ubuntu/ti-processor-sdk-rtos-j721e-evm-08_00_00_12/tidl_j7_08_00_00_10/ti_dl/utils/tidlModelImport'
    compiling ../../custom/tidl_custom_import.c
    compiling tidl_import_core.cpp
    tidl_import_core.cpp: In function ‘void tidl_optimizeNet(sTIDL_OrgNetwork_t&, int32_t&, int32_t&)’:
    tidl_import_core.cpp:1444:46: error: ‘tidl_resetBatchPadValues’ was not declared in this scope
     tidl_resetBatchPadValues(&orgTIDLNetStructure);

    经过更仔细的检查, SDK 中的任何位置都找不到 tidl_resetBatchPadValues。

    本帖内容是由机器翻译所得,供您参考。

  • 您好,

    SDK 发布后我们有一些更改,很抱歉,请使用以下函数:  

    2. tidl_import_core.cpp :在该文件中,用下面更新的代码替换“ tidl_optimizeNet ”函数。

    void tidl_optimizeNet(sTidL_OrgNetwork_t &pOrgTIDLNetStructure , Int32_t &layerIndex , Int32_t &dataIndex )

    如果 (gParams.debugTraceLevel > 0)

    printf("running tidl_optimizeNet \n");
    }
    pOrgTIDLNetStructure . numLayers = 图层索引;
    IF (gParams.modelType == TDL_IMPORT_Model_format_TFLIT_RT && gParams.metaArchType == -1)

    tidl_AddTFODDS 输出图层 (orgTIDLNetStructure ,图层索引, &dataIndex) ;
    }

    // 检查模型中是否存在所有必需的输入
    TIdl_addInDataLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    // 使用导入配置文件更新输入数据形状
    TIdl_filedInDataLayerShape(orgTIDLNetStructure , &gParams , orgTIDLNetStructure , numLayers) ;

    // 将具有多数据的单个 outDataLayer 拆分为多个 outDataLayers
    TIdl_splitOutDataLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure ,
    orgTIDLNetStructure . numLayers) ;

    IF (TRUE == tidl_isYuvLayerPresent())

    tidl_addLayersForUVConversion(orgTIDLNetStructure , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    /* 如果用户请求相同的 */ ,则添加标准化层
    IF ((gParams.inDataNorm[0]) && (false = tidl_isYuvLayerPresent()))

    TIdl_addNormalLayerToInData (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    // 解析随机图层 (仅限 ONNX)
    tidl_FindOnnxShuffleLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    // 删除添加图层,在 Caffe 中不可应用 (仅限 ONNX)
    tidl_mergePadLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    // 删除分割图层
    tidl_mergeSplitLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    // 用 NN 调整大小替换 Pack-Pack-Reshape
    TIdl_mergePackToNNResizeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers);
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    IF(!tidlInputTensorDimCheck(orgTIDLNetStructure ))

    退出 (0) ;
    }

    如果 (gParams.debugTraceLevel > 0)

    tidl_printOpsMgr 列表 (orgTIDLNetStructure) ;
    }


    // 调用整形函数,用于确定每个图层的输入 / 输出形状。
    tidl_updateOutDataShape(orgTIDLNetStructure , 0 , orgTIDLNetStructure。 numLayers , (sTidL_tfOutReshapeMap_t *)&sTIL_OutReshapeTable ;

    // 复制层图层。 3 个输出的 3 层。
    tidl_duplicateSliceLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    // 当调整比例大于 4x 时,将图层重新调整为多个图层。
    tidl_splitResizeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers , dataIndex) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_convertSqueezeToFlattenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeIdentityLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeReluLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeBiasLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_convertBiasToBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_mergeBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeReluLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    IF (gParams.folddMaxPoolInConv2D ==1)

    TIdl_mergePoolingLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }
    否则, IF (gParams.folddDepthToSpaceInConv2D ==1)

    TIdl_mergeDeptthToSpaceLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers);
    }

    tidl_removeDivideByOneLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_mergeBatchToSpaceInDWConvLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    tidl_merge1x1MaxPoolingLayer (orgTIDLNetStructure , orgTIDLNetStructure . numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    TIdl_merge1x1 ResizeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers);
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeFlattenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    Tidl_mergeMinimumLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeClipLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_convertRelUToBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    TIdl_FindFlattenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_convertConv2DToIpLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , (sTDL_tfOutReshapeMap_t *) &sTIL_OutReshapeTable) ;
    tidl_mergeFaltenLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_mergeReshapeLayer(orgTIDLNetStructure , orgTIDLNetStructure , numLayers , (sTidL_tfOutReshapeMap_t *)&sTidL_OutReshapeTable ;
    tidl_removeMergedLayersFromNet(&G) ;

    如果 (gParams.numBatches [0] > 1)

    如果 (gParams.enableHighResOptimization == 0) // 检查 ST 已禁用

    Int32_t 图层地址被设置 =0 ;
    Int32_t 分层标识 = 0 ;
    Int32_t batchPadTotal =1 ;
    行动

    LayerAdded = tidl_addBatchReshapeLayerForBatchProcessing (orgTIDLNetStructure , &dataIndex , orgTIDLNetStructure . numLayers , &layerIdx , &batchPadTotal) ;
    IF (分层式 ==-1)

    printf(" 错误:批处理不支持这些图层集 \n" ;
    退出 (-1) ;
    }
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    } 当时 (分层地址) ;
    tidl_initAndUpdateBatchPadRequirements(&orgTIDLNetStructure ) ;
    tidl_updateOutDataShape(orgTIDLNetStructure , 0 , orgTIDLNetStructure。 numLayers , (sTidL_tfOutReshapeMap_t *)&sTIL_OutReshapeTable ;
    }
    否则

    printf(" 错误:超级拼贴大小写不支持批处理 \n") ;
    退出 (-1) ;
    }
    }

    /*
    * 分析 SSD 结构
    * 步骤:
    * 1. 将 Softmax 图层合并为 DetectionOut 图层
    * 2. 将整形图层合并为分离图层
    * 3. 手柄宽度方向锥形
    * 4. 删除永久图层
    * 5. 删除所有 Priorbox 图层,并将参数发送到 DetectionOut 图层。
    * 搜索带有主框输入和检出输出的所有凹面图层。
    * 按顺序解析每个主框。
    *
    tidl_mergeDetectionoutLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;

    tidl_addPadLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    IF(gParams.foldedPreBnConv2D)

    tidl_mergePreBNLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_removeMergedLayersFromNet(&G) ;
    }

    IF (TRUE == tidl_isYuvLayerPresent())

    TIdl_mergeYUVtoRGB 转换 (orgTIDLNetStructure , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    如果 ((gParams.metaArchType == TDL_metaArchTIDLSSD) ||
    (gParams.metaArchType == TDL_metaArchTFSSD) ||
    (gParams.metaArchType == TDL_metaArchTFFasterRcnn) ||
    (gParams.metaArchType == TDL_metaArchTILYolo) ||
    (GParams.metaArchType == TDL_metaArchTIDLRetinaNet) ||
    (gParams.metaArchType == TDL_metaArchTILYoloV5)
    ) //todo :我们可以不写以上所有条件,而只写 (GParams.metaArchType=-1)

    tidl_addMetaArchLayersTONet(orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }

    /* 删除探测层中的类并平图层 */
    如果 (gParams.modelType == tidL_import_model_format_TFLITE_RT && gParams.metaArchType == -1) // 元拱类型特别设置为 -1 (如果网络具有探测后的 proc 层)

    // 如果 TIDL 添加了探测 POST 处理器层,则我们不想调用此函数,仅当实际网络具有探测 POST 处理器层时才调用
    tidl_removeConcatReshapeLogisticLayerInDetNet(orgTIDLNetStructure , orgTIDLNetStructure。 numLayers);
    }
    否则

    tidl_removeConcatFlattenLayerInDetNet(orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }
    tidl_removeMergedLayersFromNet(&G) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    如果 (gParams.modelType == tidL_import_model_format_TFLITE_RT && gParams.metaArchType!= -1)

    tidl_AddTfODDS 分层效果详细信息 (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex) ;
    }
    IF (gParams.modelType == TDL_IMPORT_Model_format_ONNX_RT)

    tidl_AddOnnxOutputLayers (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex) ;
    }
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    IF (gParams.addDataConvertToNet)

    IF (false == tidl_isYuvLayerPresent())

    TIdl_addDataConvertLayer (orgTIDLNetStructure , orgTIDLNetStructure , numLayers , &dataIndex , &gParams) ;
    TIdl_sortLayersInProcess (&orgTIDLNetStructure , &temTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    }
    否则

    printf(" 警告 :: addDataConvertToNet 被忽略,因为 YUV 输入不支持此功能 \n");
    }
    }

    LayerIndex = orgTIDLNetStructure . numLayers ;

    tidl_convertReshapeToFlatten(orgTIDLNetStructure , orgTIDLNetStructure。 numLayers);
    tidl_convertIpLayerInputShape (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    tidl_convertSoftMaxLayerInputShape (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;

    TIL_convertDeconv2DtoConv (orgTIDLNetStructure ,图层索引) ;
    TIdl_makeDataIdLayerIdSame(&orgTIDLNetStructure , layerIndex) ;

    tidl_updateHighResOptimization (orgTIDLNetStructure , orgTIDLNetStructure , numLayers) ;
    如果 (gParams.debugTraceLevel > 0)

    printf("completed tidl_optimizeNet\n");
    }
    }

    谢谢,

    普拉文

    本帖内容是由机器翻译所得,供您参考。

  • 感谢您的检查! 解决了问题。 此时,编译工作做得更进一步,但它在编译测试样本时停止。

    ========= 进行 TIDL 测试 =================
    使 -C ./ti_dl/test -f makefile final_install
    品牌 [1] :输入目录 '/home/Ubuntu/i-processor-SDK-RTos-j721e-EVM-EVM-EVM-EVM-EVM-EVM-08_00_12/ tidl_J7_08_00_00/ti_dl/test'
    Concerto_root 是 /ti/j7presi/ 工作区 //vision _apps/Conerto
    Makefile : 54 : /ti/j7prei/workarea//vision _apps/Corchota/rules.mak :无此类文件或目录
    make [1] : *** 没有规则来建立目标 '/ti/j7presi/workarea//vision _apps/Creito/srules.mak'。  停下。
    品牌 [1] :离开目录 '/home/Ubuntu/i-processor-SDK-RTos-j721e-EVM-EVM-EVM-EVM-EVM-EVM-08_00_12_tidl_J7_08_00_00/ti_dl/test'
    Makefile : 160 :目标“ TIdl ”的配方失败
    品牌: *** [滴 答 ] 错误 2

    以下是我的环境变量

    导出 TDL_BASE 路径 ="/home/Ubuntu/ti 处理器 -SDK-RTos-j721e-EVM-EVM-EVM-EVM-EVM-EVM-EVM-EVM-08_00_12/tidl_J7_08_00_00_10"
    导出 IVISION_PATH="/home/Ubuntu/ti-processor-SDK-RTos-j721e-EVM-EVM-EVM-08_00_00_12/ivision
    导出 DSP_TOOLS ="/home/Ubuntu/Downloads/tools/ti-CGT-C7001_1.4.2.LTS ”
    导出 PDK_INSTALL_PATH="/home/Ubuntu/ti 处理器 -SDK-RTos-j721e-EVM-EVM-EVM-EVM-EVM-08_00_12/CPDK_Jacinto _08_00_00_37/ 封装”
    导出 TDL_PROTOBUF_PATH="/home/Ubuntu/GitHub/PROTOBUF-3.11.3"
    导出 TDL_FLATBUF_PATH="/home/Ubuntu/GitHub/flatbuffers -1.12.0"
    导出 MMALIB_PATH="/home/Ubuntu/ti-processor-SDK-RTos-j721e-EVM-EVM-EVM-EVM-08_00_12/mmalib_02_01_00_07"
    导出 TDL_OpenCV_PATH="/home/Ubuntu/GitHub/OpenCV-4.1.0"

    我能看到的唯一奇怪的事情就是这样

    Concerto_root 是 /ti/j7presi/ 工作区 //vision _apps/Conerto

    工作区后面有两个斜线字符。

    本帖内容是由机器翻译所得,供您参考。

  • 您好,

    您无需构建 TIDL ,只需构建导入工具即可。 请使用“ make it -j ”命令并检查?

    谢谢,

    普拉文

    本帖内容是由机器翻译所得,供您参考。

  • 编译成功,成功完成了 make it -J.

    以下是转换输出结果:

    (基本) Ubuntu@Ubuntu-computer :~ ë /ti 处理器 -SDK-RTos-j721e-EVM-EVM-EVM-08_00_12/tidl_J7_08_00_00/10/ti_dl/utils/tidlModelImport$ ./out /tidl_model_import config.txt
    TFLite 模型 (Flatbuf) 文件 : ./out / model-8-23.tflite  
    TIDL 网络文件     : ./OUT / model-8-23.bin  
    TIDL IO 信息文件     : ./out/model-8-23  
    10.
    警告:内部产品层线性 /dense_1/Relu ;线性 /dense_1/BiasAdd 的系数在系数文件中找不到 (或不匹配) ,将生成随机系数! 仅供评估使用! 结果都是随机的!

    ~~~~~在 PC 仿真模式下运行 TIDL 以收集每层的激活范围~~~~~

    正在处理配置文件 0 : /home/Ubuntu/i-processor-SDK-RTos-j721e-EVM-EVM-08-00_00_12/tidl_J7_08_00_00/10/ti_dl/utils/tidlModelImport/out/config.txt.qunat_stats_config.txt
     ----- 具有仅参考流程的 TIDL 流程 -------------------------------

    0。    。 t    199.65  ... (笑声) 答:  896 , 0.0000 , 0.0000 ,    0.... ...
       第 1 号。 。 t    172.17...  ... (笑声) 答:  558 , 0.0000 , 0.0000 ,    0.... ...
       第 2 号。 。 T    171.01...  ... (笑声) 答:  443 , 0.0000 , 0.0000 ,    0.... ...
    第   3 号。 。 T    178.82  ... (笑声) 答:  499 , 0.0000 , 0.0000 ,    0.... ...
    ~~~~~在 PC 仿真模式下运行 TIDL 以收集每层的激活范围~~~~~

    正在处理配置文件 0 : /home/Ubuntu/i-processor-SDK-RTos-j721e-EVM-EVM-08-00_00_12/tidl_J7_08_00_00/10/ti_dl/utils/tidlModelImport/out/config.txt.qunat_stats_config.txt
     ----- 具有仅参考流程的 TIDL 流程 -------------------------------

    0。    。 T    233.18  ... (笑声) 答:  896 , 0.0000 , 0.0000 ,    0.... ...
       第 1 号。 。 T    196.61  ... (笑声) 答:  558 , 0.0000 , 0.0000 ,    0.... ...
       第 2 号。 。 T    193.48  ... (笑声) 答:  443 , 0.0000 , 0.0000 ,    0.... ...
    第   3 号。 。 T    187.10....  ... (笑声) 答:  499 , 0.0000 , 0.0000 ,    0.... ...
     
     
     "   校准迭代数 0 已完成 ********
     
     
     

    ----- 网络编译器跟踪 -----------------------------
    内存分配成功
    找不到替代字符串 tidl_net_
    建议:在本版本中,具有 16 位的 [TDL_FlattendLayer] 线性 / 平展 / 整形平展不是最佳。
    《国家安全与发展报告》
    **         1 警告         0 错误         **
    《国家安全与发展报告》

    有一条关于使用随机系数的警告,因此模型输出结果可能不正确 - 我尚未检查。

    警告:内部产品层线性 /dense_1/Relu ;线性 /dense_1/BiasAdd 的系数在系数文件中找不到 (或不匹配) ,将生成随机系数! 仅供评估使用! 结果都是随机的!

    我们的最终目标是能够使用 TIDL 模型导入工具作为 Tensorflow Lite 的代表,因为它似乎是用户最方便的方法。 虽然我们现在已经有证据证明此功能可以正常工作,但您是否有大致的时间表来确定您发布的修补程序将在何时作为总处理程序 SDK-RTOS 的一部分发布?

    本帖内容是由机器翻译所得,供您参考。

  • 您好,  

    它 将作为下一个总处理器 -SDK-RTOS 版本 8.1 的一部分发布

    谢谢,

    普拉文

    本帖内容是由机器翻译所得,供您参考。