【AI識人】OpenPose:實時多人2D姿態估計 | 附視頻測試及源碼鏈接

【AI識人】OpenPose:實時多人2D姿態估計 | 附視頻測試及源碼鏈接

來自專欄計算視覺與深度學習的小屋

(本文含有大量圖片及視頻內容,不建議使用流量觀看,壕隨意)

前言

前段時間很火的感人動畫短片《Changing Batteries》講了這樣一個故事:獨居的老奶奶收到兒子寄來的一個機器人,雖然鮮有語言的溝通,但是小機器人善於察言觀色,不僅能在老奶奶口渴時為她端水、在老奶奶掃地時接過老奶奶的掃把,做力所能及的家務活,如果老奶奶在椅子上看電視睡著了,機器人還為她輕輕蓋上踏足。有了它,老奶奶又重新感受到久違的快樂,過上了更輕鬆的生活。

那麼,機器人是怎麼察言觀色的呢?

AI識別人的五重境界

AI識別人可以分成五個層次,依次為:

1.有沒有人?->object detection (YOLO SSD Faster-RCNN)

2.人在哪裡?->object localization & semantic segmentation(Mask-RCNN)

3.這個人是誰?->face identification(相對獨立的一個領域,暫且不表)

4.這個人此刻處於什麼狀態?->pose estimation

5.這個人在當前一段時間裡在做什麼?->Sequence action recognition (水比較深,後續慢慢介紹)

五個層次由簡單到複雜,4&5兩個high level的視覺識別中,有一項很關鍵的先決技術-骨骼關鍵點提取,後者的檢測的精度會直接影響姿態檢測的準確度以及動作識別及預測的精度。下面就介紹下骨骼關鍵點提取及人體姿態估計。

什麼是人體姿態估計?

人體姿態估計,pose estimation,就是通過將圖片中已檢測到的人體關鍵點正確的聯繫起來,從而估計人體姿態。

人體關鍵點通常對應人體上有一定自由度的關節,比如頸、肩、肘、腕、腰、膝、踝等,如下圖。

通過對人體關鍵點在三維空間相對位置的計算,來估計人體當前的姿態。

進一步,增加時間序列,看一段時間範圍內人體關鍵點的位置變化,可以更加準確的檢測姿態,估計目標未來時刻姿態,以及做更抽象的人體行為分析,比如判斷一個人是否在打電話等等。

姿態檢測的挑戰:

  1. 每張圖片中包含的人的數量是未知的。

2. 人與人之間的相互作用是非常複雜的,比如接觸、遮擋等,這使得聯合各個肢體,即確定一個人有哪些部分變得困難。

3. 圖像中人越多,計算複雜度越大(計算量與人的數量正相關),這使得real time變得困難。

OpenPose三大亮點

OpenPose是基於卷積神經網路和監督學習並以caffe為框架寫成的開源庫,可以實現人的面部表情、軀幹和四肢甚至手指的跟蹤,不僅適用於單人也適用於多人,同時具有較好的魯棒性。可以稱是世界上第一個基於深度學習的實時多人二維姿態估計,是人機交互上的一個里程碑,為機器理解人提供了一個高質量的信息維度。

其理論基礎來自Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ,是CVPR 2017的一篇論文,作者是來自CMU感知計算實驗室的曹哲(people.eecs.berkeley.edu),Tomas Simon,Shih-En Wei,Yaser Sheikh 。

主要流程

  1. 輸入一幅圖像,經過卷積網路提取特徵,得到一組特徵圖,然後分成兩個岔路,分別使用 CNN網路提取Part Confidence Maps 和 Part Affinity Fields;
  2. 得到這兩個信息後,我們使用圖論中的 Bipartite Matching(偶匹配) 求出Part Association,將同一個人的關節點連接起來,由於PAF自身的矢量性,使得生成的偶匹配很正確,最終合併為一個人的整體骨架;
  3. 最後基於PAFs求Multi-Person Parsing—>把Multi-person parsing問題轉換成graphs問題—>Hungarian Algorithm(匈牙利演算法)

(匈牙利演算法是部圖匹配最常見的演算法,該演算法的核心就是尋找增廣路徑,它是一種用增廣路徑求二分圖最大匹配的演算法。)

卷積網路

亮點1:PAF-Part Affinity Fields(本paper的核心貢獻):

人體姿態檢測,通常是top-down的思路,也就是先做行人檢測,然後把每一個人分割出來,最後基於每一個獨立個體,找出各自的手手腳腳(人體關鍵點)。這個辦法有兩個問題:

1.結果嚴重依賴第一步行人檢測器的結果,如果人都沒找到,就無從進行找手手腳腳這一步了。

2.計算時間和人數正相關,人越多越耗費時間。

OpenPose 使用了另一種思路,即bottom-up,先找出圖中所有的手手腳腳,再用匹配的方法拼裝成一個個人體骨架。這種辦法有一個缺陷,就是沒辦法利用全局上下文的信息。

為了克服這個問題,本文想出了一個辦法,就是PAF(Part Affinity Fields), 部分區域親和。它負責在圖像域編碼著四肢位置和方向的2D矢量。同時,使用CMP(Part Detection Confidence Maps)標記每一個關鍵點的置信度(就是常說的「熱圖」)。通過兩個分支,聯合學習關鍵點位置和他們之間的聯繫。

同時推斷這些自下而上的檢測和關聯的方式,利用貪婪分析演算法(Greedy parsing Algorithm),能夠對全局上下文進行足夠的編碼,獲得高質量的結果,而只是消耗了一小部分計算成本。並行情況下基本達到實時,且耗時與圖片中的人數無強關聯。

亮點2: 高魯棒性

這是CMU的研究成果。很多人好奇,為啥CMU的模型魯棒性好,精度高?我覺得這主要歸功於數據集規模大,質量好。

下圖是CMU家的數據採集設備,一個封閉的大球,可以做到任意角度的人體數據採集。大球上面鑲嵌了480 VGA cameras+31 HD cameras+10 Kinect Ⅱ Sensors+5 DLP Projectors. 並且,全部實現了硬體同步。

由於工作原因,筆者也接觸過不少國內外的訓練數據採集公司,但是這樣的豪華配置,還是非常少見的。

實物長這樣:

海量高質量的數據,使得僅僅基於2D圖像就可以實現魯棒性很好的人體姿態檢測。

這充分說明了,數據為王的時代,數據多就是硬道理。

亮點3:終於將人體、人手、人臉的landmarks三元歸一

以前,人體骨骼關節點是行為分析動作識別的人做,人臉landmark提取是人臉識別或者美顏演算法開發團隊做,手部關節點是手勢識別人機交互團隊在做,屬於不同的細分方向。

CMU的團隊,因為前期的人體骨骼關節點識別取得了不錯的成果,有了更大的目標(野心),於是把人臉人手都整合了進來,做成了一個統一的graph,效果也還可以。face alignment和pose alignment串起來了,而且根據人體頭部的剛體屬性及四肢的非剛體特性設計了一套基於caffe的點估計與擴散模型,並建立樹狀決策加速,據此再加之3D背景分割技術。

當然,如果野心再大一點點,做一個結合了表情識別和手勢識別的人體行為識別方案就更了不起了,比如人在打架的時候,臉部表情通常是緊繃或者憤怒的,手部通常會攥成拳頭,這樣,整合臉和手的識別結果,都整體複雜行為的分析和預測會有幫助。

多人70關鍵點人臉估計:

多人2*21關鍵點手勢估計:

有什麼短板?

耗顯存

計算量本來就很大,為了達到實時的目的,使用了高並行的策略。基於cuda加速,所以非常吃顯存,基本勸退顯存低於4G的機器了(GTX 980ti+)。

時間分析(僅作參考):

<基於GTX-1080 GPU>

原始圖像尺寸是1080×1920, 為了適應GPU memory,resize成了 368×654;

包含是19個人的視頻檢測是8.8 fps;

對於9個人, parsing耗時0.58 ms, CNN耗時99.6 ms。

特殊場景下檢測效果差

比如人體姿勢比較詭異的時候,如下圖(曾經對這個場景產生過心理陰影)

非直立向上朝向的人

其他情況,諸如圖像解析度低、運動模糊、低亮度、檢測目標密集、遮擋嚴重、不完整目標等,效果都不是很理想。但是,這是天下圖像檢測演算法都會犯的錯。

完整視頻測試

有個日本人做過一段印度舞蹈的骨骼提取,這裡我做了一段國產的:

<芳華,群舞片段>

https://www.zhihu.com/video/987128876031561728

<葉問,我要打十個片段>

https://www.zhihu.com/video/987108227749883904

有什麼應用場景(腦洞時間)?

--------------------------2018.6.15更新--------------------------------

抖音尬舞機:經評論區知友提醒,活捉一個已經上線的人體姿態估計應用:

這是腦洞照進現實的時刻~~

---------------------------------------------------------------------------

3D 個人健身教練:

體育類教學(包括上面提到的武術舞蹈教學):

尤其像高爾夫這種固定位置且非常強調姿勢正確的運動,很適合用姿態檢測技術來輔助訓練和錯誤姿勢矯正。

3D試衣:現在也有,但是加入實時姿態檢測,可以做到人動衣動的效果。

遊戲人物動作設計(精度在高些,有潛力取代動作捕捉那套昂貴的設備):

古畫分析(美術學院教學輔助):

人體繪畫教學(適用於初學者)

照相館拍照姿勢指南:

無意義的逗逼(抖x):

結語

效果無疑是很出眾的。僅僅基於2D圖像,廉價的普通攝像頭,就可以實現多人的、實時的、魯棒性很好的人體骨骼關節點提取與姿態檢測。

但是問題也很明顯。如果是離線檢測的話,這個對終端的硬體配置是有很高要求的。一台監控設備,為了骨骼提取,配置一塊幾千大洋的NV獨顯,這產品基本被判死刑了。Intel的RealSense D400和Microsoft的kinect2等3D攝像頭都可以實現實時人體骨骼提取,但是價格前者1000大洋,後者1500大洋,極具競爭力。

給創業者一點思路:如果把這套模型移植到ASIC或者FPGA上,速度和成本得到很好的平衡,會有一些機會。

機器會越來越了解我們,越來越熟悉我們的體態特徵和行為方式,總有一天,人類在機器面前,如同naked,再無秘密可言。

目前看來,這是不可逆的趨勢。

相關鏈接:

【1】論文:arxiv.org/pdf/1611.0805

【2】姿態檢測視頻製作源碼:muyiguangda/caffe_rtpose

【3】開頭視頻:Changing Batteries 更換電池「中字」

【4】CMU訓練數據集: CMU Panoptic Dataset

【4】匈牙利演算法: Hungarian algorithm

原創聲明:本文系知乎原創文章,將同步發布在微信公眾號 BloomCV計算視覺與深度學習的小屋)中,歡迎關注!

其他精彩內容:

浩克匠心:【目標檢測簡史】YOLOv3的實景大片兒(含源碼)?

zhuanlan.zhihu.com圖標浩克匠心:【目標檢測簡史】進擊的YOLOv3,目標檢測網路的巔峰之作?

zhuanlan.zhihu.com圖標
推薦閱讀:

TAG:深度學習DeepLearning | 目標檢測 | 人工智慧 |