異常行爲檢測閱讀筆記:Real-world Anomaly Detection in Surveillance Videos

前言

這篇仍然是以前寫的,CVPR2018關於異常行爲檢測的文章。這篇文章比較特殊,因爲它打破了以往異常行爲檢測默認的無監督套路,對異常行爲進行了人爲定義,即規定了幾個需要檢測的異常行爲,而且都是在日常生活中比較常見的,並給出了一個他們自己構建的真實監控場景下的異常行爲檢測數據庫。這個數據庫明確規定了一些需要檢測出來的異常行爲,而且其構建方法也比較討巧,即僅僅告知某段視頻中存在某種異常,而不標註異常發生的具體位置,即這個數據庫在無監督數據庫基礎上稍稍加入了一些監督信息,成爲一個弱監督數據庫。但是有人要問了,那數據庫中沒有涵蓋的異常行爲怎麼辦,算法無法檢測更多其他的異常行爲?這裏說下我的想法:對一些公共場所,比如車站,對類似於鬥毆,搶劫,暴恐這樣的異常行爲更爲看重,而不是很在意一些無關緊要的異常(比如車站裏躺在地上休息,或者因趕車而奔跑),在這種情況下這個數據庫就非常合適,所以在人工智能還處於比較弱智階段的當下,做一些取捨以換取更好效果的做法是對的。

Motivation

本文關於motivation的講法個人覺得還是挺有道理的。作者首先質疑一直以來業界關於異常行爲的定義,即背離正常行爲模式的都是異常:首先,作者認爲收集到全部的正常行爲數據是幾乎不可能的;其次,現實中某些行爲在某些場景下是異常,但在另一些場景下就會變成正常(比如在公園裏和在馬路上騎摩托);還有就是正常與異常的界限很模糊,異常的判定需要我們合理掌握正常的尺度。這三點是異常行爲檢測一直以來需要解決的問題。作者認爲,有時候加入一些異常信息讓模型作參考對模型理解異常行爲是很有幫助的,這一點我非常認同,畢竟一個孩子,你從小隻告訴他什麼是對的,卻不告訴他什麼是對的,他怎麼可能正確的明辨是非?正確的做法是要時不時給他一點反面例子來幫助他理解,這樣他對是非的分辨就會非常清晰。從算法層面講,這一點是非常難實現的,神經網絡還沒這麼高端,對小樣本的學習還不夠智能,但我覺得貌似是一個非常值得研究的點。
回到這篇文章上,我認爲作者的設想是對的,但是落實到做法上卻不夠給力,他用MIL的方式,相當於給異常樣本打上標籤,然後做二分類(這裏用的是迴歸,但本質上可以認爲就是有監督二分類),效果上並不是我們想的用反面例子引導,而是過多使用了反面例子(不知這裏表達清楚沒,寫的比較快)。下面介紹作者的做法。

方法與網絡框架:Deep MIL Ranking Model

在正式開始之前,有必要介紹一下多示例學習(MIL)方面的知識,以下內容參考自這個鏈接https://blog.csdn.net/loadstar_kun/article/details/22849247 。
比如:我們想訓練一個分類器來劃分敏感詞彙,那我們應該如何做?

  1. 尋找一個正規網站,採集詞彙,構成負包,這樣可以保證尋找到的都是正常詞彙
  2. 尋找一個帶有敏感詞彙的網站,採集詞彙,構成正包,這樣可以保證包中既有敏感詞彙,又有正常詞彙
  3. 使用迴歸網絡,對兩個包中所有樣本進行打分,從正負包中各選得分最高者,作爲正例和負例,然後最大化二者得分間隔,不斷迭代…

搞懂了這一點,本文的方法就呼之欲出了,因爲本文正是使用了多示例學習的方法 ,下面詳述具體流程,在此之前,放主網絡框圖:

1) 將每一個訓練視頻都分成數量相等的segments,然後分別構成正例包和負例包,以備訓練。
2) 使用C3D網絡對每段segment提取4096維的時空特徵,之後的多示例學習工作就基於這個feature來做
  1. 使用一個神經網絡(這裏用了MLP)來對每一個segments打分,然後從正例包中挑一個得分最大的segments(潛在異常樣本),同樣從負例包中挑一個得分最大的(非異常樣本,而且是個難例,即hard instance,有利於優化分界面),用它倆來訓練MLP的模型參數,採用hinge-loss,訓練的效果就是模型對異常樣本輸出高的分,對正常樣本輸出低得分。
這裏單獨介紹一下損失函數,上文說過,主loss採用hinge-loss,如下式所示,這裏f()就代表整個網絡的輸出,即得分,這個loss的作用就是拉大正例和負例的得分差距,自己手動模擬一下就明白了。
4) 然後,作者爲了保證效果,又加了兩個約束。第一個是平滑約束,因爲每個包中的segments都是來自於同一個視頻,所以他們之間的得分應該是平滑變化的,具體做法就是讓相鄰兩個segments的得分差的平方值足夠小;第二個是稀疏約束,因爲正例包中只有少數異常樣本,其餘大多數都是非異常,而我們的優化有可能導致正例包中所有樣本都趨向於高的分,所以最好用一個loss單獨約束其整體得分。這兩個loss也比較平凡易懂,如下式:
所以這三個loss加一塊就是這樣:
再加上正則化項,就得到最終的目標函數:

實驗

數據集部分大家自己去網站上看看,UCF Crime,貌似訪問不上了?畢竟是自己搞的網站,沒法像企業網站一樣穩定,大家理解就好,下載渠道不只官網,kaggle上貌似也有。
實驗部分,首先,與SOTA比較,效果還可以,如下圖和下表所示:

下面是部分樣例效果,看看就好:
再下面是訓練過程,看看就好:

結束語

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章