【OpenVINO】行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human-上篇

行人摔倒检测 — 基于 OpenVINO C# API 部署PP-Human

  • 1. 英特尔开发套件
    • 1.1 OpenVINO
    • 1.2 AIxBoard 介绍
      • 产品定位
      • 产品参数
      • AI推理单元
  • 2. PaddleDetection实时行人分析工具PP-Human
  • 3. 预测模型获取与转换
    • 3.1 PP-YOLOE行人跟踪
      • 模型介绍
      • 模型下载与转换
        • (1)PaddlePaddle模型下载与裁剪:
        • (2)转换为ONNX格式:
        • (3)转成IR格式
    • 3.2 PP-TinyPose人体姿态识别
      • 模型介绍
      • 模型下载与转换
        • (1)PaddlePaddle模型下载方式:
        • (2)转换为ONNX格式:
        • (3)转换为IR格式
    • 3.3 ST-GCN基于关键点的行为识别
      • 模型介绍
      • 模型下载与转换
        • (1)PaddlePaddle模型下载方式:
        • (2)转换为ONNX格式:
        • (3)转换为IR格式

  随着人口老龄化问题的加重,独居老人、空巢老人数量在不断上升,因此如何保障独居老人、空巢老人健康生活和人身安全至关重要。而对于独居老人、空巢老人,如果出现摔倒等情况而不会及时发现,将会对其健康安全造成重大影响。本项目主要研究为开发一套摔倒自动识别报警平台,使用视频监控其采集多路视频流数据,使用行人检测算法、关键点检测算法以及摔倒检测算法实现对行人摔倒自动识别,并根据检测情况,对相关人员发送警报,实现对老人的及时看护。该装置可以布置在养老院等场所,通过算法自动判别,可以大大降低人力成本以及保护老人的隐私。该项目应用场景不知可以用到空巢老人,还可以用到家庭中的孕妇儿童、幼儿园等场景,实现对儿童的摔倒检测。
  项目中采用OpenVINO部署行人检测算法、关键点检测算法以及摔倒检测算法实现对行人摔倒自动识别算法,并在AIxBoard 开发板上使用 OpenVINO C# API 结合应用场景部署多模型。

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

  项目首发网址:行人摔倒检测 - 在英特尔开发套件上基于 OpenVINO™ C# API 部署 PP-Human | 开发者实战

  项目内容角度,在本文中我们将重点讲述项目中所使用的开发套件以及模型获取方式,如何使用大家可以关注下一篇文章。

1. 英特尔开发套件

1.1 OpenVINO

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

image-20230919110341141

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

1.2 AIxBoard 介绍

产品定位

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

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

  使用AIxBoard(爱克斯板)开发套件,您将能够在短时间内构建出一个出色的人工智能应用应用程序。无论是用于科研、教育还是商业领域,爱克斯板都能为您提供良好的支持。借助 OpenVINO™ 工具套件,CPU、iGPU 都具备强劲的 AI 推理能力,支持在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络。

产品参数

主控英特尔赛扬N5105 2.0-2.9GHz (formerly Jasper Lake)
内存板载LPDDR4x 2933MHz, 4GB/6GB/8GB
存储板载 64GB eMMC存储
存储扩展1个M.2 Key-M 2242扩展槽, 支持SATA&NVME协议
BIOSAMI UEFI BIOS
系统支持Ubuntu20.04 LTS
Winodws 10/11

AI推理单元

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

CPUINT8/FP16/FP32
iGPUINT8/FP16 0.6TOPS
GNA高斯及神经加速器

2. PaddleDetection实时行人分析工具PP-Human

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

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

image-20230919110426327

  在实际应用中,打架、摔倒、异常闯入等异常行为的发生率高、后果严重,使得其成为了安防领域中重点监控的场景。飞桨目标检测套件PaddleDetection中开源的行人分析工具PP-Human提供了五大异常行为识别、26种人体属性分析、人流计数、跨镜ReID四大产业级功能,其中异常行为识别功能覆盖了对摔倒、打架、打电话、抽烟、闯入等行为的检测。

image-20230919110449020

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

image-20230919110654821

3. 预测模型获取与转换

3.1 PP-YOLOE行人跟踪

模型介绍

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

表 2 PP-Yoloe Paddle格式模型信息

InputOutput
名称imagescale_factormulticlass_nms3_0.tmp_0multiclass_nms3_0.tmp_2
形状[-1, 3, 640, 640][-1, 2][8400, 6][-1]
数据类型Float32Float32Float32Int32

  表 2 为Paddle格式下PP-YOLOE模型的输入与输出相关信息,该模型包括两个输入与两个输出,可以实现行人识别,该模型可以直接在飞桨平台下载。但由于PP-Yoloe模型无法在OpenVINOTM平台直接部署,需要进行节点裁剪,即裁剪掉scale_factor输入节点,裁剪后模型结构如表 3 所示,具体如何裁剪后续讲解。

表 3 PP-YOLOE Paddle格式模型信息

InputOutput
名称imageconcat_14.tmp_0tmp_20
形状[-1, 3, 640, 640][-1, 1, 8400][-1, 8400, 4]
数据类型Float32Float32Float32

模型下载与转换

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

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

weget https://bj.bcebos.com/v1/paddledet/models/pipeline/mot_ppyoloe_l_36e_pipeline.zip

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

python prune_paddle_model.py --model_dir mot_ppyoloe_l_36e_pipeline --model_filename model.pdmodel --params_filename model.pdiparams --output_names tmp_16 concat_14.tmp_0 --save_dir export_model

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

表 4 模型裁剪命令说明

标志位说明输入
–model_dir模型文件路径mot_ppyoloe_l_36e_pipeline
–model_filename静态图模型文件model.pdmodel
–params_filename模型配置文件信息model.pdiparams
–output_names输出节点名tmp_16 concat_14.tmp_0
–save_dir模型保存路径export_model
(2)转换为ONNX格式:

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

paddle2onnx --model_dir mot_ppyoloe_l_36e_pipeline --model_filename model.pdmodel --params_filename model.pdiparams --input_shape_dict "{'image':[1,3,640,640]}" --opset_version 11 --save_file mot_ppyoloe_l_36e_pipeline.onnx
(3)转成IR格式

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

mo --input_model mot_ppyoloe_l_36e_pipeline.onnx

3.2 PP-TinyPose人体姿态识别

模型介绍

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

表 5 dark_hrnet_w32_256x192 Paddle 模型信息

InputOutput
名称imageconv2d_585.tmp_1argmax_0.tmp_0
形状[bath_size, 3, 256, 192][bath_size, 17, 64, 48][bath_size,17]
数据类型Float32Float32Int64

  表 5为Paddle格式下dark_hrnet_w32_256x192模型的输入与输出相关信息,除此以外,飞桨还提供了输入大小为128×96的模型,这两类模型在部署时所有操作基本一致,主要差别就是输入与输出的形状不同。分析模型的输入和输出可以获取以下几个点:

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

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

模型下载与转换

(1)PaddlePaddle模型下载方式:

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

wget https://bj.bcebos.com/v1/paddledet/models/pipeline/dark_hrnet_w32_256x192.zip

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

(2)转换为ONNX格式:

  该方式需要安装paddle2onnx和onnxruntime模块。在命令行中输入以下指令进行转换,其中转换时需要指定input_shape,否者推理时间会很长:

paddle2onnx --model_dir dark_hrnet_w32_256x192 --model_filename model.pdmodel --params_filename model.pdiparams --input_shape_dict "{'image':[1,3,256,192]}" --opset_version 11 --save_file dark_hrnet_w32_256x192.onnx
(3)转换为IR格式

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

cd .\openvino\tools
mo --input_model paddle/model.pdmodel --input_shape [1,3,256,192]

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

  由于OpenVINOTM支持FP16推理,此处为了对比推理时间,也已并将模型转为FP16格式:

mo --input_model paddle/model.pdmodel --data_type FP16 --input_shape [1,3,256,192]

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

模型介绍

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

表 6 ST-GCN Paddle 模型信息

InputOutput
名称data_batch_0reshape2_34.tmp_0
形状[1, 2, 50, 17, 1][1, 2]
数据类型Float32Float32

  表 6为Paddle格式下ST-GCN模型的输入与输出相关信息,该模型输入为人体骨骼关键识别,由于摔倒是一个连续的过程,因此需要同时输入50帧的关键点结果,因此该模型不支持单张图片的预测,只支持视频的推理预测;其模型输出为是否摔倒的概率。

模型下载与转换

(1)PaddlePaddle模型下载方式:

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

wget https://bj.bcebos.com/v1/paddledet/models/pipeline/STGCN.zip

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

(2)转换为ONNX格式:

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

paddle2onnx --model_dir STGCN --model_filename model.pdmodel --params_filename model.pdiparams --opset_version 11 --save_file STGCN.onnx
(3)转换为IR格式

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

cd .\openvino\tools
mo --input_model paddle/model.pdmodel

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

  由于OpenVINOTM支持FP16推理,此处为了对比推理时间,也已并将模型转为FP16格式:

mo --input_model paddle/model.pdmodel --data_type FP16

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/113607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARM Coresight 系列文章19.1 -- Cortex-A720 PMU 详细介绍】

文章目录 概述Cortex-A720 PMU Features1.1 PMU 使用介绍1.2 Performance monitors events1.3 Performance Monitors Extension registers1.3.1 Performance monitors program1.4 Performance monitors interrupts1.5 Interaction with the Performance Monitoring Unit and De…

2023年传媒行业中期策略 AIGC从三个不同层次为内容产业赋能

基本面和新题材共振,推动传媒互联网行情上涨 AIGC 概念带动,传媒板块领涨 A 股 2023 年第一个交易日(1 月 3 日)至 6 月 2 日,申万传媒指数区间涨幅高达 48.38%,同时期沪深 300 跌幅为 0.25%,…

Python大数据之PySpark

PySpark入门 1、 Spark与PySpark 1、 Spark与PySpark

centos7 部署oracle完整教程(命令行)

centos7 部署oracle完整教程(命令行) 一. centos7安装oracle1.查看Swap分区空间(不能小于2G)2.修改CentOS系统标识 (由于Oracle默认不支持CentOS)2.1.删除CentOS Linux release 7.9.2009 (Core)(快捷键dd)&…

【公众号开发】图像文字识别 · 模板消息推送 · 素材管理 · 带参数二维码的生成与事件的处理

【公众号开发】(4) 文章目录 【公众号开发】(4)1. 图像文字识别功能1.1 百度AI图像文字识别接口申请1.2 查看文档学习如何调用百度AI1.3 程序开发1.3.1 导入依赖:1.3.2 公众号发来post请求格式1.3.3 对image类型的消息…

QStringListModel

创建模型&#xff1a; QStringListModel* model new QStringListModel(this); 初始化列表&#xff1a; QStringList strList;strList << QStringLiteral("北京") << QStringLiteral("上海") << QStringLiteral("天津") &l…

《基于 Vue 组件库 的 Webpack5 配置》8.在生成打包文件之前清空 output(dist) 目录(两种方式)

方式一 ​ 如果 webpack 是 v5.20.0&#xff0c;直接使用属性 output.clean&#xff0c;配置如下&#xff1a; module.exports {//...output: {clean: true}, };方式二 如果使用较低版本&#xff0c;可以使用插件 clean-webpack-plugin&#xff1a; 先安装&#xff1a;npm…

Python---死循环概念---while True

在编程中一个靠自身控制无法终止的程序称为“死循环”。 在Python中&#xff0c;我们也可以使用while True来模拟死循环&#xff1a; 代码&#xff1a; while True: print(每天进步一点点) 图示 应用&#xff1a; 比如&#xff0c;在测试里面&#xff0c;自动化测试用例…

解析Apache Kafka中的事务机制

这篇博客文章并不是关于使用事务细节的教程&#xff0c;我们也不会深入讨论设计细节。相反&#xff0c;我们将在适当的地方链接到JavaDocs或设计文档&#xff0c;以供希望深入研究的读者使用。 为什么交易? 我们在Kafka中设计的事务主要用于那些显示“读-进程-写”模式的应用…

jenkins 原理篇——pipeline流水线 声明式语法详解

大家好&#xff0c;我是蓝胖子&#xff0c;相信大家平时项目中或多或少都有用到jenkins&#xff0c;它的piepeline模式能够对项目的发布流程进行编排&#xff0c;优化部署效率&#xff0c;减少错误的发生&#xff0c;如何去写一个pipeline脚本呢&#xff0c;今天我们就来简单看…

#力扣:1684. 统计一致字符串的数目@FDDLC

1684. 统计一致字符串的数目 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int countConsistentStrings(String allowed, String[] words) {boolean[] isAllowed new boolean[26];for(int i 0; i < allowed.length(); i) isAllowed[allowed…

laravel中锁以及事务的简单使用

一、首先来说一下什么是共享锁&#xff1f;什么是排他锁&#xff1f; 共享&#xff1a;我可以读 写 加锁 , 别人可以 读 加锁。 排他&#xff1a;只有我 才 可以 读 写 加锁 , 也就是说&#xff0c;必须要等我提交事务&#xff0c;其他的才可以操作。 二、简单例子实现加锁 锁…

C#中List、Dictionary、HashSet用法以及区别

前言 在C#编程中&#xff0c;List、Dictionary和HashSet是常用的集合类型,它们都有自己的特点和适用场景。本篇博客将介绍它们的用法、区别及常见操作。深入了解这些集合类型&#xff0c;能够帮助我们更好地组织和处理数据。 1. List: List是一个有序可重复集合&#xff0c;可…

【mysql】关于mysql的数据结构特点 索引特点

文章目录 二叉树红黑树 b treehash结构b tree索引存放特点myisamInnoDB 最左原则主键相关知识点缓存池淘汰机制 前言&#xff1a;翻自己博客 发现缺少mysql数据结构和索引相关内容 两年前整理的mysql知识点 一直存在于博主的笔记本里面 &#xff08;是的 纸质的那种笔记本 不是…

List.of() Vs Arrays.asList()

java中list.of和Arrays.asList方法有什么区别&#xff1f; 简介 Java 提供了几种用于创建列表的方便方法&#xff0c;包括 List.of 和 Arrays.aslist。尽管这两种方法都可以很简单的创建集合对象&#xff0c;但它们实际上是有一些显著差异的。本文将介绍 Java 中的 List.of()…

Kotlin 协程的挂起和阻塞的区别

一&#xff0c;简介 Kotlin协程引入了非常强大的异步编程模型&#xff0c;通过挂起而不是阻塞来实现并发操作。以下是有关Kotlin协程挂起和阻塞的详细介绍&#xff1a; 挂起&#xff08;Suspending&#xff09;&#xff1a; 挂起是指一个协程的执行可以在不阻塞线程的情况下暂…

百分点科技再度亮相GITEX全球大会

10月16-20日&#xff0c;全球最大科技信息展会之一 GITEX Global 2023在迪拜世贸中心开展&#xff0c;本届展会是历年来最大的一届&#xff0c;吸引了来自180个国家的6,000家参展商和180,000名技术高管参会。 百分点科技作为华为生态合作伙伴&#xff0c;继去年之后再度参展&a…

Css 如何取消a链接点击时的背景颜色

要取消 <a> 链接点击时的背景颜色&#xff0c;可以使用 CSS 的伪类 :active。你可以通过为 a:active 应用 background-color 属性设置为 transparent 或者 none&#xff0c;来取消点击时的背景色。下面是一个示例&#xff1a; a:active {background-color: transparent;…

C++:类的默认成员函数------构造函数析构函数(超详细解析,小白一看就懂!)

目录 一、前言 二、为什么会出现构造函数和析构函数 三、构造函数 &#x1f34e;构造函数的概念 &#x1f350;构造函数特性 &#x1f4a6;解释特性3&#xff1a;对象实例化时编译器自动调用对应的构造函数 &#x1f4a6;解释特性4&#xff1a;构造函数支持重载 &…

平板有必要买触控笔吗?推荐的ipad手写笔

iPad之所以能吸引这么多人&#xff0c;主要是因为它的功能出色。用来画画、做笔记&#xff0c;也是一种不错的体验。但如果只是用来看电视和打游戏的话&#xff0c;那就真的有点大材小用了。如果你不需要昂贵的苹果电容笔&#xff0c;也不需要用来专业的绘图&#xff0c;那你可…