Kinect中的系統(tǒng)依賴于一組原始的理想輸出(也就是最初標記的數(shù)據(jù))來生成識別器(機器生成的代碼)。而生成的識別器可以在實際應(yīng)用中識別目標手勢。
同時,你很快就會發(fā)現(xiàn)要計算上一步中選定的特性會變成一個大數(shù)據(jù)問題。30幀每秒的測試視頻每小時的幀數(shù)超過10萬,而每幀的像素數(shù)大約是30萬個(新版Kinect還要多)。
即使你只是關(guān)注手部周圍128×128的目標區(qū)域,那么每只手上要分析的像素點也超過1.6萬個——也就是每幀6.4萬個(出現(xiàn)了4只手)。爾后你將提取出來的特性輸入到機器學習系統(tǒng)(應(yīng)該叫眾多的開放系統(tǒng)的變體)中。
Sol沒有跟我們糾結(jié)各種機器學習算法間的區(qū)別,只是簡單說明只要有足夠的數(shù)據(jù)不同算法也會得到相近的結(jié)果(這點很容易理解)。在他們的項目中,他們采用的是ID3算法來創(chuàng)建決策樹。ID3算法計算每個屬性的信息增益,并選取具有最高增益的屬性作為給定集合的測試屬性。
如果最初選定的特性足以完成一個動作識別的判斷,那么系統(tǒng)生成的代碼就會在更多的“底層事實”上跑過。反之,你就要撤回到特性選擇的這一步。
許多關(guān)于機器學習的研究論文最后都以“手指朝上,手指場下”這樣的測試方法草草收尾。但對于Kinect這樣的消費級產(chǎn)品,Sol表示這遠遠不夠。為了達到推向市場的高標準,微軟采用了數(shù)千種測試條目并且開發(fā)了配套工具來分析不同類型的錯誤,從而回過頭來改善算法。他用了手的速率舉例:很顯然當手部快速移動時,捕捉到的手的位置信息會有比較大的偏差——所以抓握動作的識別算法還需要將這一點考慮進去。
在測試中,因為要分析大量的幀數(shù),所以即使是識別正確率達到99.9%,測試的結(jié)果還是會在每小時內(nèi)大量出錯。每次針對這些小故障的更新都需要對識別器(也就是用于動作識別的代碼)進行幾處改動。
Sol提到其中的一項更新就是區(qū)別左右手的圖像識別,兩者不能被當成鏡像對應(yīng),因為左右手的光線和陰影是不對稱的。




