如何評價卡內基梅隆大學的開源項目 OpenPose?
GitHub地址:CMU-Perceptual-Computing-Lab/openpose
其實在openpose還沒有出來之前就一直關注CMU的工作,他們模型的效果很好,並且取得了較好的魯棒性,特別是人被遮擋了一部分還是能夠估計出來,我想這一點其實也說明較大的數據所取得的魯棒性真的很好,但是計算量也很可觀。
openpose中包含了對人臉關鍵點的定位,人手的關鍵點的定位以及人身體的各個關節的定位
openpose是基於CVPR 2016 Convolutional Pose Machine(CPM)和CVPR2017 realtime multi-person pose estimation以及CVPR2017 Hand Keypoint Detection in Single Images using Multiview Bootstrapping這3篇paper的模型做出來的(臉的沒看到有相關的論文)。
下面可以給大家粗略地講講這些模型:
(1)CPM的演算法思想(單人姿態估計)
CPM的模型採用的大卷積核來獲得大的感受野,這對於推斷被遮擋的關節是很有效的。網路結構如下
整個演算法的流程是:
1)首先對圖像的所有出現的人進行回歸,回歸各個人的關節的點
2)然後根據center map來去除掉對其他人的響應
3)最後通過重複地對預測出來的heatmap進行refine得到最終的結果
在進行refine的時候,需要引入中間層的loss,從而保證較深的網路仍然可以訓練下去,不至於梯度彌散或者爆炸。
這種思路很好,通過coarse to fine來逐漸提升回歸的準確度。
(2)realtime multi-person pose estimation的演算法思想(多人姿態估計)
該演算法其實是基於CPM來構造的,所以計算量也很可觀這就是為什麼在上述回答中有些人說那麼吃顯卡。網路的結構如下
該網路的結構與CPM其實很類似,也是通過CPM的方式先將一幅圖中所有人的關節點都回歸出來,此外還同時回歸出part affine field(PAF),什麼是part affine field?看了下面的圖你就明白了。
實際上就是兩個關節之間的連接所產生的heatmap。
為什麼要提PAF?因為本文的方法使用的是自底向上的方法即先回歸出所有人的關節點,然後再對這些關節點進行劃分,這樣就可以把關節分配到每個人。至於怎麼劃分,就是通過PAF來進行劃分,具體的劃分演算法這裡不細講,感興趣的可以看論文。
(3)Hand Keypoint Detection in Single Images using Multiview Bootstrapping(手的姿態估計)
CMU自己建了一個採集人的姿態的球(當然他們手的姿態也在裡面採集),看看下面的圖你就知道了
他們手的姿態的數據集就是在這個球裡面採集(CMU Panoptic Dataset)
這玩意有厲害,看看下面的參數,你們可以感受一下:
Massively Multiview System
- 480 VGA camera views
- 30+ HD views
- 10 RGB-D sensors
- Hardware-based sync
- Calibration
看完之後,其實我想說,對DL來說數據真的很重要,這麼魯棒的模型,全是數據訓出來的。。
PS:這裡還沒更 hand是怎麼具體做的。
(4)其他的單人姿態估計方法
其實除了CPM還有其他的比較好的姿態估計方法,最經典的就是ECCV 2016的stacked hourglass模型,該模型也取得了較為不錯的效果。
此外還有一些腦洞大開的方法:
比如對關節與關節之間的關係進行建模的ECCV 2016 Chained Predictions Using Convolutional Neural Networks。這裡並沒有使用圖模型來進行建模,而是直接用CNN來進行建模。
比如使用GAN來對關節進行建模的方法,國立清華大學的這篇paper:Self Adversarial Training for Human Pose Estimation,該方法是基於hourglass和BEGAN來進行對抗訓練,取得了較好的結果。
(5)總結
總的說來其實姿態估計的玩法還是很多樣,目前的方法其實演算法複雜度還是太高,距離使用還有一點點距離要走。此外,從2D到3D的姿態估計也是未來的一個趨勢,2017的SIGGraph有一篇VNect: Real-time 3D Human Pose Estimation with a Single RGB Camera,這篇還是很靠譜的。
不過這個方向對於研究者而言,面對的挑戰也越來越大。
其實姿態估計一直面臨一個無法解決的問題那就是遮擋,不管怎麼樣,這是一個很大的挑戰。我相信隨著GAN的發展,遮擋問題肯定是可以被解決的。
(6)很多人都在用OpenPose,如果想使用Python版本的 Openpose可以參考我的文章:PyOpenPose編譯與使用 - 一畝半分地 - CSDN博客
編譯這玩意著實碰了不少坑,希望後來人少走彎路,這玩意對opencv的版本和protobuf的版本有要求。
關於姿態估計可以看我的另外一個回答:
目前姿態估計(pose estimation)有哪些主流方法?
做姿態估計的同行可以加群討論,自己一個人做研究沒有人討論也是挺苦逼的。。。
【姿態估計】(qq群號650059258)
blog.csdn.net/xizero00
姿態估計專業交流問答社區:http://ilovepose.com
第一印象是驚艷!OpenPose 可以實現人的面部表情、軀幹和四肢甚至手指的跟蹤,不僅適用於單人也適用於多人,同時具有較好的魯棒性。或許會是人機交互上的一個里程碑,為機器理解人提供了一個高質量的信息維度。
靠手指的運動和軀幹的姿態就可以推理出大部分的人類行為。身體語音的信息量某種程度上遠多於語言所能表達。基於此可以去進一步的演算法疊加,對跟蹤定位到的進行以片段或以幀為單位的標註,實現身體語言的解讀。理解真實的人類不再困難。
基於人類身體語言之後能做的事情不要太多。。。回去跑幾遍,效果不錯的話,就可以準備寫商業方案了之前做過一段時間的face alignment,對openpose初步了解了下,基於之前的研究openface的經歷,說下自己對於openpose的一點看法,拋磚引玉。
終於有人把face alignment和pose alignment串起來了,而且根據人體頭部的剛體屬性及四肢的非剛體特性設計了一套基於caffe的點估計與擴散模型,並建立樹狀決策加速,據此再加之3D背景分割技術,3D試衣demo就可以再次組建起來了。
It is a big business!
是不是能成為新零售的未來不得而已,風,已經起了。
step1、face alignment ,應用:3D試妝,3D眼鏡,3D試帽,3D假髮與頭飾,3D 項鏈,
3D髮型選擇,3D絲巾等
step2、body pose alignment ,應用:3D試衣,3D交互遊戲與娛樂等
step3、hand pose alignment,應用:3D手錶,3D手飾,3D手環,3D美甲等
step4、3D/2D image segmentasion,為3D渲染提供邊界位置服務,為背景替換的虛擬穿越服務
step5、3D render,實現上述功能的3D可視化,
step6、 Merchandise recommendation combines appearance and browsing history,給用戶推薦適合自身身材與氣質的商品
其中,face alignment可以monocamera實現較好的體驗效果,其他都需要3Dcamera(stereo,tof,struct etc..)才具有真實感。
16年參加eccv的時候當時被他們的demo驚艷到了,最近一直在做cmu-pose的加速工作,比cmu-pose performance好的工作有mask-rcnn, 還有最近的Towards Accurate Multi-person Pose Estimation in the Wild, 但是後兩個都是速度很慢的, mask-rcnn 聲稱可以5fps, 另外那個則是top down approach, 速度更慢。所以如果比速度的話, cmu-pose還是蠻贊的, 在titan X 上, 10fps, 如果decrease image resolution的話, 可以達到20甚至更高, 然後檢測的深度可以達到10米開外, 但是performance 會有衰減, 為什麼要處心積慮的加速呢, 因為用這個方法可以很robust的做到multi person tracking, 如果再加上3d攝像頭, 那麼能想像的事情就更多了。最近嘗試了很多idea去加速, 都沒有很成功,比如用mobilenet做backbone,嘗試用tensorrt做inference,很難保證在performance好的情況下提神速度的原因是 需要輸入的圖片resolution高, 然後feature map size大, 那麼downsampling的就少, 導致卷積計算肯定大。最近有好多新的有意思的paper出來, 繼續嘗試, 不成功也積累了很多寶貴的經驗。
(ps : tensorrt的加速效果很明顯,雖然fp16沒有很明顯,推薦最近孫建老師的文章 [1707.06168] Channel Pruning for Accelerating Very Deep Neural Networks, 這個很有可能帶來進一步的加速)
我也來佔個坑,小弟七月分寫的,按照官方給出的寫的中文配置教程,內涵一些錯誤糾正,敬請參考和交流
【OpenPose-Windows】OpenPose+VS2015+Windows+CUDA8+cuDNN5.1 官方配置教程
剛跑了一下測試demo,我只想說gtx960 4g顯卡的fps只有2.3(心心念以為我的小台式可以玩的夢炸了),這個real-time的條件是真吃顯卡,不過效果是真心贊,正面背面側面通吃!!!看了看總代碼量有1w6k行,是時候讀一波了!
openpose在多人姿態估計時確實效果驚艷。得益於part affinity field準確率很高而且能保證速度。更重要的是提供了功能完備的wrapper和很多可調的參數方便實用。單人姿態估計就看不出什麼優勢了,畢竟PAF對於單人完全用不到,會拖慢速度。曾在網上看過一個benchmark,用兩塊1080ti卡才能跑出16+fps。這個實時的代價確實大。本人配置一台1050ti的win8老電腦,去掉heatmap啊渲染啊等不需要的功能,能勉強跑到6fps。
用過,愛過。
OPENPOSE 里的模型的精度並不如第一版的 rtpose裡帶的模型。用在自己的數據集上效果沒有像官方DEMO裡面那麼出色,準確度和魯棒性都不高。因此如果需要應用在自己的場景裡面,fine tuning 或者 postprocessing是少不了的。
也跑過MPIICooking, 有興趣的朋友可以在上面試試,右下角有時候會多一個人。我覺得open pose與 open body要結合起來才算完美。
驚人的開源項目,基於openpose的CV應用會如春筍一般冒出;
最近在研究這個代碼,先佔個坑
我不是做技術的,有些問題需要大神搭救:
1。OpenPose能直接商用么?有沒有專利問題
2。如果能,現在最大的問題是不是計算資源的問題?那麼,我用OpenPose去做一些對實時性要求不高的應用,是可行的么?比如統計上課的時候學生舉手、起立什麼的。
在自己的數據上也有完美的pose預測,還有臉和手的估計,效果沒得說。
但是速度即使在K80上也沒有實時呀,一秒沒有超過25幀。多卡一起跑那就快的多多了。
還有就是作者的代碼寫的真好,各種功能幾乎都有參數對應,作者人也很nice,github上提問題二分鐘就回復了,這樣的工作真心的 是大大的一個贊!最好是能在移動端實現這個開源項目,我的目標就是做個手機端的,精度下降可以接受。你們覺得難度在哪裡?
推薦閱讀:
※如何評價人們對電腦在圍棋上戰勝人類的時間預測?
※如何評價amd的Radeon開放計算平台直接將CUDA編譯代碼直接轉換過來。?
※resnet(殘差網路)的F(x)究竟長什麼樣子?
※卷積神經網路可以用於小目標檢測嗎?
※深度學習與重整化群有什麼關係?
TAG:機器學習 | 卡內基梅隆大學CarnegieMellonUniversity | 深度學習DeepLearning | Caffe深度學習框架 |