肢體識別與應用

周見智發表於2021-09-29

肢體識別本質上還是分類任務,該技術有很多應用場景,比如手勢識別控制類應用、動作檢測類應用、動作評測類應用、以及一些移動裝置AR視訊合成類應用。對於純粹的檢測類應用,可以直接對RGB源影像進行分類,當前基於CNN的影像分類技術已經非常成熟和穩定,準確性也完全達到了實用標準。而對於另外涉及到肢體評測、AR合成類的應用,單靠影像分類技術已經不太夠了,需要用到關鍵點檢測技術,它能檢測出肢體關鍵點(比如四肢、面部紋理、手指等),然後基於檢測到的關鍵點做進一步處理。關鍵點檢測的原理其實跟分類技術原理差不多,只是神經網路的輸出不太一樣。

 

影像分類

在大部分深度學習入門教程中,影像分類基本就是hello world級別存在的,最常見的是識別貓還是狗。ImageNet比賽比的是1000分類,基本涵蓋了大部分常見物體。影像分類的流程很簡單,輸入RGB影像,輸出各分類的概率值,1000分類任務就輸出1000個概率值。影像分類是深度學習技術在CV領域最基礎的應用,主要原因是它涵蓋了深度學習最重要的環節:特徵自動提取。我們剛學習CNN時接觸到的Alexnet、GoogleNet或者Resnet之類的,全部都是特徵自動提取網路,如果需要對輸入分類,網路後面再接特徵分類層即可。

那麼具體到肢體識別任務上,也可以將它看作一個影像分類任務,這裡以‘剪刀石頭布識別’為例子,是一個3分類的分類任務:

 

上面這張圖大部分接觸過深度學習的人應該很清楚,最基礎的分類任務。影像分類起到的作用很有限,僅僅是對肢體做一個大概的分類,無法滿足更細緻的需求,接下來介紹關鍵點檢測。

 

關鍵點檢測

關鍵點檢測的技術當前也非常成熟了,github上最早的OpenPose專案非常火爆,有幾萬星星。通過訓練後,模型能夠實時推理檢測出人體關鍵點(四肢和麵部,具體技術原理跟其他採用神經網路的深度學習技術相似,可以參考網路資料)。

關鍵點檢測出來之後,可以進一步對這些關鍵點進行分析。分析結果就不僅僅是肢體識別了,還可以通過這些關鍵點相互之間的關係來判斷肢體動作的協調程度、或者像一些AR應用在人體上疊加一些其他內容(類似抖音視訊合成)。

 接下來介紹兩種關鍵點分析方法,一種是基於傳統機器學習,先從關鍵點中人工提取特徵、然後再對特徵進行分析(基於常見的機器學習演算法去做分類、聚類或者回歸之類的);另外一種是基於深度學習端到端的處理方式,關鍵點直接作為神經網路的輸入,輸出對應想要的結果。從這兩種不同的處理方式中可以瞭解到傳統機器學習和深度學習的區別,關於兩者的區別可以看一下。

 

關鍵點+機器學習方式

機器學習的一大特點是需要人工提取原資料的特徵,這個過程叫特徵工程。如果需要對關鍵點進行分析,先要從這些關鍵點中提取高質量特徵資料,為什麼要高質量?因為提取特徵的方式或者說維度有很多,要保證提取到的特徵資料最具代表性、能夠充分表達原資料的特點。現以‘石頭剪刀布手勢識別’為例子,來說明如何人工提取特徵資料。我們知道,石頭剪刀布3種手勢之間手指的形狀差異很大,手指和手指關節之間的直線距離差異很明顯,那麼我們可以將關節之間直線距離當作關鍵點的特徵資料,並將其提取出來。

 使用提取到的特徵資料(特徵向量,Feature Vector),訓練K-Means或者DBSCAN等機器學習分類演算法模型,並將其泛用到其他新資料(新特徵)。

 

關鍵點+深度學習方式

跟機器學習不同,深度學習的一大特點就是神經網路能夠自動提取特徵、自動尋找源資料內部的規律。至於它如何提取、或者根據什麼原理去提取,很難解釋。你只需要將源資料(關鍵點座標)輸入神經網路,直接可以輸出對應結果,如果是前面提到的‘石頭剪刀布手勢識別’任務,網路可以輸出三種手勢分別對應的概率。我們可以看到,機器學習和深度學習兩種方式的輸入是不一樣的,前者的輸入是人工提取的特徵資料(某些關節點之間的直線距離值集合),後者輸入可以直接是關鍵點座標值(關鍵點XY值集合)。正因為深度學習這種端到端的處理方式、省去了繁瑣的特徵工程,才能使得其大規模應用在複雜的非結構化資料上,比如CV中的CNN網路,它直接接收RGB格式影像作為輸入,它處理的物件是畫素值,而無需人工做過多的干預。關於這塊詳細參見之前的一篇文章。

我們用關鍵點資料訓練最簡單的神經網路,將訓練得到的模型應用到真實資料上。本文主要介紹了肢體識別的幾種方式,以及採用關鍵點檢測時,如何處理關鍵點資料。同時提到了機器學習和深度學習不同的工作流程,以及各自的特點。有問題的朋友可以留言交流。

 

相關文章