【Atlas 200I DK A2 体验】部署样例 sampleYOLOV7MultiInput
1、Atlas 200I DK A2 开箱
参考开发者套件文档,一步步由制卡、到远程连接、再到网络配置等,都有比较详细的教程,并且还提供多种可供开发者选择的配置方法,个人感觉开发者套件文档挺不错的。产品介绍部分还有3D结构分解等外观呈现方式,个人觉得也挺有意思的,不需要手动拆分,就可以更深入了解开发板硬件的组成部分。另一个比较令我惊艳的部分是双网口设置,曾经在使用串口加网线连接嵌入式开发板的时候,就想着为什么不设置双网口更方便一点呢!在这给 Atlas 200I DK A2 双网口设计点个赞!附上开箱照吧!
2、样例迁移部署
想着昇腾提供了 AscendCL 的编程接口,那就体验一下使用社区提供的样例进行实操一下吧。应用案例文档说明步骤也挺详细的,在实操过程中注意查看开发板安装 Ascend 的路径和开发者套件提供的设置是否一致,可以通过 shell 脚本直接查看环境变量是否设置成功。
样例介绍:
功能:使用 yolov7 模型对输入数据进行预测推理,推理检测出图片 / 视频中所有可检测物体,并将推理结果打印到输出上,是一个是基于多路、多线程方案实现的高性能案例,通过多卡并行处理多路数的数据并输出,支持多种输入输出。
样例输入:原始图片 jpg 文件 / 视频 mp4 文件/视频 h26X 文件 /rtsp 视频流。
样例输出:带推理结果的图片 / 带推理结果的视频文件 /rtsp 视频流展示 /cv::imshow 窗口展示 / 打屏显示。
样例流程图:
通用目标检测与识别一站式方案是一个是基于多路、多线程方案实现的高性能案例,通过多卡并行处理多路数的数据并输出。 其中整体流程图如下所示:
- 管理线程:将线程和队列打包在一起,并完成进程创建、消息队列创建、消息发送和消息接收守护。
- 数据输入线程:对输入图片或视频进行解码。
- 数据预处理线程:对数据输入线程传过来的 YUV 图片进行处理(resize等操作)。
- 推理线程:使用 YOLOV7 模型进行推理。
- 数据后处理线程:分析推理结果,输出框点及标签信息。
- 数据输出线程:将框点及标签信息标识到输出数据上。
实验设备:
作用:
作为软件部署的 host 侧(用 CPU)
作为推理芯片,进行模型推理(用 NPU)
开发方式:
其他
开发资源:
样例:https://gitee.com/ascend/samples/tree/master/inference/modelInference/sampleYOLOV7MultiInput
开发者套件:https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/23.0.RC1/pd/pd_0001.html
单张图像推理结果:
问题及解决方法:
(1)编译项目遇到的问题
Build 工程中出现的错误:
问题定位:
main.cpp 使用了 ifstream 定义的对象,但是没有包含其头文件。
问题解决:
在 main.cpp 中,添加 #include 即可。
(2)运行推理过程遇到的问题
视频推理出现的错误:
设置输入MP4视频文件,输出保存离线MP4视频文件的配置流程,会存以下错误:
在 gitee Ascend/sample 社区 Issues 上查看到是内存占满问题,先附上 issue 网址吧 https://gitee.com/ascend/samples/issues/I6WLWO?from=project-issue,后续继续跟近问题解决方案。未完,待续 …
3、总结
在 Atlas 200I DK A2 初次实操由模型转换,到应用部署,通过参考开发者文档和应用案例,个人觉得还是有较多的收获和成就感的,同时还可以学习到不少东西。当然这不能仅局限在开发者文档和应用案例按部就班的操作,得适当地拓展学习,比如:环境变量设置的原理、cmake 如何协助交叉编译、思考 AscendCL 底层封装的思想等,或许这也是我们开发者可以进一步提升自己的途径之一吧。
参考资料
[1] https://gitee.com/ascend/samples/tree/master/inference/modelInference/sampleYOLOV7MultiInput
[2] https://www.hiascend.com/document/detail/zh/Atlas200IDKA2DeveloperKit/23.0.RC1/pd/pd_0001.html