CNStream中的人体姿态检测 yangsn2019-09-25 10:56:58 回复 5 查看
CNStream中的人体姿态检测

人体姿态估计(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输出效果:


针对单人姿态检测,收集了一系列交警手势信号图进行展示:


trafic.PNG


针对多人姿态检测,对多人舞蹈视频处理展示:

multi-dance.PNG


可以看出,单人常规姿态检测可以说非常准确;在多人姿态检测绘制结果上,某些帧出现关节点对匹配错误出现的误连,但整体效果还不错。    

官方微博 官方微信
版权所有 © 2019 寒武纪 Cambricon 备案/许可证号:京ICP备17003415
关闭