人體姿態估計
人體姿態估計(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輸出效果:
針對單人姿態檢測,收集了一系列交警手勢信號圖進行展示:
針對多人姿態檢測,對多人舞蹈視頻處理展示:

可以看出,單人常規姿態檢測可以說非常准確;在多人姿態檢測繪制結果上,某些幀出現關節點對匹配錯誤出現的誤連,但整體效果還不錯。
