行為識別常用哪種特徵提取?
最近在做行為識別,不知道該如何下手
我是中科院計算所的博士研究生,以前做過一些行為識別方面的研究。這裡提供幾個鏈接:
一、我的github上關於機器學習及行為識別的資料,有課程有資料有論文,比較詳細:GitHub - jindongwang/MachineLearning: 一些關於機器學習的學習資料與研究介紹 GitHub - jindongwang/activityrecognition: Information about activity recognition二、關於提特徵的問題,主要是時域和頻域特徵,用滑動窗口提取特徵,比如平均數、方差、過零率等,還有傅里葉變換後的幅度、頻率、均值等。三、可用數據集:來自UCI的一個行為識別數據集,可用來練手:UCI Machine Learning Repository: Daily and Sports Activities Data Set
四、我寫的python和matlab提取特徵代碼,見文章最後五、最近剛發現一個自動提取時間序列特徵的庫,可以省不少事,地址在這裡:blue-yonder/tsfresh
Matlab版本的在這裡:https://github.com/benfulcher/hctsa
下面以行為識別中最常用的加速度為例,分別從滑動窗口、時域特徵、頻域特徵三部分做簡單的分析。文章最後附有我寫的python提取特徵程序。
0.滑動窗口
滑動窗口由兩個關鍵變數構成:窗口大小(windowssize)和滑動步長(step)。其中,窗口大小指的是一次處理的數據量。假設感測器採樣頻率為,那麼一個窗口大小通常設定為,步長為。在實際應用中,由於要提取頻域特徵,為使得傅里葉變換可計算(變數必須滿足是2的冪),實際窗口大小的計算公式調整為:這樣能保證提取頻域特徵時,傅里葉變換的順利進行。1.合成加速度
加速度計通常有三軸讀數,分別表示三個方向的加速度值。在實際應用中,除去一些特定的動作需要使用特定的單軸來辨別方向之外,通常我們是將三軸加速度合成為一個加速度值(合成加速度),之後的特徵提取與分類全以合成加速度為初始數據進行。這樣在確保精度的同時,減少了計算複雜性。以表示合成加速度,分別表示三軸加速度計讀數,表示第條加速度計讀數,合成加速度的計算方式為:2.時域特徵
時域特徵(time domain features)是指,在序列隨時間變化的過程中,所具有的與時間相關的一些特徵。我們用來表示一個時間窗口的大小(即窗口內數據的行數),用來表示第行數據,常用的時域特徵如下:2.1.均值
計算公式:Matlab中可用的函數:mean()Python中可用的函數:numpy.mean()2.2.標準差
計算公式:(根號下寫成亦可).Matlab中可用的函數:std()Python中可用的函數:std()2.3.眾數
一般來說,一組數據中,出現次數最多的數就叫這組數據的眾數。例如:1,2,3,3,4的眾數是3。但是,如果有兩個或兩個以上個數出現次數都是最多的,那麼這幾個數都是這組數據的眾數。例如:1,2,2,3,3,4的眾數是2和3。還有,如果所有數據出現的次數都一樣,那麼這組數據沒有眾數。例如:1,2,3,4,5沒有眾數。為了計算方便,如果有多個眾數,我們取平均作為惟一的眾數。Matlab中可用的函數:mode()Python中可用的函數:mode()
2.4.最大值
一個窗口內的最大值。計算公式:Matlab中可用的函數:max()Python中可用的函數:max()2.5.最小值
一個窗口內的最小值。計算公式:Matlab中可用的函數:min()Python中可用的函數:min()
2.6.範圍
一個窗口內最大值與最小值的差。計算公式:Matlab中可用的函數:abs(max()-min())Python中可用的函數:abs(max()-min())2.7.過均值點個數
一個窗口內超過均值點的數據個數。計算公式:,其中是指示函數(indicator function),當括弧里條件成立時取值為1,否則為0。2.8.相關係數
相關係數是指對於兩個向量(比如這兩軸讀數)之間的相關性。一般用在辨別一個方向的運動較多,不是很常用。
計算公式:其中,表示的皮爾遜相關係數,分別表示的標準差。2.9.信號幅值面積
信號幅值面積(Signal Magnitude Area,SMA)指三軸的加速度讀數曲線分別與三個坐標軸圍成的面積之和。一般來說,靜止狀態和運動狀態下該特徵比較明顯。計算公式:其中,t表示一個時間窗口的大小。由於涉及到積分運算,該特徵一般不常用。3.頻域特徵
頻域特徵(frequency domain features)通常被用來發現信號中的周期性信息。例如,跑步和走路都是典型的周期性運動。頻域分析主要用快速傅里葉變換(Fast Fourier Transform,FFT)來計算。Matlab中進行快速傅里葉變換的函數:FFT()由於信號是一維的,對長度為的信號進行傅里葉變換後,得到個變換後的數值。頻域特徵就主要從這個變換後的數值得到。為了方便理解,下面舉例說明。
舉例:原數據有8個:1,2,3,4,5,6,7,8.經過FFT後得到以下8個數:36.0000 + 0.0000i -4.0000 + 9.6569i -4.0000 + 4.0000i -4.0000 + 1.6569i-4.0000 + 0.0000i -4.0000 - 1.6569i -4.0000 - 4.0000i -4.0000 - 9.6569i從這8 個數中可以很明顯地看到,第1個數最大,剩下7個數以第5個數為中心是對稱的。這是傅里葉變換所決定的。所以在實際計算中,除去單獨取第1個數以外,剩下的數可以只取一半。3.1.直流分量
直流分量(Direct Current,DC)是傅里葉變換後的第一個分量,是這些信號的均值,一般要比其他的數大得多。3.2.幅度
幅度就是變換後數據的絕對值。
3.3.功率譜密度
功率譜密度(Power Spectral Density,PSD)用來描述數據在頻域的能量分布。功率譜密度分為幅度統計特徵和形狀統計特徵這兩種特徵。3.3.1 幅度統計特徵設是第個窗口的頻率幅度值,表示窗口數,則幅度統計特徵的幾個量計算方式如下:a.均值mean:b.標準差standard deviation:
c.偏度skewness:
d.峰度kurtosis:
3.3.2 形狀統計特徵
設是第個窗口的頻率幅度值,表示窗口數,,則形狀統計特徵的幾個量計算方式如下:a.均值mean:b.標準差standard deviation:
c.偏度skewness:
【感謝@Tang指正,此處寫錯了下標】d.峰度kurtosis:
我寫的滑動窗口提特徵代碼(Matlab+Python)見這裡:jindongwang/activityrecognition
目前都是使用spatio-temporal features做分類,主流的特徵有Harris3D,HOG3D,
Cuboids 等,然後使用Bag of words方法形成動作特徵字典,最後再用諸如SVM,adaboosting等方法分類。不過現在CNN也有不少做這個的。
可以考慮使用STIP特徵,然後使用Bag of words方法形成動作特徵字典,最後使用一般的分類器(如softmax,SVM)就可以完成常規的行為識別。
本科畢業設計做的視頻中人行為識別。一種分類方式是將其分為兩大類,一大類是基於局部描述子的statistical information的方法,像HOG3D等,其他朋友的回答中也有提到。這一類中目前知道的比較好的是Dense Trajectory(DT)方法,作者在這個方法上下了很大功夫,由DT方法在ICCV,CVPR,IJCV上發表了好幾篇文章(文章名字都很像,都是講DT這一個東西的,只是做了一些改進,像15年的文章裡面考慮了相機抖動、用Fisher encoding代替Bag of feature以取得更好效果等),源碼有提供LEAR - Improved Trajectories Video Description,我在JHMDB數據集上做過實驗,效果還不錯。另一大類是基於pose的行為識別方法,pose可以提取更加細節的信息,先用pose estimation方法估計pose,再從pose中提取各個關節之間的角度、距離等等作為特徵。但受pose estimation準確率的影響,目前這種方法不是很常用,但實驗發現在理想的pose estimation情況下這種方法準確率是很高的(高於DT),所以可能是未來行為識別領域的一個發展趨勢,源碼見http://jhmdb.is.tue.mpg.de/challenge/JHMDB/datasets。另外,在選擇實驗數據集的時候可以參考12年的CVPR Tutorial,裡面詳細介紹了目前的開源數據集以及截止12年各個數據集的分類準確率。
基於深度攝像頭的行為識別比較容易獲取。比如運動軌跡,速度,角度。步頻,步幅。 晃動幅度,姿勢,手勢,高度變化,等等。傳統攝像頭就比較難一些。
幾年前做個的一個小東西,主要對交通路口的行人行為進行識別,精度還可以
識別特種提取應該分為整體和局部難點是把目標從背景中分離出來,路口的行人太多,另外過往車輛造成的干擾太大,使用光流的話,得到的目標不幹凈,使用幀差又會丟掉一些細節信息,最後想了很多辦法;目標提取後,其實就簡單多了,先獲取目標的輪廓信息,作為整體特徵然後獲取目標的SURF特徵做局部特徵整體特徵和局部特徵是有對應關係的,可以理解為圖像的高低頻信號(細節結構),都很重要其他的就是採樣訓練mark,去過計算所,聽過陳益強老師的報告。
我寫論文想引用你的總結 求出處。。。。。
在計算機視覺領域的行為識別,卷積神經網路CNNs應該現在效果會不錯吧,自動特徵提取
行為識別達到何種程度?
推薦閱讀:
※OpenCV已經將圖像處理(識別)的演算法寫成函數了,那我們還有必要去學習這些演算法不?
※用演算法怎樣識別圖片上的植物?
※能否搜索某視頻的其中一幀畫面?或者通過一張圖片搜索此圖來自哪個視頻?
※Facebook 的人工智慧實驗室 (FAIR) 有哪些厲害的大牛和技術積累?
※先進的圖像識別怎樣改變 AV 產業?