在英特尔开发套件上基于OpenVINO?C#API部署PP

项目中采用OpenVINO部署行人检测算法、关键点检测算法以及摔倒检测算法实现对行人摔倒自动识别算法,并在英特尔开发套件AlxBoard使用OpenVINOC#API结合应用场景部署多模型。

项目中所使用的代码全部在GitHub上开源,项目链接为:

(复制链接到浏览器打开)

Part1

英特尔开发套件

1.1OpenVINO工具套件

英特尔发行版OpenVINO工具套件基于oneAPI而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。通过简化的开发工作流程,OpenVINO可赋能开发者在现实世界中部署高性能应用程序和算法。

OpenVINO2023.1于2023年9月18日发布,该工具包带来了挖掘生成人工智能全部潜力的新功能。生成人工智能的覆盖范围得到了扩展,通过PyTorch*等框架增强了体验,您可以在其中自动导入和转换模型。大型语言模型(LLM)在运行时性能和内存优化方面得到了提升。聊天机器人、代码生成等的模型已启用。OpenVINO更便携,性能更高,可以在任何需要的地方运行:在边缘、云中或本地。

1.2英特尔开发套件AlxBoard介绍

产品定位

英特尔开发套件AlxBoard是英特尔开发套件官方序列中的一员,专为入门级人工智能应用和边缘智能设备而设计。英特尔开发套件AlxBoard能完美胜人工智能学习、开发、实训、应用等不同应用场景。该套件预装了英特尔OpenVINO工具套件、模型仓库和演示案例,便于您轻松快捷地开始应用开发。

套件主要接口与JetsonNano载板兼容,GPIO与树莓派兼容,能够最大限度地复用成熟的生态资源。这使得套件能够作为边缘计算引擎,为人工智能产品验证和开发提供强大支持;同时,也可以作为域控核心,为机器人产品开发提供技术支撑。

产品参数

AI推理单元

借助OpenVINO工具,能够实现CPU+iGPU异构计算推理,IGPU算力约为0.6TOPS

Part2

PaddleDetection

实时行人分析工具PP-Human

飞桨(PaddlePaddle)是集深度学习核心框架、工具组件和服务平台为一体的技术先进、功能完备的开源深度学习平台,已被中国企业广泛使用,深度契合企业应用需求,拥有活跃的开发者社区生态。提供丰富的官方支持模型集合,并推出全类型的高性能部署和集成方案供开发者使用。是中国首个自主研发、功能丰富、开源开放的产业级深度学习平台。

PaddleDetection是一个基于PaddlePaddle的目标检测端到端开发套件,内置30+模型算法及250+预训练模型,覆盖目标检测、实例分割、跟踪、关键点检测等方向,其中包括服务器端和移动端高精度、轻量级产业级SOTA模型、冠军方案和学术前沿算法,并提供配置化的网络模块组件、十余种数据增强策略和损失函数等高阶优化支持和多种部署方案。在提供丰富的模型组件和测试基准的同时,注重端到端的产业落地应用,通过打造产业级特色模型|工具、建设产业应用范例等手段,帮助开发者实现数据准备、模型选型、模型训练、模型部署的全流程打通,快速进行落地应用。

如图所示,PP-Human支持单张图片、图片文件夹单镜头视频和多镜头视频输入,经目标检测以及特征关联,实现属性识别、关键点检测、轨迹/流量计数以及行为识别等功能。此处基于OpenVINO模型部署套件,进行多种模型联合部署,实现实时行人行为识别,此处主要实现行人摔倒识别。

Part3

预测模型获取与转换

3.1PP-YOLOE行人跟踪

模型介绍

PP-YOLOE是基于PP-YOLOv2的卓越的单阶段Anchor-free模型,超越了多种流行的YOLO模型,可以通过widthmultiplier和depthmultiplier配置。PP-YOLOE避免了使用诸如DeformableConvolution或者MatrixNMS之类的特殊算子,以使其能轻松地部署在多种多样的硬件上。此处主要利用PP-Yoloe模型进行行人跟踪。

模型下载与转换

(1)PaddlePaddle模型下载与裁剪:

PP-Human提供了训练好的行人跟踪模型,此处只需要下载,并将其解压到指定文件夹中:

此处模型裁剪主要是在Paddle模型格式下进行裁剪,裁剪方式参考的jiangjiajun[1]提供的模型裁剪方式,为了方便使用,当前项目提供了模型裁剪工具包,在“./paddle_model_process/”文件夹下,利用命令进行模型裁剪:

pythonprune_paddle_model.py--model_dirmot_ppyoloe_l_36e_pipeline--model_filenamemodel.pdmodel--params_filenamemodel.pdiparams--output_namestmp_16concat_14.tmp_0--save_direxport_model

如表4所示,提供了模型裁剪命令说明,大家可以根据自己设置进行模型裁剪,当前命令裁剪的模型目前已经进行测试,完全符合当前阶段的要求。

(2)转换为ONNX格式:

该方式需要安装paddle2onnx和onnxruntime模块。导出方式比较简单,可以进行模型输入固定,此处使用的都为bath_size=1,在命令行中输入以下指令进行转换:

paddle2onnx--model_dirmot_ppyoloe_l_36e_pipeline--model_filenamemodel.pdmodel--params_filenamemodel.pdiparams--input_shape_dict"{'image':[1,3,640,640]}"--opset_version11--save_filemot_ppyoloe_l_36e_pipeline.onnx

(3)转成IR格式

IR格式为OpenVINO原生支持的模型格式,此处主要通过OpenVINO工具进行转换,直接在命令行输入以下指令即可:

mo--input_modelmot_ppyoloe_l_36e_pipeline.onnx

3.2PP-TinyPose人体姿态识别

PP-TinyPose是PaddlePaddle提供了关键点识别模型,PP-TinyPose在单人和多人场景均达到性能SOTA,同时对检测人数无上限,并且在微小目标场景有卓越效果,助力开发者高性能实现异常行为识别、智能健身、体感互动游戏、人机交互等任务。同时扩大数据集,减小输入尺寸,预处理与后处理加入AID、UDP和DARK等策略,保证模型的高性能。实现速度在FP16下122FPS的情况下,精度也可达到51.8%AP,不仅比其他类似实现速度更快,精度更是提升了130%。此处使用的是dark_hrnet_w32_256x192模型,该模型输入与输出如下表所示。

第一模型的输入与conv2d_585.tmp_1节点输出形状,呈现倍数关系,具体是输入的长宽是输出的四倍,因此我们可以通过输入形状来推算输出的大小。

第二模型argmax_0.tmp_00节点输出为预测出的17个点的灰度图,因此后续在进行数据处理是,只需要寻找到最大值所在位置,就可以找到近似的位置。

(1)PaddlePaddle模型下载方式:

命令行直接输入以下代码,或者浏览器输入后面的网址即可。

下载好后将其解压到文件夹中,便可以获得Paddle格式的推理模型。

paddle2onnx--model_dirdark_hrnet_w32_256x192--model_filenamemodel.pdmodel--params_filenamemodel.pdiparams--input_shape_dict"{'image':[1,3,256,192]}"--opset_version11--save_filedark_hrnet_w32_256x192.onnx

(3)转换为IR格式

利用OpenVINO模型优化器,可以实现将ONNX模型转为IR格式。在OpenVINO环境下,切换到模型优化器文件夹,直接使用下面指令便可以进行转换。

cd.\openvino\tools

经过上述指令模型转换后,可以在当前文件夹下找到转换后的三个文件。

mo--input_modelpaddle/model.pdmodel--data_typeFP16--input_shape[1,3,256,192]

3.3ST-GCN基于关键点的行为识别

摔倒行为识别模型使用了ST-GCN,并基于PaddleVideo套件完成模型训练,此处可以直接下载飞桨提供的训练好的模型。

该方式需要安装paddle2onnx和onnxruntime模块。在命令行中输入以下指令进行转换:

paddle2onnx--model_dirSTGCN--model_filenamemodel.pdmodel--params_filenamemodel.pdiparams--opset_version11--save_fileSTGCN.onnx

mo--input_modelpaddle/model.pdmodel--data_typeFP16

Part4

配置PP-Human_Fall_Detection项目

项目中所使用的代码已经放在GitHub仓库PP-Human_Fall_Detection[2],大家可以根据情况自行下载和使用,下面我将会从头开始一步步构建PP-Human_Fall_Detection项目。

4.1环境配置

4.2创建PP-Human_Fall_Detection项目

在该项目中,我们需要使用OpenCvSharp,该依赖目前在Ubutun平台最高可以支持.NETCore3.1,因此我们此处创建一个.NETCore3.1的项目,使用Terminal输入以下指令创建并打开项目文件:

dotnetnewconsole--framework"netcoreapp3.1"-oPP-Human_Fall_Detection

4.3添加项目源码

前文中我们已经提供了项目源码链接,大家可以直接再在源码使用,此处由于篇幅限制,因此此处不对源码做太多的讲解,只演示如何使用项目源码配置当前项目。将项目源码中的PP-Human文件夹和HumanFallDown.cs、Program.cs文件复制到当前项目中,最后项目的路径关系如下所示:

4.4添加OpenVINOC#API

OpenVINOC#API目前只支持克隆源码的方式实现,首先使用Git克隆以下源码,只需要在Terminal输入以下命令:

然后将该项目文件夹下的除了src文件夹之外的文件都删除掉,然后项目的文件路径入下所示:

最后在当前项目中添加项目引用,只需要在Terminal输入以下命令:

dotnetaddreference./OpenVINO-CSharp-API/src/CSharpAPI/CSharpAPI.csproj

4.5添加OpenCvSharp

安装NuGetPackage

OpenCvSharp可以通过NuGetPackage安装,只需要在Terminal输入以下命令:

dotnetaddpackageOpenCvSharp4_.runtime.ubuntu.20.04-x64

添加环境变量

将以下路径添加到环境变量中:

exportLD_LIBRARY_PATH=/home/ygj/Program/OpenVINO-CSharp-API/tutorial_examples/AlxBoard_deploy_yolov8/bin/Debug/netcoreapp3.1/runtimes/ubuntu.20.04-x64/native

/bin/Debug/netcoreapp3.1/runtimes/ubuntu.20.04-x64/native是项目编译后生成的路径,该路径下存放了libOpenCvSharpExtern.so文件,该文件主要是封装的OpenCV中的各种接口。也可以将该文件拷贝到项目运行路径下。

Part5

测试PP-Human_Fall_Detection项目

5.1创建视频读取器

当前项目测试内容为视频,此处主要通过OpenCV的VideoCapture类进行读取,实现逐帧读取测试图片。

5.2行人识别

利用创建好的视频读取器逐帧读取视频图片,将其带入到yoloe_predictor预测器中进行预测,并将预测结果绘制到图片上,期预测结果存放到ResBboxs类中,方便进行数据传输。

通过上述代码,可以实现视频所有帧图片预测,将预测结果保存到本地,如图所示,经过预测器预测,可以很好的捕获到运动的行人。

5.3关键点识别

上一步通过行人跟踪,捕捉到了行人,由于行人是在不断运动的,因此在进行关键点预测时,需要先进行裁剪,将行人区域按照指定要求裁剪下来,并根据裁剪结果对行人关键点进行预测,此处使用的是bath_size=1的预测,适合单人预测,如果出现多人时,可以采用同时预测。

经过模型预测,第一会将预测结果存到结果容器“mot_point”中,用于后面的摔倒识别;另一点将模型预测结果绘制到图像中,如图所示。

5.4摔倒识别

摔倒识别需要同时输入50帧人体关键点识别结果,所以在开始阶段需要积累50帧的关键点识别结果,此处采用自定义的结果保存容器“MotPoint”实现,该容器可以实现保存关键点结果,并将关键点识别结果与上一帧结果进行匹配,当容器已满会返回推理标志,当满足识别条件是,就会进行依次模型预测;同时会清理前20帧数据,继续填充识别结果等待下一次满足条件。

摔倒识别结果为是否摔倒以及对应的权重,此处主要是在满足条件的情况下,进行一次行为识别,并将识别结果绘制到图像上。

5.5模型联合部署实现行人摔倒识别

通过行人跟踪、关键点识别以及行为识别三个模型联合预测,可以实现行人的行为识别,其识别效果如图14所示。在该图中分别包含了三个模型的识别结果:行人位置识别与跟踪是通过PP-YOLOE模型实现的,该模型为下一步关键点识别提供了图像范围,保证了关键点识别的结果;人体骨骼关键点识别时通过dark_hrnet模型实现,为后续行为识别提供了输入;最终的行为识别通过ST-GCN模型实现,其识别结果会知道了行人预测框下部,可以看到预测结果与行人是否摔倒一致。

Part6

总结

在该项目中,基于C#和OpenVINO联合部署PP-YOLOE行人检测模型、dark_hrnet人体关键点识别模型以及ST-GCN行为识别模型,实现行人摔倒检测。

在该项目中,主要存在的难点一是PP-YOLOE模型无法直接使用OpenVINO部署,需要进行裁剪,裁剪掉无法使用的节点,并根据裁剪的节点,处理模型的输出数据;难点二是处理好行人预测与关键点模型识别内容的关系,在进行多人识别时,要结合行人识别模型进行对应的人体关键点识别,并且要当前帧识别结果要对应上一帧行人识别结果才可以保证识别的连续性。

[1]jiangjiajun提供的模型裁剪方式:

[2]PP-Human_Fall_Detection:

[3]【2023Intel有奖征文】爱克斯开发板使用OpenVINOC#API部署Yolov8模型

英特尔、英特尔标识、以及其他英特尔商标是英特尔公司或其子公司在美国和/或其他国家的商标。

THE END
1.AI工具使用作用大吗:探讨AI工具的作用与使用方法在科技飞速发展的当今时代,人工智能()已经渗透到咱们生活的方方面面,从智能手机、智能家居到办公软件,工具无处不在。随着技术的不断成熟人们对其需求也日益增长。那么工具的利用作用到底大不大呢?它又是怎么样改变我们的工作和生活办法的?本文将围绕工具的作用与利用方法实行探讨,期望能为读者提供若干有益的启示。 http://www.slrbs.com/jrzg/aizhishi/40444.html
2.DotNetGuide:?C#/.NET/.NETCore学习工作面试...?【C#/.NET/.NET Core学习、工作、面试指南】记录、收集和总结C#/.NET/.NET Core基础知识、学习路线、开发实战、学习视频、文章、书籍、项目框架、社区组织、开发必备工具、常见面试题、面试须知、简历模板、以及自己在学习和工作中的一些微薄见解。希望能和大家https://gitee.com/ysgdaydayup/DotNetGuide
3.GitLabDuoChatDuo Chat 是源代码管理平台 GitLab 推出的一款对话式AI编程助手,旨在通过自然语言交互为工程和非工程用户提供实时指导。该AI编程工具支持整个软件开发生命周期,帮助团队提高代码理解速度、增强协作能力,并快速掌握 GitLab 的使用。Duo Chat 能够解释代码、重构代码、生成测试,以及提供代码建议,从而提升开发效率和代码质量...https://ai-bot.cn/sites/11414.html
4.14个完全免费的软件工具包括:电脑 Excel 插件、人声伴奏分离、电脑 AI 变声、电脑手机远程控制、电脑电子书格式转换、电脑重复文件和大文件删除、电脑桌面时钟和间隔提醒、按照描述查找词语和句子、企业信息查询、游戏化记忆背单词、AI 文档阅读分析总结、游戏化练习打字、一键去除图片多余物体、静态图标和动态图标下载。 https://www.360doc.cn/article/1090694041_1090694041.html
5.C#基于百度AI实现机器翻译功能C#基于百度AI实现机器翻译功能 目录1、注册百度账号api,创建自己的Api应用2、创建vs控制台应用程序3、编写程序并调试post请求工具类文本翻译-通用版文本翻译-词典版文本翻译-图片翻译总结随着“一带一路”政策的开展,各种项目迎接而来,语言不通就成为了痛点。https://www.inte.net/news/232804.html
6.通义灵码智能编码助手开发者对通义灵码满意率超过 85%,通义灵码是国内开发者首选的 AI 编码工具。 AI 在辅助编程上可以大幅提升效率和质量,通义灵码是国内出色工具,用好 AI 辅助编程提效工具是现代开发者必备的技能。 林昊(毕玄) 贝联珠贯 CEO 通义灵码企业知识库检索增强功能,只需上传代码规范文档,通义灵码就能辅助工程师按规范...https://tongyi.aliyun.com/lingma/
1.值得收藏!盘点那些适合普通人方便又好用的AIGC工具!(下)studycorgi(1)GPTZero:一个致力于生成式AI的社区,GPTZero是一个AI内容检测工具,旨在识别AI生成的内容,这项技术可以扫描一段文本,并使用机器学习判断这段文本是由人类还是由OpenAI的大模型、谷歌的Bard等AI工具生成的。GPTZero官网&详细介绍:https://www.openmao.cn/sites/4118.html ...https://blog.csdn.net/weixin_48001635/article/details/140111614
2.提升C#开发效率必备:推荐6款AI辅助编程工具在现今的编程领域,AI辅助编程工具犹如一股迅猛的潮流,不仅显著提升了开发速度,还能有效提升代码品质,减少错误率,这无疑给开发者们带来了极大的便利。特别是对于C#语言的开发者来说,选择合适的AI工具显得尤为重要。 通义灵码体验 通义灵码为开发者打开了广阔的大门。它依托于通义大模型,带来了智能化的研发体验。它...https://www.7claw.com/2796875.html
3.ai工具汇总,600多个ai工具介绍及官网地址汇总码农集市专业分享IT...ai工具汇总,600多个ai工具介绍及官网地址汇总, 如: Masterpiece Studio 3D Simplifying 3D Creation with AI. Traditional 3D creation tools are too complex. Modern creators just want to create, not get lost in the details. Generate. Edit. Deploy. 与人工智能简化创建3 d。传统的3 d创建工具太复杂。https://www.coder100.com/index/index/content/id/3778045
4.2019年不可错过的45个AI开源工具,你想要的都在这里2018年底,我们整理了去年备受关注的Python开源工具与项目Top100、Github开源项目总结情况以及最受欢迎开源项目Top200。今天,AI科技大本营(ID:rgznai100)通过搜集这一年(2018.10--2019.10)国内外新发布的AI工具,从中挑选出了45个备受欢迎的开源工具,希望你不再错过。 https://36kr.com/p/5262471
5.智能AI代码生成工具Cursor安装和使用超详细教程java它支持多种编程语言,如 Python, Java, C#, JavaScript 等,并且可以根据你的输入和需求自动生成代码片段。 Cursor.so 还可以帮助你重构、理解和优化代码,提高开发效率。 IDEA感觉不香了AI智能编程工具Cursor使用图文教程 强烈建议程序员们都要安装使用,将带来革命性的编码效率提升。本文简单介绍下 Cursor 的安装和使用...https://www.jb51.net/article/283984.htm
6.AI数字人越来越强了!推荐一款最新本地部署生成AI数字人工具:栩栩...AI数字人越来越强了!推荐一款最新本地部署生成AI数字人工具:栩栩如生,以假乱真! 之前给大家介绍过一款叫做SadTalker的AI项目,可以将一张图片制作成数字人视频。但使用SadTalker制作的数字人视频,往往比较生硬,只能动嘴,头部、身体等其他肢体基本没有任何移动,因此很容易被看出是AI生成的数字人。 https://www.aieva.cn/edu/1065.html
7.使用.NET和C#生成AI和ML应用程序.NET使用AI 和 LLM 创建文本、代码、图像和声音,以进行外部和内部通信。 探索互动演示 分析数据 启用对文档和数据的搜索时,使内容易于访问且可操作。 探索互动演示 使用最新的 AI 技术进行创新 应用现有的 C# 技能、Visual Studio工具和不断增长的生态系统来构建 AI 驱动的应用。 https://dotnet.microsoft.com/zh-cn/apps/machinelearning-ai
8.易企秀免费H5模板AI在线设计海报视频数字人易企秀创提供免费H5微场景、海报、长图、表单、视频、互动游戏、画册、数字人、建站、小程序等制作工具及企业微信私域数字智能营销平台,助力企业高效完成内容创意、传播获客、数据管理、效果转化的自营销闭环。https://www.eqxiu.com/