人体姿态估计
人体姿态估计
人体姿态估计(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输出效果:
针对单人姿态检测,收集了一系列交警手势信号图进行展示:
针对多人姿态检测,对多人舞蹈视频处理展示:
可以看出,单人常规姿态检测可以说非常准确;在多人姿态检测绘制结果上,某些帧出现关节点对匹配错误出现的误连,但整体效果还不错。