# Anomaly Detection in Video via Self-Supervised and Multi-Task Learning ###### tags: `2022Q2技術研討`, `detection` [paper] [Anomaly Detection in Video via Self-Supervised and Multi-Task Learning](https://arxiv.org/pdf/2011.07491.pdf) [GitHub] [連結](https://github.com/lilygeorgescu/AED-SSMTL) * 沒有公開 release code,但可以寫信去要,純學術用途的樣子~~ ## Video Anomaly Detection 影片異常檢測基本上是==非監督學習==的 task,<font color=#20639B>目標在於發現影片中異常的模式或動作</font>,這些異常定義是不頻繁的或者說是稀有事件。==異常通常是缺乏標記的==,自然也缺乏標記數據來訓練 * 異常包括有變化多樣的少有的異常事情和沒見過的物體等 資料集大概可以分為三種: * Supervised:訓練資料集有經過標注,分為正常與異常 * Clean:所有訓練資料集都是正常的,測試集則包含正常與異常 * Unsupervised:訓練資料集沒有經過標注,包含正常與異常 ### Compare with ML outlier detection * ML 訓練的資料集特徵已經經過特徵萃取 -> 特徵向量,而 VAD 是在 raw data 中去尋找異常 * VAD 針對的是影片資料,不單單像 ML 只要解決 outlier 的識別,<font color=#20639B>也要處理時間與空間訊息</font> * 因此 VAD 包括多種任務:動作識別、動作相似度、場景分類、物體識別、視頻語義分割、人的姿態評估、人的行為識別等~~ ### Common Datasets * UCSD: 一個主體為行人的數據集,異常包括有異常物體的出現:例如騎自行車者和輪椅、車等。還有行人走在一些並不是常見的地方也會被認為是異常 ![](https://i.imgur.com/GdeZNe5.png) * CUHK Avenue: 學校校園的視頻,其中檢測的主要是行人的異常動作、錯誤移動方向、異常物體的出現等 ![](https://i.imgur.com/O50DpZI.png) * Shanghai Tech: 上海街道實拍的影像 ![](https://i.imgur.com/jnvF378.png) :::success 但 VAD 有一個小優點,也就是==背景幾乎是不變動的== (只要 CCTV 角度不變) ::: ## Abstract 2021 CVPR 的 paper! 由 University of Bucharest (布加勒斯特大學,羅馬尼亞)、MBZ University of Artificial Intelligence (人工智能大學,阿拉伯聯合大公國)、University of Central Florida (中佛羅里達大學,美國) 聯合發表的論文~~ Anomaly detection in video 在 CV 領域中是一項很困難的技術,==主要是因為 lack of anomalous events at training time==,所以無法使用一般的監督式學習進行訓練。在這篇 paper 當中,<font color=#20639B>提出了自監督式架構 (self-supervised) + 多任務學習 (multi-task learning)</font> 的結合 最後本篇的實驗結果屌打過去所有的 video anomaly detection in <font color=#8600FF>Avenue</font>, <font color=#8600FF>ShanghaiTech</font> and <font color=#8600FF>UCSD Ped2</font> datasets. :pushpin: 自監督學習就是: 我們手上有一堆沒有 label 的資料,想辦法用資料本身做出 label,而後用這些 label 訓練一個監督式模型 ### Why Multi-task Learning 論文中有提到一個很有趣的點,==為何要用多任務學習去做==,而不只學習一個單一的 task * 過去有些方法在做<font color=#20639B>預測影片的物件的下一步</font>或下幾幀 (frame) 會做出什麼動作,然後<font color=#20639B>再跟真實答案去做比對</font>,如果差異很大就代表是異常行為,可以被定義為 anomaly label :::info :question: 但這樣可能會有什麼問題 :question: * 假設有一輛停在路邊的汽車,model 可能會預測他下一步會往前,但事實上他是靜止不動的,但並不代表異常 * 也有可能是 model 預測他靜止,但他之後開走了被定義為異常 ::: ## Methods ![](https://i.imgur.com/LfCag7d.png) * **Object detection model of Yolov3** * 抓出影片中 object 的 bounding box,再依時間排列,稱為 object-centric temporal sequence * (i−t, ..., i−1, i, i+1, ...., i+t) * 直接拿 MS COCO 的 pre-trained model,沒有再另外 train <br> * **Multi-task learning** * ==Task1: Arrow of time== * <font color=#20639B>識別正向與反向的 moving objects</font>,預測 object-centric temporal sequence 是 forward or backward,偵測異常方向運動物體,比如單行車道中逆向的車輛 * <font color=#FF8000>Input</font> 五幀正反順序的 object * (t-2, t-1, t, t+1, t+2) & (t+2, t+1, t, t-1, t-2) * <font color=#FF8000>label</font> 正向 (1, 0) or 反向 (0, 1) * Loss function (cross-entropy) * ![](https://i.imgur.com/Y9astn3.png =480x120) * ==Task2: Motion irregularity== * <font color=#20639B>識別異常的行為/動作</font>,預測 object-centric temporal sequence 是否連續,偵測快速移動的物體,例如學校走廊內不允許奔跑,行走會被監測為相鄰幀 (正常),奔跑會被檢測為間隔幀 (異常) * <font color=#FF8000>Input</font> 五幀正常順序 & 五幀隨機間隔的正向順序 (random from 1, 2, 3, 4) * (t-2, t-1, t, t+1, t+2) & (t-3, t-1, t, t+3, t+5) * <font color=#FF8000>label</font> 相鄰幀 (1, 0) or 間隔幀 (0, 1) * Loss function (cross-entropy) * ![](https://i.imgur.com/QfjPBIS.png =480x120) * ==Task3: Middle bounding box prediction== * <font color=#20639B>預測中間 (空缺) 的 bounding box 點位</font>,利用前兩幀與後兩幀重構當前幀的 bounding box,正常類別得到較小的重構誤差,異常類別得到較大的重構誤差 * <font color=#FF8000>Input</font> 前後兩幀對應的 bounding box * (t-2, t-1, t+1, t+2) 的 bbox * <font color=#FF8000>label</font> 空缺那格的 bbox * Loss function (L1 loss) * ![](https://i.imgur.com/woPW7uB.png =480x120) * ==Task4: Model distillation== * 用 Yolov3 & Resnet50 (teacher model) 去 distillation 3D CNN (student model),用意就是<font color=#20639B>讓 3D CNN 有更好的特徵提取能力</font> * 學 Yolov3 的 class probability predict * 學 Resnet50 的 pre-softmax features * <font color=#FF8000>Input</font> 當前幀對應的 bounding box * t 的 bbox * <font color=#FF8000>label</font> ResNet50 softmax 前一層輸出 (1000維) + Yolov3 80 個類別的 one-hot 編碼 * Loss function (L1 loss) * ![](https://i.imgur.com/MXbFxnu.png =480x160) <br> * **3D Convolution Neural Network** * 3D CNN (filter 多一個維度) 是==透過這 4 種 task 所 train 出來的==,但為了應付這種連續的 3 維影像,作者認為有可能會<font color=#20639B>需要更寬或更深的網路</font>才能夠容納這種更複雜的問題,所以一共做了四種實驗 (shallow+narrow / shallow+wide / deep+narrow / deep+wide) ![](https://i.imgur.com/RlBYRXv.png =480x400) * Task 3 經過 3D CNN 後,多做一層 upsample 以提取更多的空間特徵,再進 loss <br> * **Joint loss function** * 最後會有一個==聯合的 loss function==,也就是加總這四個 loss。通過實驗發現,LT4 相較於其他損失,數值較大,所以為了避免影響最終結果,增加權重 𝛌 平衡損失 * ![](https://i.imgur.com/zFpBZhr.png =360x50) ## Inference 總結一下最後的過程,以及如何進行 inference 1. 使用 Yolov3 去 detect each frame i 的 objects 2. crop 每一個 object 再依順序組成 object-centric sequence (i−t, ..., i−1, i, i+1, ...., i+t) 3. 組成每一個 task 的 input,依序會得到 Y(T1), Y(T2), Y(T3), Y(T4) * Y3 & Y4 都會拿來跟 Yolov3 預測出的結果計算誤差 4. 最後加總四個分數做平均,即可得到 anomaly score ![](https://i.imgur.com/DQSK6nD.png =480x120) :::info :question: inference 時怎麼會得到未來 i+1 / i+2 的 frame:question: ::: ## Experiments 拿 Avenue, ShanghaiTech and UCSD Ped2 這三種 datasets 進行實驗~ <font color=#20639B>training data 只有 normal 的狀態,但 testing data 包含 normal & abnormal</font> 實驗中 t = 3,所以 object-centric sequence = 7 * 64 * 64 * 3 ![](https://i.imgur.com/iKmN4t3.png) 上圖列出了從 2016 年一直到 2020 各大研究的實驗結果~~ ==Frame level of AUC scores== * Results on Avenue: 過去只有兩篇達到 90% 以上,算出來的 Anomaly score 與 ground truth 幾乎高度正相關 ![](https://i.imgur.com/liAkqRQ.png =640x240) * Results on ShanghaiTech: 屌打過去所有實驗~ 同樣 Anomaly score 與 ground truth 高度正相關 ![](https://i.imgur.com/LSpol6f.png =640x240) * Results on UCSD Ped2: 最知名的 VDA 資料及之一,幾乎所有研究都會拿它來進行評估,本篇仍有最好的成績 另外也有針對各個 task 的細項評估~ ![](https://i.imgur.com/G2oMRPa.png)