MMPose——開源姿態(tài)估計算法庫(附人體關(guān)鍵點識別效果演示)
一、簡介
1.1 背景
首先姿態(tài)估計屬于計算機視覺領(lǐng)域的一個基礎(chǔ)研究方向。MMPose是基于Pytorch的姿態(tài)估計開源算法庫,功能全,涵蓋的算法多。
1.2 姿態(tài)估計的任務(wù)分類
-
維度:預(yù)測的是2D還是3D姿態(tài)。
-
輸入格式:圖片 or 視頻
-
姿態(tài)的表示形式:關(guān)鍵點 or 形狀等
-
目標(biāo)類型:全身 or 人臉 or 人手 or 動物 or 服飾
1.3 關(guān)于人體姿態(tài)估計任務(wù)
Human Pose Estimation是關(guān)鍵點檢測任務(wù)中最熱門的任務(wù),即進行人體骨架和關(guān)節(jié)的關(guān)鍵點檢測。
- 人體姿態(tài)估計任務(wù)的擴展:包括基于骨架的、基于表面的、基于三維空間立體的。
例如:facebook提出的Dense pose。將整個人體表面進行包絡(luò)。(偽3D),并沒有將3維坐標(biāo)還原出來。如果要做3D,用三維人體重建的庫MMHuman3D。
關(guān)于視頻理解(MMAction2)與人體姿態(tài)估計的關(guān)系:視頻動作理解的基礎(chǔ)就是人體姿態(tài)估計。先得把骨骼關(guān)鍵點構(gòu)建出來,才能根據(jù)這些特征判斷動作。MMAction2可以參考這篇:關(guān)于MMAction2
論文鏈接:DensePose
1.4 MMPose的相關(guān)貢獻
(1)2D Human Pose(包括body+hand+face一共133個關(guān)鍵點)
(2)3D Human Pose(先檢測人體,再檢測2D Human Pose,再檢測3D Human Pose)
(3)3D Human Pose(人體網(wǎng)格重建任務(wù)——從image中恢復(fù)人體網(wǎng)格)
(4)3D Hand Pose(基于RGB圖像的2D和3D手勢聯(lián)合估計)
(5)其他還包括臉部關(guān)鍵點,animal pose,目標(biāo)跟蹤等等。
二、MMPose所涉及的算法
★這里先解釋一下Regression和Heatmap
- Regression:直接用模型回歸預(yù)測得到每一個關(guān)鍵點的坐標(biāo)
-
Heatmap: 不直接回歸關(guān)鍵點本身的像素坐標(biāo),而是生成一張圖,表示圖中不同區(qū)域是該關(guān)鍵點的置信度。例如,人身上有14個關(guān)鍵點,就會生成14張heatmap,每個關(guān)鍵點處就會存在概率分布。
2.1 基于關(guān)鍵點坐標(biāo)回歸(Regression based)
DeepPose就是這一類方法的經(jīng)典代表。直接回歸關(guān)鍵點坐標(biāo)的方法思路比較簡單,預(yù)測速度快,但直接預(yù)測坐標(biāo)的精度會受到一定影響。
論文鏈接:DeepPose
2.2 基于空間概率分布(Heatmap Based)
基于heatmap的方式逐漸成為主流。該方法會去每個位置預(yù)測一個分?jǐn)?shù),來表征該位置是關(guān)鍵點的置信度。根據(jù)預(yù)測到的heatmap,可以進一步去提取關(guān)鍵點的位置。由于該方法可以更好地保留空間信息,更符合CNN的設(shè)計特性,精度也比坐標(biāo)直接回歸更高。
論文鏈接:Stacked Hourglass
2.3 人體姿態(tài)估計算法(2D)
主要分為兩種方法:自頂向下、自底向上
-
自頂向下(TopDown):先檢測處圖片中的人體,再對每一個人體單獨預(yù)測關(guān)鍵點。該方法的計算量會隨著人數(shù)的增多而上升,但對不同尺寸的人體更加魯棒,精度更高。通俗來說,該方法更準(zhǔn)確。
-
自底向上(BottomUp):先去檢測到所有的關(guān)鍵點,再進行關(guān)鍵點聚類,組合成人體。該方法的計算量不會隨著人數(shù)的增多而上升。通俗來說,該方法更快(人更多的時候越明顯)。
2.4 人體姿態(tài)估計算法(3D)
? 主要在3維空間里去預(yù)測人的位置,根據(jù)輸入不同,可以分為以下3種方法
- 基于單目圖像從2D Pose預(yù)測3D Pose
這種方法的經(jīng)典代表:SimpleBaseline3D。根據(jù)2Dpose和原始圖像的特征,直接估計3D Pose。但是基于單目圖像會存在遮擋問題。
論文鏈接:SimpleBaseline3D
- 基于多視角信息
這種方法的經(jīng)典代表:VoxelPose。解決遮擋問題,例如一個場景有很多人,可以融合多視角的信息去重建3D Pose。
論文鏈接:VoxelPose
- 基于視頻(多幀)信息
在以上兩種方法的基礎(chǔ)上,引入時間維度,相鄰的上下文信息可以輔助更好的預(yù)測。例如之前看的ViPNAS就是用上下文信息來輔助更好的預(yù)測。
這種方法的經(jīng)典代表:VideoPose3D。用2D關(guān)鍵點序列(多了時間維度,就是有好幾幀)作為輸入,然后通過時序的卷積網(wǎng)絡(luò)去處理信息,最后輸出3DPose。
論文鏈接:VideoPose3D
三、MMPose所用的數(shù)據(jù)集
3.1 姿態(tài)估計關(guān)鍵點數(shù)據(jù)集(2D)
基于圖像:COCO
基于視頻:PoseTrack18
3.2 姿態(tài)估計關(guān)鍵點數(shù)據(jù)集(3D)
基于單人:Human3.6M(360萬個人體pose的標(biāo)注)
基于多視角:CMU Panoptic
基于手部:InterHand2.6M
四、MMPose的總體框架
4.1 采用模塊化設(shè)計
將深度學(xué)習(xí)拆分成data(數(shù)據(jù)集)、model(模型)、optimizer(優(yōu)化器)等組件,先把每一個小模塊做好,再注冊到registry(注冊器)里,注冊器里包含了很多功能類似的模塊。在需要啟動任務(wù)時,通過config配置系統(tǒng),代碼就會調(diào)用builder,從而構(gòu)造一整套流程。減少了代碼的耦合。
4.2 用戶接口
在架構(gòu)上,mmpose使用了mmcv提供的底層的接口,通過runner去管理模型的訓(xùn)練、測試、推理等。
4.3 核心組件
(1)Dataloader:sample定義 + pipline
(Dataloader文件所在位置:Dataloader)
在dataloader方面,mmpose提供了一些數(shù)據(jù)集的接口,里面定義了sample和需要經(jīng)過的pipline
- datasets文件夾:完成數(shù)據(jù)加載,準(zhǔn)備pipline的輸入,在evaluate函數(shù)里計算metric
- piplines文件夾:pipline是數(shù)據(jù)預(yù)處理的流水線,由一系列的transform組成,每個transform的輸入和輸出都是字典。例如,LoadImageFromFile就是從文件中讀取圖像,ToTensor就是將讀取的圖像轉(zhuǎn)化為pytorch的tensor。
- samplers文件夾:sampler就是采樣器。sampler提供dataset里數(shù)據(jù)的索引,然后dataloader根據(jù)索引從dataset里提取出對應(yīng)的data。然后將data輸給網(wǎng)絡(luò)進行training。
(2)Model:backbone + (neck) + head
(Model文件所在位置:models)
在模型層面,會把模型 分為backbone,neck,head三個部分
- detectors文件夾:pose的檢測器。通常由backbone,neck,head組成。例如TopDown。
- backbones文件夾:主干網(wǎng)絡(luò)。例如ResNet,HRNet,HRFormer等就在這里定義。
- necks文件夾:處理backbone得到的特征
- heads文件夾:預(yù)測頭,輸出最終預(yù)測結(jié)果。(loss定義在head中)
4.4 其他文件夾
(1)apis(https://github.com/open-mmlab/mmpose/tree/master/mmpose/apis)
封裝訓(xùn)練,測試和推理等流程
train.py:準(zhǔn)備數(shù)據(jù)加載,把模型加載到GPU,構(gòu)建optimizer和runner,注冊hooks等
test.py:模型測試。需要輸入模型和dataloader,測試模型精度。
inference.py:模型推理,進行可視化等工作。
Webcam API:調(diào)用MMpose及其他算法,實現(xiàn)基于攝像頭輸入視頻的交互式應(yīng)用。
(2)cores:(https://github.com/open-mmlab/mmpose/tree/master/mmpose/core)
前后處理,可視化,定制工具等
(3)tools:(https://github.com/open-mmlab/mmpose/tree/master/tools)
- train.py:啟動訓(xùn)練任務(wù)的入口,讀入config,初始化訓(xùn)練環(huán)境,創(chuàng)建模型及數(shù)據(jù)集等,調(diào)用apis/train.py
- test.py:模型推理測試的接口,數(shù)據(jù)集開啟test_mode,加載checkpoint,調(diào)用apis/test.py運行測試
- 分布式訓(xùn)練的啟動腳本:dist_train.sh——通過pytorch啟動分布式 slurm_train.sh——通過slrum(一種集群式管理系統(tǒng))啟動分布式
五、MMPose相關(guān)效果演示
5.1 安裝配置
本機環(huán)境:GPU RTX 2060、CUDA v11.1
Pytorch版本:1.8.0
torchvision版本:0.9.0
編譯器版本:MSVC 192930137
mmtracking
mmpose:0.28.1
5.2 對圖像中人體的關(guān)鍵點檢測
(1)TopDown
-
這里使用TopDown方法對圖像進行預(yù)測
-
先用目標(biāo)檢測把人的框檢測出來:faster_rcnn網(wǎng)絡(luò)
-
再做框里的人的姿態(tài)估計與關(guān)鍵點檢測:hrnet網(wǎng)絡(luò)
-
效果展示
(2)BottomUp
- 這里不需要目標(biāo)檢測模型,只需要bottom up人體姿態(tài)估計模型
- 人體關(guān)鍵點檢測模型:hrnet
- 效果精度并不如TopDown,會存在部分關(guān)鍵點之間的錯誤連接。但是在人更多的情況下速度會比TopDown快。
5.3 對視頻中人體的關(guān)鍵點檢測
(1)單幀輸入模型的視頻預(yù)測
-
這里使用TopDown方法對視頻進行預(yù)測
-
目標(biāo)檢測與關(guān)鍵點識別的網(wǎng)絡(luò)依然是faster_rcnn和hrnet
-
效果展示
MMPose——單幀輸入視頻預(yù)測
- 關(guān)于多幀輸入模型的視頻預(yù)測,就是將視頻前后多幀畫面輸入模型用于姿態(tài)預(yù)測。相比于單幀輸入,檢測到的會更細,例如櫥窗里的模特,廣告牌上的人也會被檢測到。但是同樣,計算量也會大很多。
(2)全圖輸入模型的視頻預(yù)測
-
不提取人體檢測框,直接將全圖輸入至姿態(tài)估計模型中。僅適用于單人,并且單人的效果并不好
-
這里使用TopDown的全圖輸入方法對視頻進行預(yù)測
-
沒有目標(biāo)檢測模型
-
人體關(guān)鍵點檢測網(wǎng)絡(luò):vipnas
-
效果展示
MMPose——全圖輸入模型的視頻預(yù)測
(3)BottomUp算法的視頻預(yù)測
-
同樣,精度效果不如TopDown
-
人體姿態(tài)估計模型:hrnet
MMPose——BottomUp算法的視頻預(yù)測
5.4 對圖像和視頻中手掌的關(guān)鍵點檢測
- Topdown算法
- 目標(biāo)檢測模型:cascade_rcnn
- 手部關(guān)鍵點檢測模型:res50
- 效果展示:
在存在少部分遮擋的情況下,會存在部分關(guān)鍵點的誤識別,但基本上手部關(guān)鍵點都檢測正確
在沒有遮擋的情況下,手部關(guān)鍵點全都準(zhǔn)確識別。
視頻中的手部關(guān)鍵點識別效果也不錯
MMPose——手掌關(guān)鍵點檢測
5.5 對圖像和視頻中全身的關(guān)鍵點檢測
- Topdown算法
- 目標(biāo)檢測模型:faster_rcnn
- 全身關(guān)鍵點檢測模型:hrnet
- 效果展示
視頻中關(guān)鍵點檢測效果也不錯
MMPose——全身關(guān)鍵點檢測(人臉+手+肢體)
5.6 MMPose攝像頭實時效果
實時的效果一般,目標(biāo)檢測的fps為20左右,人體姿態(tài)估計的fps為10左右文章來源:http://www.zghlxwxcb.cn/news/detail-807311.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-807311.html
六、相關(guān)參考鏈接
- DensePose論文鏈接:DensePose
- DeepPose論文鏈接:DeepPose
- Stacked Hourglass論文鏈接:Stacked Hourglass
- SimpleBaseline3D論文鏈接:SimpleBaseline3D
- VoxelPose論文鏈接:VoxelPose
- VideoPose3D論文鏈接:VideoPose3D
- MMPose中Dataloader位置:Dataloader
- MMPose中Model位置:models
- 項目地址:MMPose
- MMPose官方中文文檔:MMPose中文文檔
- 數(shù)據(jù)集的md文檔:數(shù)據(jù)集文檔
- 參考視頻教程:同濟子豪兄MMPose代碼實戰(zhàn)
- MMPose效果演示的相關(guān)參考文檔:
2D人體關(guān)鍵點檢測
在自己的數(shù)據(jù)集上訓(xùn)練2D人體關(guān)鍵點檢測模型
2D手掌關(guān)鍵點檢測
手掌檢測模型
攝像頭實時webcam
到了這里,關(guān)于MMPose姿態(tài)估計+人體關(guān)鍵點識別效果演示的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!