論文筆記 SimpleNet A Simple Network for Image Anomaly Detection and Localization

mostimali發表於2024-03-28

背景

對於工業場景上的異常檢測和定位任務, 由於零件的異常情況具有多樣性和隨機性, 所以很難用有監督的方式來解決; 目前用的最多的是用無監督的方式, 在訓練過程中只使用正常樣本進行訓練, 目前無監督解決異常檢測任務的三個趨勢是基於重建的方法, 基於合成的方法以及基於嵌入的方法;

  1. 基於重建的方法: 對於只使用正常樣本訓練的深度網路; 我們假設他無法對一個異常樣本進行良好的重建其異常區域; 基於這個假設, 我們逐畫素的重建誤差作為用於異常定位的異常分數; 然後這個假設並不是一直成立, 有時深度網路會有良好的"泛化"能力, 從而也可以很好地重建異常區域, 從而導致誤檢;
  2. 基於合成的方法: 透過在正常樣本上合成異常來進行訓練, 從而找出異常檢測的決策邊界; 然而人工合成的異常影像不夠逼真, 來自合成的樣本的特徵可能會距離正常樣本特徵很遠, 從而產生具有鬆散邊界的正常特徵空間;
  3. 基於嵌入的方法: 這是目前效能最好的方法, 透過使用ImageNet預訓練的卷積網路來提取正常樣本的特徵; 然後採用多變數高斯分佈, 歸一化流, 記憶庫等統計演算法來嵌入正常特徵分佈; 透過將輸入特徵與學習的分佈或者記憶的特徵進行比較來檢測異常情況; 先不論ImageNet和工業影像之間分佈的不同從而造成的領域偏差; 統計演算法的高計算複雜性和高記憶體消耗不太容易應用到現實使用;

模型介紹

  1. SimpleNet結合了基於合成的方法和基於嵌入的方法;
  2. 首先, SimpleNet並不直接使用預處理的特徵, 而是使用一個特徵介面卡來產生面向目標的特徵, 這可以減小領域偏差
  3. 比起在影像上直接合成異常, SimpleNet提出透過在特徵空間對正常特徵施加高斯噪聲來生成異常特徵, 透過控制噪聲的尺度便可以訓練出一個緊密結合的正常特徵空間
  4. 最後SimpleNet透過訓練一個簡單的判別器來簡化異常檢測程式, 這比基於嵌入的方法中複雜的統計計算效率要高得多;
  5. 總的來說, SimpleNet透過一個預訓練好的主幹backbone來提取正常特徵, 然後利用特徵介面卡把特徵轉移到目標域; 然後向適應的特徵中加入高斯噪聲來生成異常特徵; 用正常特徵和異常特徵訓練判別器;

1

網路細節

特徵提取器

  1. SimpleNet使用在ImageNet上預訓練的wideresnet50模型來提取特徵, 此後該主幹會一直凍結, 不再進行訓練; 並且在訓練SimpleNet時會挑選wideresnet50模型中的某幾層抽取特徵, 程式碼中是layer2和layer3;
  2. 使用聚合函式fagg聚合鄰域得到區域性特徵, 程式碼是使用了自適應平均池化來實現的; 為了組合來自不同層次的特徵, 把所有特徵圖調整為(H, W)的大小, 然後簡單地按照通道連線所有特徵圖;

特徵介面卡

SimpleNet使用的是線性層(Projection)對映, 將提取處理的特徵進行線性對映, 是特徵轉移到目標域中; 該特徵介面卡可以由簡單的神經塊組成,例如全連線層或多層感知機(MLP)。作者實驗發現,單個全連線層可以產生良好的效能。

異常生成器

SimpleNet在正常特徵上新增高斯噪聲來生成異常特徵

異常鑑別器

鑑別器Discriminator是一個正態性評分器, 直接評估每個位置的正態性分數; 訓練鑑別器時會把正常特徵和合成的異常特徵都送去鑑別器訓練, 正常的輸出正, 異常的輸出負; 而且鑑別器也很簡單嗎, 使用一個雙層MLP結構即可;

損失函式

先設計一個簡單的截斷L1損失函式: l = max(0, th+ - D(q+)) + max(0, th- + D(q-))
th+和th-是防止過擬合的截斷項, 預設設定為0.5和-0.5; D(q+)和D(q+)分別鑑別器對正常特徵和異常特徵得出的分數;
訓練目標是最小化所有正常樣本的損失函式的平均值; 簡單來說,這個損失函式鼓勵判別器對正常特徵給出高分,對異常特徵給出低分。截斷項則用來限制判別器輸出,避免對某一類特徵過度自信。

相關文章