2020年12月1日 星期二

[DL]Static Gestures Recognition(4): Preparing appropriate dataset

從構想、規劃、試錯到完成深度學習的手勢辨識模型。





4關 
準備資料<I>   Get dataset from Kaggle.

進行深度學習的過程中,尋找合適的訓練資料所耗費的成本並不亞於在學習的過程。


既然要很多圖片,從哪開始找呢?

我從 Kaggle 上找尋了關於手勢的圖片集

心想就先照著圖片分類來定義預測 0,1,2,3,4,5  的手勢吧!

依序照著流程處理,在jupyter lab 中看來測試時相當正常,但很快就發現失敗了…………

Why?

問題出在哪? 

 

 

讓機器訓練的圖片集(有雜訊背景),

但是實際上測試時卻是透過OpenCV取得的閾值畫面,這兩者根本不一樣!  

 (情境好比讓學生讀國文,但實際考題卻是考日文,雖然都是語言,但對機器來說這難以找出相同的特徵進行預測。)

再做一次嘗試,如果Kaggle來源圖片直接轉成閾值圖片去訓練呢?

在直接用圖片測試的過程中表現不錯,可是實際由Webcam擷取影像的過程依舊有問題。

奇怪?   

跟預期不同的地方在哪裡?




苦思許久,得出的結論是:

雖然是用現成的圖片集,但實際上機器預測所接收的圖片還是有落差,

圖片集已經先將手臂去背,僅留下手掌與手指;

但實際情境中,仍然有整隻手臂的圖像,訓練資料與現實生活中的影像有著明顯差異,極可能是失敗的主因

而且,我認為沒有必要透過影像處理非得將手腕以下的影像去除,

因為在手勢操作中,手臂也是手勢的一部份才合理。 

其次是這部分的程式我還不會寫XD 

與達成目標不見得有直接相關,評估目前太難兼無法確認效益的issue 沒有必要非去挑戰不可呀…… 其實是偷懶





準備資料<II>   Try again, capture the gesture by myself.


因為沒有辦法一次找到令人滿意的資料,所以我決定要重新錄製自己的手勢,

並同時參考網友做過類似的範例,發現確實有類似的成功案例,

既然有前例可循,也就代表自己所設想的主要方向沒錯。並設定條件如下:


● 用OpenCV拍照截圖 + 從Kaggle 找到適合的訓練圖,雙管齊下。

這裡自行取得圖片時,有將背景極簡化 + 並設定cv2.threshold()方法,

將訓練的內容盡可能的簡化,去除非必要的因素,採用灰階單色圖片。

再分別配置訓練training、驗證validation、測試test 等資料夾。


● 各個手勢應先定義有明確不同的形狀。

如果太過接近模稜兩可,以訓練圖片量不夠多的情況下,

我無法保證預測的效果是否可能令人滿意? 因此這個有疑點的因素需要先排除。


● 設定的手勢有沒有不符各國當地民情?  查了一下還真的有! 

大家習以為常的OK,居然在法國與比利時是罵人的意思,

發現幾乎不可能所有手勢都能夠在各地通用,大概只有 I LOVE YOU 是最沒問題的。

這9種手勢 出國亂比會出事




在這一階段,定義了以下5種手勢:


這裡先特別說明為什麼有none = 漆黑一片

因為在先前測試過程中,發現在沒有手勢進入ROI之前,

機器仍會將當下畫面判斷為一種結果,這可能導致預測將與真實偏離太遠。

而現階段目的是為了要先能確認透過CNN可以訓練辨識手勢,

因此先將無訊號也定義為一種輸入。


後話:

測試成功後,我參考 Gesture Jseter 定義的手勢,又再添加了兩種手勢,Straight & Thumb。

之所以增加新的手勢定義除了豐富性之外,也考慮到新增定義要與原本的手勢有明顯區別會比較好(免得增加誤判機率)。

本來也有想到 Star Trek 瓦肯人的問候手勢,但我實在比不出來!  只能放棄......這也是很講天份






Series link:

[DL]Static Gestures Recognition(1): Conception

[DL]Static Gestures Recognition(2): Solution finding

[DL]Static Gestures Recognition(3): Define workflow

[DL]Static Gestures Recognition(4): Preparing appropriate dataset

[DL]Static Gestures Recognition(5): Time is worth more than money

[DL]Static Gestures Recognition(6): Training Model & Next Step






沒有留言:

張貼留言