在經過之前對于開發板的使用,以及通過幾個愛芯派官方給出的示例demo(mobilenet/yolov5)在開發板上的部署之后,筆者也逐漸了解了愛芯派這塊開發板利用其官方的推理引擎和pipeline部署模型的整體架構。接下來就回到最開始定的主線上了——人體姿態估計。這篇文章就是記錄對一些輕量化人體姿態估計模型的調研,和前期準備。
01人體姿態估計任務介紹
其實姿態任務識別在很多生活場景都被使用到,這里給大家舉幾個例子:
虛擬主播:大家看到B站直播時的“皮套人”,通常通過一個2D live的形象展示一個動漫形象,然后和主播同步動作。這就是通過攝像頭識別當前主播姿態,再同步到虛擬形象上實現的。
VR游戲:大家可能用過像kinect這樣的設備,用于VR體感游戲。kinect同樣會識別當前用戶的姿態,然后用于VR交互中。
活動識別:通過得到人體姿態后,再通過一個簡單的分類器,可以得到當前的運動狀態,如用戶是否跌倒(可以幫助監控老年人),以及用戶當前身體狀態等。
02人體姿態估計任務技術路線
其實人體姿態估計任務已經有很久的年頭了,在當前也算是很成熟的任務了。有興趣的朋友可以閱讀下這篇綜述:Deep Learning-Based Human Pose Estimation: A Survey (arxiv.org)。下面簡單的對單人、多人人體姿態估計的技術路線做個小介紹:
03Openpose/lightweight openpose模型
首先要用到的是Openpose模型,這應該是最有名的人體姿態估計的模型了,因為是首個開源的人體姿態估計框架。論文如下:1812.08008.pdf (arxiv.org)。如下圖所示,openpose能在多人情況下達到理想的識別效果。這里簡單說明一下openpose的原理:openpose就是原來的Bottom-up模型,會先生成針對關鍵點的heatmap圖像,來預測關鍵點的位置;同時也會PAF圖像,也叫做關節的親和力場,哪些關節的親和力大,那么把它們劃分為同一個人。比如一個胳膊對應兩個關節點。
Openpose存在的一個問題便它其實是于比較大的模型,在GPU上運行速度也只是勉強實時。為了部署在端側,使用較低算力的設備,我們需要進一步將其輕量化,也就是lightweight openpose項目。這個主要針對Openpose模型做一些改進,參數量下降為15% ,但是性能缺相差無幾(精度降低1%)。這里不細講了,有興趣的朋友可以看這篇文章:輕量級OpenPose, Lightweight OpenPose
針對其部署,筆者使用了一些開源的項目后,發現如下的項目比較好用,就先用其觀察模型的效果:
git clone https://github.com/Hzzone/pytorch-openpose.git
(左右移動查看全部內容)
在其body.py里面可以簡單的寫一段代碼輸出onnx文件觀察網絡結構:
class Body(object): def __init__(self, model_path): self.model = bodypose_model() if torch.cuda.is_available(): self.model = self.model.cuda() model_dict = util.transfer(self.model, torch.load(model_path)) self.model.load_state_dict(model_dict) self.model.eval() dummy_input = torch.randn(1, 3, 368, 368).cuda() torch.onnx.export(self.model, dummy_input, "model/openpose_lightweight_body.onnx")
(左右移動查看全部內容)
Openpose模型最終會輸出了兩個特征圖heat_map和paf_map,shape分別為(height,width,19)和(height,width,38),其中width、height分別為輸入圖片的寬高/8,其實是由于最開始會通過一個VGG網絡提取特征,得到輸入圖片的寬高/8的特征圖。19表示coco數據集的關節種類個數18(即一個人體的所有關節點)+1個背景類別,38表示由這18個關節點構成的肢體的部分親和力場(每個肢體由兩個關節連接組成)。如下圖所示,把導出來的onnx文件放到netron網站可以看到其具體結構。這里可以看到輸出的shape,也方便我們部署的要求。
04Movenet
除了Openpose外,筆者還有一個選型,就是谷歌的輕量級人體姿態估計模型MoveNet。它是更近的一個輕量級人體姿態估計模型,但是一個缺點是它沒有論文,也沒有官方代碼,雖然有開源的tfjs模型還有tflite模型,但是也只能通過觀察模型結構去反推。
movenent的介紹在這個網站:Next-Generation Pose Detection with MoveNet and TensorFlow.js — The TensorFlow Blog ,通過對其學習,以及利用官方模型轉換到onnx模型,打開到netron網站觀察其結構,可以發現其有四個輸出,分別對應預測人體實例的幾何中、預測人體的全部關鍵點集、 預測所有關鍵點的位置的熱力場、以及預測關鍵點2D偏移場,也就是每個關鍵點精確子像素位置的局部偏移。這與Openpose不同,但是有了更精細話的結果。
同樣為了復刻movenet網絡結構,筆者選擇參照如下的項目進行實現。
git clone https://github.com/fire717/movenet.pytorch.git
(左右移動查看全部內容)
后續筆者先嘗試將openpose/lightweight openpose部署在板子上,再嘗試對movenent進行進一步的優化。
審核編輯:湯梓紅
-
gpu
+關注
關注
28文章
4787瀏覽量
129413 -
開發板
+關注
關注
25文章
5131瀏覽量
98327 -
模型
+關注
關注
1文章
3341瀏覽量
49270 -
vr
+關注
關注
34文章
9646瀏覽量
150840 -
愛芯派
+關注
關注
0文章
3瀏覽量
98
原文標題:如何用愛芯派 Pro 開發板來部署人體姿態估計模型
文章出處:【微信號:gh_9b9470648b3c,微信公眾號:電子發燒友論壇】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論