1. 程式人生 > >【論文筆記】視訊物體檢測(VID)系列 NoScope:1000x的視訊檢索加速演算法

【論文筆記】視訊物體檢測(VID)系列 NoScope:1000x的視訊檢索加速演算法

計算機視覺的進展,特別是近期深度神經網路的進展,使得在不斷增長的視訊資料中進行檢索成為可能。但是,基於神經網路去做大規模視訊檢索,直接的問題就是計算量激增。比如現在最快的物體檢測器能達到1~2.5x real time的效率(30~80fps),前提是買一個$4000的GPU。

我們來算一筆賬,英偉達的K80 GPU,售價是$4000左右,處理視訊的速度為50fps,那麼跑1000h的視訊(e.g., 25fps)就需要500h,P100 GPU更快一點,能達到80fps,也更貴$4600,跑1000h的視訊需要312.5h。300~500h如果租雲主機去處理的話($0.7~0.9/h)就是$300左右。

而現在影象和視訊的感測器那麼便宜,一個640*480的VGA CMOS感測器只要不到$0.65,這就造成了資料獲取和資料處理開銷的極大的不平衡,將近3個數量級的差異了。說明現在這個時代做視訊相關的演算法已經不是窮人可以玩的起的了。

所以斯坦福大學提出了NoScope,就是為了減小基於NN的video query的計算量而設計的系統,它能夠達到1000x的視訊檢索加速。

NoScope支援對視訊檢索一種特定物體是否存在,也就是單種物體的二值分類器。其結構主要包含3個相互集聯的module,如下圖。

  1. difference detector主要負責監測幀間的差異,如果差異很小,則無需再做檢測,之前用之前的結果即可。如果差異大,則進入第2步;
  2. 輸入到第二層級聯,specialized model。這是一個專門針對目標物體和目標視訊訓練的分類器,通過犧牲泛化能力達到在特定場景下對特定物體的識別效果接近於reference model(見下文),非常小而快速,如果specialized model對其分類的預測結果很自信,則輸出,如果不自信,則進入第3步;
  3. 輸入到第三層級聯,也就是reference model,這個模型是一個state-of-the-art的物體檢測器,檢測效果槓槓的,就是速度慢,所以只有前兩個條件不滿足的情況下才用它。

這裡寫圖片描述

所以發現了吧,NoScope通過這種級聯的方式,在前兩級處理了大量的視訊幀,像difference detector速率可以達到100k fps,specialized model可以達到27k fps。而只有在前兩級都不靠譜的情況下才會使用最耗時的reference model(30~80 fps),這就是NoScope能夠達到1000x的視訊檢索加速的原因。而傳統的方法是直接在每幀使用reference model,這個速率一比較就立分高下了。

NoScope的整個流程是這樣的。給定一個待檢索視訊和目標物體,以及一個事先訓好的reference model(如YOLOv2),NoScope首先進入訓練階段:它會自動訓練difference detector和specialized model,並查詢最佳引數;然後再進行inference,利用事先確定好的引數去跑上圖的pipeline。所以真是一條龍的服務啊,你只要按照一貫的方法訓練一個精度為主的物體檢測器,就可以直接拿到這個框架裡達到1000x的加速了。

有幾個問題需要提醒:NoScope是針對單種物體的二值分類器,為什麼沒有做檢測是因為檢測的開銷比分類要大得多,為什麼做單種物體是因為保證精度不讓specialized model”分心”。

演算法細節

1. Model Specialization

針對特定場景特定物體訓練的輕量級CNN模型,層數和Channel都降到最低。這是犧牲泛化能力以達到效率的提升。在訓練的時候用精度很高的reference model跑一遍目標視訊的一小段時間,得到的標籤作為gt去訓練specialized model。這個specialized model是一組類似於AlexNet但是比它還要淺的網路,一組的意思是訓練了多個,改變了不同的網路引數如卷積層數(2,4 or 6),卷積層filter個數(32 or 64),全連線層neurons個數(32,64,128 or 256)。在後面Model Search的部分會提到NoScope會進行自動的模型搜尋,為每個視訊和query找到最適合的model。
這裡寫圖片描述

2. Difference Detection

NoScope的difference detector提供了兩個版本,一個是當前幀和reference image整圖求特徵(i.e.,HOG, SIFT, ColorHistogram, RawImage)然後算最小均方差,另一個是blocked版本,即把圖分成多個block,然後在block裡算最小均方差,然後通過訓練一個邏輯迴歸分類器來weight每個block對於最終判斷兩張圖片的差異的重要性。可以看出blocked的版本計算量更大一些。

另外關於reference image也有兩個選擇,一種是給定一個reference圖,其他幀都和這個圖做比較;另一種是給定一個t_diff值,表示每一幀都和其前t_diff時刻的那一幀做比較。具體採用哪個difference model是video-dependent的。比如一個大部分時間是沒人的人行道,它很容易就能找到一個空的人行道作為reference image,這樣檢測器可以很容易地通過和這張圖片的對比把所有空的幀skip掉。相反,對於一個公園的場景來說,總是會存在有移動物體,比如人們躺在草地上之類的,但是這些物體如果移動得非常緩慢,比如和1s前相比也還是差不太多,那麼通過一個earlier frame的reference image就比較合適。
這裡寫圖片描述

模型引數搜尋首先需要指定兩個目標精度值,FP*和FN*,然後模型的搜尋就是在滿足false positive rate< FP*且false negative rate< FN*的情況下通過grid search不同的引數(e.g., difference detector threshold, specialized model threshold..)來最大化E,E在這裡是inference時所需時間的倒數,即目標是達到所需時間最短。

NoScope發現,自動搜尋來為每個視訊個性化地配置cascade的引數對於效能是非常重要的。

演算法侷限

這個部分一定要特別拎出來說,不好好看論文是會吃虧的,因為NoScope的侷限性還是比較大的。

  1. 只適用於fixed-angle的視訊。NoScope是針對監控視訊做的物體分類框架,所以呢,目前的difference detector是針對固定視角的相機捕獲到的視訊流去做幀間差異檢測的,同樣specialized model也是針對固定視角的。
  2. 二分類的任務。前文也提到了,NoScope是針對一種物體的二分類器。
  3. 輸入是batch of images. NoScope為了效率的提升,是將一個batch的視訊幀作為輸入的。這對於現有的視訊是可以接受的,但對於實時的那種視訊,則會存在一定的延時。

總的來說,NoScope做了很多的預設條件,才有了1000x的視訊檢索加速。

實驗

這裡寫圖片描述

這裡寫圖片描述