如何從靜態圖像中識別「比心」動作

雷鋒網按:極鏈科技Video++ 整理 | 包包

從靜態圖像中識別目標一直是計算機視覺比較熱門和有挑戰性的課題,目前最受歡迎的方法非深度學習莫屬,但是其檢測速度和大數據量的需求也一直存在著很大的問題。其實,傳統的機器學習在某些目標檢測方面不但有著不遜於深度學習的準確度,而且檢測速度和數據量的需求比深度學習要好一些。今天,我們就來聊一下在傳統機器學習方面,基於dlib庫的“比心”動作的識別。

對於動作的識別可以採取目標檢測的方法,主要是先收集動作樣本,接著對訓練樣本提取特徵,然後基於這些特徵進行SVM訓練得到模型,最後基於這個模型對圖像中的動作進行檢測。其訓練的流程圖如下:

如何从静态图像中识别“比心”动作

1.收集樣本,標註並處理樣本。對收集到的包含比心動作的樣本進行標註,主要是用長方形把這個動作框起來,並把這個長方形的左上角座標以及長寬和此文件的名字寫入一個xml文件,訓練的時候只需要讀入xml文件即可。處理樣本主要是對樣本進行一些圖像處理操作,比如鏡像處理、加噪聲,其作用是為了增強數據集。

2.金字塔下采樣,提取fhog特徵。金字塔下采樣基於給定的一個採樣因子,對圖像進行下采樣,也就是給定一個因數對圖像不斷進行縮小,構成多級金字塔,以適應不同尺寸的動作。不斷縮小的終止條件就是圖像大小小於掃描窗口的大小,這個掃描窗口就是一個n*n的大小的矩陣在圖像上不停的滑動,然後根據模型判斷此窗口的特徵是否符合“比心”動作的特徵。而提取的特徵使用fhog特徵來表示的,fhog是hog特徵的變形,hog特徵是方向梯度直方圖,最簡單的方向梯度的計算方式如下:

如何从静态图像中识别“比心”动作

3.SVM訓練。對提取到的fhog特徵基於SVM也就是支持向量機進行訓練,SVM對特徵進行訓練分類一般來說分為線性問題和非線性問題。而線性分類中可分為線性可分和線性不可分,線性可分可以簡單理解為如下圖:

如何从静态图像中识别“比心”动作

也就是找到一個超平面將不同類別的樣本點區分開,也就是圖中的斜線將黃色矩形框和綠色原點區分開,其中最靠近斜線的兩邊樣本點再平面之間的距離越大,那麼這個分類的確信度就越高,那麼得到的這個超平面稱之為最優超平面。對於線性不可分的情況就是在此基礎上加入某個懲罰因子進行調節,使得誤分類的點儘可能少,兩平面的距離儘可能的大。而對於非線性的問題主要是通過空間變換將低維空間映射到高維空間後進行線性可分,如下圖所示:

如何从静态图像中识别“比心”动作

左圖中的橢圓平面就是右圖中的直線。

4. 通過SVM訓練分類得到“比心”動作識別的模型。而檢測過程就是先輸入圖像,然後縮放圖像,通過滑動窗口掃描整個圖像,對滑動窗口中的圖像提取特徵,調用模型判斷該特徵是否屬於“比心”動作的特徵,最後將符合的特徵圖像聚合成一個圖像,用矩形框畫出來,檢測效果如下圖所示:

如何从静态图像中识别“比心”动作

不管是深度學習還是傳統機器學習,只要是有監督的學習,基本上都是分為訓練和檢測兩部分,訓練部分主要是收集樣本、提取特徵和訓練分類。一般來說,在同等條件下,傳統機器學習速度上要快於深度學習,但是準確率可能會稍遜深度學習。而“比心”動作的特徵比較明顯,所以,在傳統機器學習的算法下,其準確率還是不錯的。


分享到:


相關文章: