1. 程式人生 > >異常事件檢測研究之路(一 )

異常事件檢測研究之路(一 )

        課題定為異常事件檢測以來,做了很多小實驗,但是一直感覺自己並沒有碰觸到核心的部分,最近看了一篇很有收穫的文章,是第一篇將深度學習演算法引入異常事件檢測中,來自文作者Dan Xu 等,文章名字為‘Learning Deep Representations of  Appearance and Motion for Anomalous Event Detection ’,看了這篇文章,先介紹一下文章的每一部分內容。

一、摘要

       此文章是第一篇將深度學習特徵引入異常檢測中,提出了一個AMDN (Appearance and Motion DeepNet )網路,結合運動目標的外觀和運動資訊,去自動學習特徵表示,並且提出了新穎的雙融合策略,包含傳統的早期融合和後期融合策略,文章大致是引入了stacked denoising autoencoders (級聯的降噪自編碼),對輸出的特徵採用多層one-class SVM

 (一分類svm)去進行預測每個輸入是異常的得分。

二、介紹

            

這一部分大概介紹了傳統的檢測方法,以及深度學習最近的引入,上圖為該文章的總體思路。

2.1.1 Denoising Autoencoders (降噪自編碼)

      這一部分介紹了降噪自編碼的原理,降噪自編碼(DAE )是一個有隱層的神經網路,它是通過將原始資料部分去破壞,通過破壞的資料x去重構原始資料,一般對原始資料破壞的方式有給原始資料加入高斯噪聲、椒鹽噪聲等;一般降噪自編碼可以分為兩個部分:編碼和解碼,它們之間有一個單一共享的隱層。這兩個部分都去學習各自的對映函式,w表示權重,b表示偏重,編碼和解碼都有各自的變數因子,每一層的輸出表達式為s

(Wxi+ b),其中s指的是對映函式比如常用sigmoid函式, 採用了編碼/解碼結構,這個網路就可以自動的學習到能代表輸入比較穩定的特徵。

         降噪自編碼就是在學習這四個引數(W;W0;b;b0 ,使得下式目標函式達到最優,目標函式為:

                                                   

        上式表示式第一部分代表了重構的誤差, 同時引入了權重懲罰去作正則項,引數拉姆達是去調整兩者的重要程度,在隱含層引入稀疏約束去發現代表輸入資料最有意義的特徵,我們設定了目標稀疏程度, 也定義了所有訓練資料第j列的平均啟用值,另外一個懲罰項為交叉熵,可以將交叉熵加入上式去學到一個更加稀疏的表示,上式公式有非凸目標函式,並且採用梯度下降法可以求得區域性最優。

2.1.2 AMDN Structure
上述提出的AMDN結構是由三個SDAE 組成的,每一個SDAE 對應一個低階的輸入,這三個SDAE分別學到了外觀特徵、運動特徵以及兩者聯合的特徵,每一個降噪自編碼都是由兩部分組成:編碼和解碼。在編碼的第一層使用一個過完備的過濾器去捕獲輸入資料的典型特徵。這樣在下一層隱層中神經元的個數就會減少一半。解碼過程跟編碼過程有對稱的結構,大致描述一下3種降噪自編碼特徵提取方式。

外觀特徵:這一級的特徵為從原始的影象畫素特徵中學習能代表外觀的特徵,為了去捕捉外觀的貢獻,採用多尺度的滑動窗去提取稠密的影象塊,滑動步長為d,最後將影象塊統一為大小wa× ha× ca ,前兩個引數為影象塊的寬和長,最後一個引數為影象的通道,比如灰度圖通道為1,將這些歸一之後的影象用於訓練,所有的塊歸一化到【0,1】,在編碼過程使用用4個編碼層,第一層的神經元個數為na× wa× ha× ca ,va>  為放大因子目的為構造一個完備的過濾器。

運動特徵:通過光流計算目標的運動資訊,採用固定大小wm× hm× cm (cm=2是指光流沿x、y軸的幅值),通過稠密的光流塊去學習運動資訊,同上一個部分特徵也是歸一化到【0,1】,每一個通道使用4層編碼層第一層的神經元個數為nm× wm× hm× cm 。

外觀和運動的聯合表示:上述提到編碼模型是分別學習外觀和運動資訊,為了考慮兩者之間的聯絡,提出了一種方法去求綜合兩者的聯合資訊,通過灰度圖的畫素塊和對應的光流塊去學習pixel-level early fusion(早期融合) 特徵。

2.1.3 AMDN Training
通過兩步去訓練AMDN :預訓練和微調。利用稀疏約束的方法去學習每一個降噪自編碼,給輸入資料加入噪聲去學習它的對映函式,在下一層中通過沒有加入噪聲的輸入去學習對映函式。採用一層一層的預訓練,降噪自編碼可以被堆積為多層的前饋深度學習網路。通過預訓練每一層可以初始化每一層的引數,然後通過對整個網路進行微調去調整每部分的引數。

    微調將每一層的SDAE都看成是獨立的模型,給定訓練集包括N個訓練資料(這N箇中包含外觀資訊、運動資訊以及聯合資訊),後項傳播去微調整個網路。上述目標函式通過公式(2)去微調整個SDAE整個層。

                                     

上述的拉姆達是使用者自定義的引數,為了加速訓練過程中的收斂性,採用方法SGD,將訓練資料分為小塊計算。 

通過微調整個網路,就學到了能代表異常事件的特徵。理論上,SDAE每一層的輸出都可以作為特徵表示,本文的工作選擇隱藏層去得到緊緻的表示,每一層都有引數w、b,通過對映函式可以得出當前層的輸出,並且作為下一層的輸入,直到隱層。

2.2 Abnormal Event Detection with Deep Representations

     將異常事件檢測看為基於塊的二分類問題,給定一個測試幀,通過滑動視窗和固定步長可以得到M*N個塊,將每一塊分為是異常的還是正常的。特別的,對於檢測塊計算出三個異常分值,利用一分類SVM模型去計算特徵表示,三個分值通過線性組合的方式以表示最終的異常分值,先採用背景減法只提取出運動目標,可以加快計算速度。

2.2.1 One-class SVM Modeling      

    一分類的SVM在邊緣檢測中被廣泛的應用,大致思路是在特徵空間中學習一個超平面並將訓練資料對映到超平面上,超平面上點的分佈的情況與實際的對應,以此可以學到訓練資料的邊沿,最終,給定測試資料,在超平面之外的則為異常資料,一類svm的目標方程為:

                                     

   w是學到的權重向量,p是偏重。F(·)為特徵對映函式,可以將特徵向量對映到高維特徵空間中。引數v調節超平面在特徵空間上的分佈,通過引入核函式上述目標函式可以變為相應的標準對偶形式,在實驗中選擇了徑向基核函式,通過上式給出最優的引數值,通過估計下式可以計算出第幾個降噪自編碼的輸出分數。              

2.2.2 Late Fusion for Anomaly Detection
   無監督的後期融合方法去自動學習權重向量,權重學習策略為下式:

                                     

      其中sk=[s1,s2,...sk]是訓練資料的矩陣。具體每個參量的意思在文章中有介紹,為了求得上式,首先得到矩陣w和前d個特徵向量對應的向量,組成協方差矩陣則阿爾法  可以由下式獲得:

                          

            對於每一個子塊t,通過計算相關的異常分數,將該結果與一個閾值做比較判斷是否為異常事件。

3 Experimental Results 

    上述的方法是在matlab、c++和caffe框架下實現的,光流法的程式是用c++寫的,對於一分類的svm,利用libsvm實現,資料庫用了UCSD資料庫和Train資料庫。       
    量化評價:對於UCSD資料庫,對於外觀學習,利用三個不同尺度15*15,18*18,20*20分別去在原始視訊上提取影象塊,這樣會產生5千萬個影象塊,隨機取樣1千萬個並且歸一化到相同大小(比如15*15大小)去訓練。對於運動學習,用影象塊大小為15*15大小去取樣,隨機取樣6百萬個子塊。在測試階段,利用15*15大小的滑動視窗塊步長為15去取樣測試視訊。表觀層和運動層中第一層網路的神經元數量設為1024,聯合模組的神經元數目設為2048,接下來編碼層的神經元數目為1024(2048)-512(1024)-256(512)-128(256),解碼過程為對稱結構,對於DAE的預訓練階段,以變數為0.0003對輸入資料加入高斯噪聲,網路採用動量引數為0.9的隨機梯度下降法去訓練。接下來作者介紹了一些實驗中各部分的引數。 

4 Conclusions
    基於深度學習提出了一種新穎的無監督的對於異常事件的檢測方法,該方法是基於多個降噪自編碼去學習場景的表觀和運動資訊,並且對學到的特徵採用雙融合機制,
在兩個資料集上證明了方法的有效性,未來的工作包括探索其它網路結構、對SDAE網路採用多通道資料融合,對於異構的場景未來的工作可以採取多工融合的方法。

以上翻譯只是代表個人,有很多不準備的地方,也有很多不理解的地方,如果大家對文章感興趣還是建議去看作者的原文。

以下是自己的個人疑問,查了一些資料,但是還是沒有明白。

大致列出幾個不懂的地方:1、文章中提到對於輸入特徵都歸一化到[0,1],是如何歸一化的呢,比如對於影象塊因為影象中畫素的大小是[0,255],是將255對映為1,0為0,這樣就將畫素值對映到了[0,1]之間。還是採用對當前塊中的畫素值找到max和min,將max對映為1,將Min對映為0,這裡歸一化這裡不是很明白,同理對光流值那裡的歸一化是採取什麼方式。

2、對於表觀資訊和運動資訊中的降噪自編碼,給出每一層節點個數的順序為1024-512-256-128,為什麼第一層是1024個呢?我看文章是採用15*15的視窗進行滑動的,如果每一個點的畫素值對應一個輸入神經元,那也只有225個神經元 ,那麼輸入1024個神經元又代表什麼呢?而對於光流圖,每一個點的光流值是有兩個值的,即x方向和y方向的光流值,又是怎麼處理的呢。

3、文章中提到是採用了三種大小的滑動窗去掃描影象的,分別是大小15*15,18*18,20*20,文章中提到了“warped into the same size
,這個意思是指將這三個尺度都歸一化到同樣大小嗎(15*15)。

4、文章提出了雙融合的概念,分別是“traditional early fusion ”和“late fusion strategies ”,對這兩種融合方式理解不是很清楚,對於早期融合,就是說把運動特徵和光流特徵放在一起,怎麼放的呢,前一半運動資訊,後一半光流特徵嗎?

而對於後期融合,就是說在檢測階段對提到的三種特徵分別進入one-class SVM 訓練好的模型中,則可以得到每一種情況下預測的標籤結果,沒有看懂文章中給的融合策略。