人体姿态估计
人体姿态估计
人体姿态估计(Human Pose Detection)是计算机视觉中的一个重要分支,应用范围宽广,比如在自动驾驶行业进行街景中行人的姿态检测、动作预测;在安防领域的行人再识别问题,特殊场景的特定动作监控;影视产业的电影特效等。
Openpose是卡内基梅隆大学提出的一种人体姿态检测模型,在github上有比较完整的实现Openpose on github。它是第一个基于深度学习的实时多人2D姿态估计方法,模型效果很好,鲁棒性较高,但网络较深,算法复杂度很高。Openpose提供了开源的caffe模型,在i7机器上,用caffe进行cpu前向推理测试,单帧图像耗时约3s+。而使用MLU,同样的网络推理速度可以得到很大提升,在mlu100上单帧图像推理耗时约60+ms。通过CNStream视频处理框架,可以较方便地利用寒武纪MLU和软件栈资源,进行一个完整的姿态检测App开发。本文主要介绍如何在CNStream中进行Openpose的Demo开发。
1. Demo的整体需求
Demo的目标是利用openpose模型进行人体骨骼关节点检测,针对输入视频,检测视频中每一帧中的人体骨骼关键点,匹配连接并绘制到原图后重新输出视频。
Demo开发使用18点表示的人体骨架图:
对应的人体关键点Map表示:
POSE_18_BODY_PARTS {
{0, "Nose"},
{1, "Neck"},
{2, "RShoulder"},
{3, "RElbow"},
{4, "RWrist"},
{5, "LShoulder"},
{6, "LElbow"},
{7, "LWrist"},
{8, "RHip"},
{9, "RKnee"},
{10, "RAnkle"},
{11, "LHip"},
{12, "LKnee"},
{13, "LAnkle"},
{14, "REye"},
{15, "LEye"},
{16, "REar"},
{17, "LEar"}};
2. 开发步骤
准备工作:
利用cambricon caffe提供的一系列工具,转换openpose提供的caffe原生模型为cambricon离线模型。
整个Demo运行过程拆解开,大致包括:
(1) 图片/视频解码
(2) 图像颜色空间转换,并针对推理进行图像数据前处理(整个操作简称前处理)
(3) 进行网络推理过程
(4) 解析网络输出,筛选检测到的关节点,匹配连接有效关节点对,在原图像绘制(整个操作简称后处理)
(5) 重新编码图像为视频
基于CNStream进行开发,可以看作组合三个功能插件搭建整条pipeline的过程:
(1) 利用DataSource插件实现图片的解码,或视频的解析解码过程,该功能插件输入为图片/视频路径,输出为NV12格式的图像数据;
(2) 推理插件,推理插件接收DataSource插件的输入后,首先进行前处理,包括图像颜色空间转换(NV12->BGR)和减均值归一化等,推理后的数据经过后处理过程后输出;
(3) 编码插件,将绘制了骨骼关键点的RGB图像序列重新编码输出为视频
CNStream中提供了满足基本需求的DataSource插件、Inference插件和Encode插件,Demo开发主要需要编写网络的前处理、后处理方法,并将所有插件通过cnstream的配置方式,连接为完整的pipeline(实际开发中可能根据自己的需求定制化开发部分插件)。
3. 最终的Demo输出效果:
针对单人姿态检测,收集了一系列交警手势信号图进行展示:
针对多人姿态检测,对多人舞蹈视频处理展示:
可以看出,单人常规姿态检测可以说非常准确;在多人姿态检测绘制结果上,某些帧出现关节点对匹配错误出现的误连,但整体效果还不错。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)