一、任务介绍
人体关键点检测插件基于 MindxSDK 开发,在晟腾芯片上进行人体关键点和骨架检测,将检测结果可视化并保存。输入一幅图像,可以检测得到图像中所有行人的关键点并连接成人体骨架。
人体关键点检测是指在输入图像上对指定的 18 类人体骨骼关键点位置进行检测,包括鼻子、左眼、右眼等。然后将关键点正确配对组成相应的人体骨架,展示人体姿态,共 19 类人体骨架,如左肩和左肘两个关键点连接组成左上臂,右膝和右踝两个关键点连接组成右小腿等。本方案采取YOLOv3与3DMPPE-ROOTNET模型,将待检测图片输入模型进行推理,推理得到包含人体关键点信息和关键点之间关联度信息的两个特征图,首先从关键点特征图中提取得到所有候选人体关键点,然后结合关联度信息特征图将不同的关键点组合连接成为人体骨架,再将所有人体骨架连接组成不同的人体,最后将关键点和骨架信息标注在输入图像上,描绘人体姿态。本方案可以对遮挡人体、小人体、密集分布人体等进行检测,还适用于不同姿态(蹲坐、俯卧等)、不同方向(正面、侧面、背面等)以及模糊人体关键点检测等多种复杂场景。
本次实验在MindStudio上进行,请先按照教程配置环境,安装MindStudio。MindStudio的是一套基于华为自研昇腾AI处理器开发的AI全栈开发工具平台,该IDE上功能很多,涵盖面广,可以进行包括网络模型训练、移植、应用开发、推理运行及自定义算子开发等多种任务。MindStudio除了具有工程管理、编译、调试、运行等一般普通功能外,还能进行性能分析,算子比对,可以有效提高工作人员的开发效率。除此之外,MIndStudio具有远端环境,运行任务在远端实现,对于近端的个人设备的要求不高,用户交互体验很好,可以让我们随时随地进行使用。
bilibili链接基于MindStudio的3D人体关键点检测_哔哩哔哩_bilibili
2 环境搭建和配置
2.1服务器端推理环境准备
1.获取YOLOv3与3DMPPE-ROOTNET模型,如下表2.1所示。
表2.1 模型选用表
模型名称 |
获取链接 |
YOLOv3 |
https://www.hiascend.com/zh/software/modelzoo/detail/1/ba2a4c054a094ef595da288ecbc7d7b4 |
3DMPPE-ROOTNET |
https://www.hiascend.com/zh/software/modelzoo/detail/1/c7f19abfe57146bd8ec494c0b377517c |
2.安装模型所需依赖包,YOLOv3与3DMPPE-ROOTNET模型所需依赖如下图2.1与图2.2所示。
图2.1 YOLOv3依赖
图2.2 3DMPPE-ROOTNET依赖
3.配置环境变量如下图2.3所示。
图2.3 环境变量
2.1 MindStudio简介及安装
MindStudio提供了AI开发所需的一站式开发环境,提供图形化开发界面,支持模型开发、算子开发以及应用开发三个主流程中的开发任务。同时还支持网络移植、优化和分析等功能。依靠模型可视化、算力测试、IDE本地仿真调试等功能,MindStudio能够帮助用户在一个工具上就能高效便捷地完成AI应用开发。同时,MindStudio采用了插件化扩展机制,开发者可以通过开发插件来扩展已有功能。本图文教程,将基于Windows平台上的MindStudio,具体安装流程,可以参考官网如下图2.4与2.5所示。
MindStudio软件包下载地址:
https://www.hiascend.com/software/mindstudio/download
Windows平台下载安装流程:
安装流程_MindStudio 版本:3.0.4_安装指南_安装操作(Linux)_华为云
图2.4 MindStudio软件包下载
图2.5 Windows平台安装
2.2 CANN简介及安装
CANN(Compute Architecture for Neural Networks)是华为公司针对AI场景推出的异构计算架构,通过提供多层次的编程接口,支持用户快速构建基于昇腾平台的AI应用和业务。
用户根据实际使用需要,下载对应的CANN软件包,具体安装流程可以参考官网的用户手册如下图2.6与2.7所示。
CANN软件包下载地址https://www.hiascend.com/software/cann/commercial
CANN安装流程:https://www.hiascend.com/document/detail/zh/canncomme
rcial/51RC1/envdeployment/instg
图2.6 CANN软件包下载
图2.7 CANN安装流程
2.3 本地Python安装和配置
安装python3.x及以上版本,并检查环境,本图文教程以Python3.9.13为例,如下图2.8所示。
图2.8 本地Python配置
3、推理开发运行流程
使用MindStudio开发和运行推理业务步骤如下:
确定业务流程:根据业务功能如目标检测、图像分类、属性识别等,将业务流程进行模块化。
寻找合适插件:根据已有SDK插件的功能描述和规格限制来匹配业务功能,当SDK提供的插件无法满足功能需求时,用户可以开发自定义插件。
准备推理模型文件与数据:准备输入图片和下载模型,使用Model Convertor模型转换工具将模型转换为om格式。
流程编排:以可视化的方式,开发数据流图,生成pipeline文件供应用框架使用,配置文件以json格式编写,必须指定业务流名称、元件名称和插件名称,并根据需要,补充元件属性和下游元件名称信息。
业务集成:编写C++程序或Python程序,调用业务流管理的API(MxStreamManager),先进行初始化,再加载业务流配置文件(*.pipeline),然后根据stream配置文件中的StreamName往指定Stream获取输出数据,最后销毁Stream。
编译与运行应用:新建工程为Python版本的应用工程,不需要执行编译应用工程,配置Python环境后,即可在远端服务器运行。
具体的人体关键点检测业务流程为:待检测图片通过 appsrc 插件输入,然后使用图像解码插件mxpi_imagedecoder对图片进行解码,再通过图像缩放插件mxpi_imageresize将图像缩放至满足检测模型要求的输入图像大小要求,缩放后的图像输入模型推理插件mxpi_tensorinfer得到检测人体坐标结果,经过mxpi_objectpostprocessor后处理后把发送给mxpi_imagecrop插件作resize处理,然后再计算一个参数,将mxpi_imagecrop插件的结果和参数一起发送给下一个mxpi_tensorinfer作关键点检测,从中提取关键点,最后通过输出插件 appsink 获取人体关键根节点。在python上实现关键点和关键点之间的连接关系,输出关键点连接形成的人体关键点,并保存图片。
4.主体代码介绍
1) 引入相关库
引入plt库用于处理图片,引入StreamManagerApi包的相关方法,用于操作stream,引入MxpiDataType包,用于封装解码后的图片数据,便于送入pipeline。
图4.1 引入相关库
2) 初始化stream,并根据pipeline创建stream
图4.2 初始化stream
3) 构建流的输入对象--检测目标,并将其传入流中
图4.3 构建流的输入对象
4)得到模型结果,为一组1*3的tensor,是一个未经过处理的3D坐标。
图4.4 模型结果
5)对1*3的tensor 3D坐标结果进行后处理,先根据input_shape和output_shape进行变换得到2D的坐标结果,然后再通过bbox的值,在2D结果的基础上,进行变换得到3D的坐标结果。
图4.5 模型结果处理
6)将结果进行2D和3D可视化,思路即将得到的2D和3D坐标点,根据坐标标记到图像上。
图4.6 结果可视化
7)销毁stream,推理结束
图4.7 销毁stream
5.应用开发
1.创建项目,点击菜单栏的“File>New>Project”按钮,如下图5.1所示。
图5.1 创建项目
2.选择Ascend App 项目,输入项目名,其中CANN版本应与远端服务器转一致,点击change,如下图5.2与5.3所示。
图5.2 项目属性设置
图5.3 CANN设置
3.添加远程服务器,填写远端服务器信息,测试连接,如下图5.4所示。
图5.4 添加远程服务器
4. 连接成功后,选择CANN目录,等待本地同步远端服务器CANN文件,如下图5.5所示。
图5.5 同步远端CANN
5.同步成功后,选择Detection and Classification(python)项目,点击完成,完成新建项目,如下图5.6所示。
图5.6 选择项目模板
6.配置项目结构,如下图3.7所示。
图5.7 配置项目结构
7.选择add python SDK,如下图5.8所示。
图5.8 配置Python SDK
8.选择添加Python interpreter,如下图5.9所示。
图5.9 添加Python interpreter
9.配置本地文件夹与远程服务器映射,如下图5.10所示。
图5.10 配置文件夹映射
10.从远端服务器拉取代码,如下图5.11所示。
图5.11 拉取代码
11.拉取代码成功后,添加名为test.jpg的测试图片,如下图5.12所示。
图5.12 添加测试图片
12.配置运行属性,添加环境变量,点击OK运行,如下图5.13所示。
图5.13 配置运行属性
13.运行成功后在当前项目文件夹下生成输出图片result.jpg,如下图5.14所示。
图5.14 生成输出图片
6.FAQ
1.在执行样例时报错“No module named 'StreamManagerApi'”,如下图6.1所示。
图6.1 引入StreamManagerApi失败
解决方法:
环境变量缺失,重新配置环境变量后问题解决,如下图6.2所示。
图6.2 重新配置环境变量
2.运行main.py时,cv2包引入失败,显示文件不存在,如下图6.3所示。
图6.3 cv2包引入失败
解决方案:缺少opencv依赖包,执行pip install opencv-python-headless后问题解决。
3.运行main.py时,显示“No module named 'google'”,如下图6.4所示。
图6.4 缺少google依赖包
解决方案:缺少google依赖包,执行pip install -i https://mirrors.aliyun.com/pypi/simple/google-cloud与pip install -i https://mirrors.aliyun.com/pypi/simple/google-cloud-vision后问题解决。