1. 程式人生 > >OpenCV 隨機森林(Random Forest)手勢識別應用---樣本選擇問題

OpenCV 隨機森林(Random Forest)手勢識別應用---樣本選擇問題

如圖,這是打電話手勢。在進行背景處理、二值化、統一尺寸後,提取ROI的輪廓得到的20*20圖片。

現在要將手勢提取出來,用的是基於OpenCV的隨機森林(Random Forest)API。

手勢識別,本質上就是,將一個模板與另外所有的模板區分開。用過OpenCV的人臉識別訓練特徵函式HAAR的同學就知道,訓練的時候有正模板(Positive samples)和負模板(Negtive samples)。正模板就是要識別的物件,負模板就是除了識別物件意外的圖片。

本文的主旨就在於,在進行隨機森林的訓練時,究竟怎樣選擇樣本?除了正、負樣本個數,還有就是負樣本的複雜程度。負樣本的複雜程度直接決定了負樣本的資訊量豐富程度


現在我將1000張”剪刀手“作為負樣本、1000張”打電話來訓練。訓練後的model檔案包含了隨機數個數,如果開啟model檔案會發現,隨機數個數只有幾個。

隨機數個數少意味著什麼?

如果把model檔案比作機器學習過後,有物件檢測能力的機器。那麼這個機器判斷物件的依據很少。這個機器可以將以上兩種手勢分開來,從而將“打電話”手勢拿到。

但是如果Input的影象複雜一點,實驗證明,機器經常負樣本誤認為“打電話”手勢

因為隨機森林就像一個裁判員的集合,過少的裁判員產生的結果不具有代表性。

實驗證明,負樣本包含的物件複雜一點、多樣一點,而且包含純黑背景圖片,訓練出來的隨機樹個數有指數級增長。隨機森林predict出來的結果魯棒性更好。

在實際應用中,就能夠將“打電話”手勢從其它物件中區分開來。