|
一、评测思路 在前两篇文章中,我们完成了Titan板卡环境搭建和模型训练与转换。进入第三阶段,我们的目标是将TFLite模型成功部署到Titan板卡上,利用NPU加速推理,并确保系统能够实时进行人脸检测。
本篇主要描述了模型部署与调试的详细过程,解决了在推理模型部署时遇到的多个问题,并成功在Titan上实现了实时人脸检测。 本阶段目标:将TFLite模型转换为Ruhmi可部署模型。解决编译过程中CMSIS-NN和函数未定义问题。在Titan上部署并成功运行NPU推理。二、模型部署流程Ruhmi转换与文件管理在之前的步骤中,我们成功将YOLO-Fastest模型从Darknet转换为TFLite格式。接下来,使用Ruhmi工具将TFLite模型转换为适用于TitanNPU的格式。该过程中,我们会生成一组C代码文件,包括模型输入输出的函数以及其他相关推理代码。 模型转换命令: pythontools/model_converter/conver2tflite_and_int8.py\
--config_pathyolo-fastest.cfg\
--weights_pathyolo-fastest_last.weights\
--output_pathface.h5\
--int8_img_path../Yolo-Fastest/datasets/face/data_1/train/image/\
--save_tflite_pathface_int8.tflite\
-f 转换后的TFLite模型用于Ruhmi工具的输入,而Ruhmi会生成适配NPU的C代码。 在模型转换完成后,我按照以下步骤进行了文件管理: 删除不需要的文件:我删除了生成过程中的*_io_data.*文件以及hal_entry.c文件,这些文件不需要直接参与**的编译。 保留核心文件:将核心生成的文件(包括模型推理的相关C文件)放入Titan_npu_ai_face_detection/src/models目录中。 此时,我们已经准备好进行编译。 三、编译过程中遇到的问题及解决方案1.CMSIS-NN库缺失在进行编译时,首先遇到的问题是CMSIS-NN库的缺失,系统提示找不到相关的头文件。具体报错如下: fatalerror:arm_nn_types.h:Nosuchfileordirectory 这个问题通常出现在CMSIS-NN库未正确集成到工程中。为了解决这个问题,我从GitHub上下载了CMSIS-NN库,并将需要的头文件(arm_nn_types.h、arm_nnfunctions.h)放置到了models文件夹中。这样就解决了编译过程中缺失头文件的问题。 解决方案: 下载CMSIS-NN库并将其头文件添加到项目中。 修改工程配置,确保编译器能够找到这些头文件。 2.模型输入输出函数未定义在编译过程中,还遇到未定义函数的问题,特别是获取模型输入和输出指针的函数。报错信息如下: undefinedreferenceto`GetModelInputPtr_serving_default_image_input_0`
undefinedreferenceto`GetModelOutputPtr_StatefulPartitionedCall_0_70273` 这些函数通常是在模型转换过程中生成的,它们用于返回模型输入和输出的指针。在检查后,我发现调用和定义的函数名不匹配,导致了编译失败。 解决方案: 检查函数名是否一致:通过仔细比对函数声明和调用,我发现调用时的函数名与实际定义的函数名不一致。修改后,编译问题得到解决。 修改的函数名一致后,编译成功通过。 四、下载到板子并测试经过以上的修改和调整,我成功通过RT-ThreadStudio将程序下载到Titan板卡上,并启动了NPU推理。 1.串口输出调试在启动程序后,使用RT-Thread打开终端串口,查看输出结果。控制台上正常显示推理结果: detectboxnum:5 Timeelapsed:42ms 2.实时人脸检测效果同时,Titan板卡的LCD屏幕也开始显示实时人脸检测结果,检测框在检测到人脸时准确绘制,并实时更新。 3.成功运行NPU推理最终,NPU推理成功完成,模型正确检测并显示了结果。这意味着整个部署过程已经成功,Titan板卡上的NPU加速推理已经可以稳定工作。 五、问题总结与解决方案遇到的问题CMSIS-NN库缺失:在编译过程中,缺少了CMSIS-NN的头文件,导致编译失败。模型输入输出函数未定义:由于模型转换时生成的函数名和调用名不一致,导致链接错误。解决方案下载CMSIS-NN库并将其头文件正确集成到工程中,确保路径设置无误。仔细检查模型转换时生成的函数名和调用名,确保一致性,解决链接错误。六、总结通过这次部署和调试,我完成了TitanNPU推理模型的成功部署,并成功解决了CMSIS-NN库和函数未定义的问题。整个流程的关键步骤如下: TFLite模型转换:从Darknet训练的YOLO-Fastest模型通过TFLite转换为适用于MCU的格式。 Ruhmi转换:将TFLite模型转换为TitanNPU可执行的代码。 CMSIS-NN集成:下载并集成CMSIS-NN库,解决头文件缺失问题。 函数名称调整:解决函数未定义问题,确保模型输入输出函数正确调用。 成功部署并运行NPU推理:在Titan板卡上成功运行实时人脸检测 检测视频如下:
|