1. 程式人生 > >手勢識別(三)--ChaLearn Gesture Challenge資料說明

手勢識別(三)--ChaLearn Gesture Challenge資料說明

原文:http://www.cnblogs.com/tornadomeet 另外一個博主根據上文修改過:http://blog.csdn.net/wm_1991/article/details/52577623 ChaLearn Gesture Challenge挑戰賽是手勢識別中比較新的(2011年開始的)一個挑戰賽,屬於機器學習挑戰賽中的一個,其初衷是進行One-Shot learning的挑戰,當然也不侷限在此。官網為:http://gesture.chalearn.org/  ,2012年分別主辦了兩輪比賽,一個是在CVPR2012中進行,另一個是在ICPR2012中進行。關於本次比賽的一些規則,以及已經完成比賽的作者的識別方法的一些細節在官網上都能檢視得到。大家有興趣13年也可以參加下。因為在日常生活中會遇到各種各樣的手勢,如果對這些手勢的識別能取得很大成功的話,那麼離AI又更近一步了,下面這張圖是生

活中常見產生手勢的場所:

  

  本文主要是簡單介紹下關於這個挑戰賽的資料庫,資料庫的英文名稱為ChaLearn Gesture Data,簡稱CGD,或者CGD2011。資料庫可以從

http://gesture.chalearn.org/data/cgd2011這裡下載,如果下載壓縮版的則大小約5G,否則無壓縮版的則達到30G。考慮到即使壓縮過後,其實也不會對識別結果有太大的影響,且本人電腦承受能力有限,所以我這裡下載了個壓縮版的。

  當然了,下載下來後的資料庫都是視訊格式,分為深度影象視訊和彩色影象視訊,因為在錄製視訊的時候是用Kinect錄製的。由此可見,這些手勢識別既可以能有深度資訊又可以利用色彩資訊,這對搞深度資料的行為識別的人算是一個很好的公共資料庫了。

  下面是這個資料庫的一些特徵:

  1. 共有30個左右的手勢單詞,也就是說有30個基本的手勢動作。

  2. 視訊資料分為500個batch,每個batch含有94個視訊,視訊分為2種,每種各47個。如果視訊名稱為M_x.avi的話,則表示是RGB影象的視訊,否則名稱為K_x.avi表示的是深度影象的視訊。每個視訊有可能有多個基本手勢動作,一般是1~5個,且每個batch最終是100個手勢,很明顯這中間有重複的手勢(因為總共才有30個手勢單詞)。因此,最終有50000=500*100個手勢。每個batch如下圖顯示:

  

  當然了,其中還包含了2個csv檔案,用來描述訓練和測試資料用的(具體應用還沒弄過)。資料庫中每一個batch都是對應一個人的手勢,且每一個batch都只有8~15種手勢,雖然說有47個視訊共100個手勢,但是這是One-shot learning,所以訓練資料的標籤也是隻有8~15個,其它的都是測試資料的標籤(每一個batch中的每一種手勢都只能用一個視訊來訓練)。

  3. 視訊資料的錄製是由20個人完成的。取出一個人的某一個手勢的深度圖和RGB圖,顯示如下:

  

  4. 視訊中每一張圖片的大小為240*320.

  5. 視訊的幀率是每秒10幀。

  6. 這500個batch又分為2種,即”devel”和”valid”,其中”devel”有480個,”valid”有20個。”devel”表示可用於挑戰賽開發(development)的資料庫,這些資料提供了訓練資料和測試資料的標註。”valid”表示用於驗證(validation)的,只提供了訓練資料的標籤。測試結果需要在網路上提交。

  7. 深度影象是以灰階的形式顯示出來的,其計算公式如下所示:

  f(x)=(x-mini)/(maxi-mini),max為最大距離,min為最小距離。X是當前點的距離,f(x)為深度影象顯示時的灰度值。

  8. 深度影象也是有不同精度的,因為錄製資料時的軟體版本不同。這裡分為3個精度,0表示一般(Mediocre),1表示比較好(Good),2表示非常好(Very Good). 比如說前面幾個batch的精度顯示如下(num表示序號,acc表示精度, miss表示漏洞的檔案):

   

  如果大家是研究手勢識別的話,特別是基於Kinet深度資訊的,可以一起交流下,挑戰下這個資料庫.

官網上不僅提供了資料庫的下載以及一些比賽規則,還提供了豐富的sample,這些sample中包含了很多圖片,視訊的處理,比如說深度影象和RGB影象的去噪,梯度計算,取樣;視訊特徵的提取,這些特徵包括STIP,MHI,MEI,HOG,HOF,PCA等;一些手勢識別的演算法,比如DTW;頭部檢測,骨骼檢測,背景消除等等。在官網http://gesture.chalearn.org/data/sample-code上可以下載到最新版的code,解壓後有4個.m檔案,這4個檔案就是提供的sample,分別為browse.m(用來瀏覽和播放視訊資料的,有GUI,類似一個簡單的播放器),examples.m(該檔案中包含了26個sample,sample的內容如上面所講),main.m(該檔案提供了一個principal motion的識別演算法,有整個訓練和識別的全部程式碼,效果還不錯),prepare_final_resu(主要是用來參加挑戰賽提交驗證程式碼的格式統一用的)。

關於該資料庫的挑戰賽在2012年主辦了2場,其比賽結果依次分別在CCPRW2012和ICPRW2012中公佈。這2輪比賽過程中官網http://gesture.chalearn.org/中都有對參加比賽的隊伍所使用的方法等從感性上做了個調查,並且公佈了其調查報告。從這些報告中我們可以參考到做手勢識別的大概流程,每個流程中常見的方法是什麼,我想這點對初步進入該領域的人來說應該有很大的啟發作用。下面就官網釋出的第二輪比賽調查文章來簡單分析下。

  從文章中可以看出識別過程主要分為2大部分:預處理及資料表達、識別。

  其中預處理及資料表達又可以細分為很多,比如說影象增強和濾波,這有時候也是需要的,因為識別的視訊資料中有不少噪聲。文章對比賽獲得前8名的方法分析了下,其結果如下:

   

  其中的方法也有不少,比如說去噪,均衡白化,對比度增強,頻域變化,背景消除等。特徵提取各隊伍使用的方法分佈如下:

   

  其中包括了常見的HOG/HOF描述等。

  當然了,特徵最終提取出來還是要經過維數約簡的,如下:

   

  在識別過程中,有可能會使用到時間分割,如下:

   

  很多分割方法和識別是結合在一起的。

  當然了,識別過程中比較重要的是手勢的表達,這些隊伍使用的方法如下:

   

  其中基於可變長度的向量表示最多。

  在分類時的相似度測量,使用的方法分佈如下:

   

  最後面就是使用的分類器了,如下所示:

   

  可以看出在這些隊伍中,用得最多的分類器是最近鄰。

  現在總結下手勢識別系統的大概流程可以如下(當然了,並不是每個步驟都需要的):

  去噪預處理——》時間分割——》特徵提取——》維數約簡——》特徵表示——》分類器設計(可能用到相似度測量).

CGD資料庫是2011年建立的,且在2012年利用該資料庫進行了兩輪One shot learning的挑戰賽,從官網上給的CGD資料庫可以推斷出組織方是花費了很大的精力來收集這些資料的,不僅而此,組織方還給出了很多sample程式碼以及一些對應資料採集介面,方便大家共同擴大該資料庫。CGD資料庫目前有50000多個關於手勢視訊,共500個batch,每個batch都是同一個人在相同環境下的手勢動作,只是手勢內容不同而已。且每個batch都分為訓練部分和測試部分。訓練部分的每個視訊只包含一個手勢,而測試視訊則包含1~5個手勢。且兩者都有標註對應的視訊是哪個手勢。在看過one shot learning的一些文章前腦袋裡會有2個疑惑。

1. 該CGD資料庫只適應於做One shot learning嗎?

  答案肯定不是。不過在目前的CGD庫的每個batch中的訓練部分中,一個手勢只對應一個視訊,且每個視訊只有一個手勢。測試部分則可以有多個手勢(意味著需要進行不同手勢的時間維分割),不同的batch之間只是人和環境不同,且手勢類別的標註是獨立的,也就是說batch01和batch02中標註為1的那個手勢其實不一定是同一個手勢。這個也非常容易理解,因為該資料庫目前是為了one shot learning而標註的,一個手勢只能用一個視訊來學習。所以CGD的50000個手勢大部分都沒有用到,其實只用到了其中的30個視訊作為訓練即可,其它的都可以用來做測試。因此,在目前的資料庫和目前的標註下,確實只能用於做one shot learning,如果想用到其它需要大量資料訓練的領域的話(比如deep learning, supervised learning等)就需要重新標註這些手勢視訊,使它們的標註在不同的batch中保持一致。

  首先因為one shot learning確實只能使用一個樣本來訓練,所以一般的分類器都會失效。比如說svm,adaboost,random tree等。因為這些類器的設計需要大量的正樣本,同時也需要不少負樣本,所以就目前只有一個樣本的情況,是不可能訓練出這些分類器引數的。並且該挑戰賽其實是一個多分類問題,那就更需要樣本了。因此這裡的分類器我們要理解為測試樣本的特徵和訓練樣本中的每個樣本特徵(因為N個手勢對應N個樣本)進行相似度比較,找出最相似的那個樣本手勢類別為最終的分類結果。從這些比賽作者提供的論文可以看出,它們大部分都使用最近鄰法,這就很容易理解了。

  現在來看看one shot learning比賽的大致演算法流程:首先肯定是提取出每個batch中訓練樣本的特徵(雖然每個手勢只有一個視訊),這個特徵一般用個向量表示。然後把測試視訊中手勢的特徵向量也提取出來,由於一個測試視訊有可能含有多個手勢,所以必須先把這些手勢視訊區域給分割出來,這個分割的準確非常影響最終的評價結果(其實就是相似度測量),因為後面是用編輯距離來評價的,如果分割出的手勢個數出現錯誤,或者位置出現錯誤,則這個編輯距離會變得很大。從比賽統計結果發現,參賽隊伍一般使用candidate cuts的方法來進行分割的。

參考資料: