深度學習論文筆記(異常檢測)——f-AnoGAN: Fast unsupervised anomaly detection with generative adversarial networks

聲明

出於好奇,本人只是閱讀過該篇文章,並沒有將該論文應用於實際生活,故不能在實踐上給予各位一些建議,萬分抱歉!

如果諸位在看我寫過的文章時發現了錯誤,請務必告訴本人,不勝感激!

主要工作

提出了一種Encoder,可以快速將圖片映射到隱空間中的某個點,接着利用WGAN進行異常檢測。

深度學習論文筆記(異常檢測)—— Generative Adversarial Networks to Guide Marker Discovery一文中,我總結了AnoGAN,其通過不斷迭代優化,在隱空間中尋找某個點,該點生成的圖片與測試圖片最爲相近,接着利用DCGAN進行異常檢測,由於需要迭代優化,勢必會耗費大量時間,而f-AnoGAN通過引入Encoder,解決了這個問題。

代碼地址


算法介紹

有監督異常檢測存在的問題

  1. 需要耗費大量人力與時間對數據進行標註,在醫療領域,數據標註的代價更高,並且數據量比較少,而有監督學習往往需要耗費大量數據。
  2. 有監督學習只能處理訓練樣例中存在的情況。

針對有監督的問題,論文提出了使用無監督的GAN進行醫療數據的異常檢測,其具體機制爲:使用正常數據訓練GAN,生成器GG只能生成正常數據,如果能在隱空間中找到一點ZZG(Z)G(Z)與測試圖像最爲相近,G(Z)G(Z)爲正常圖像,如果兩者的差距大於某個值,就可判斷測試圖像爲異常圖像。鑑別器DD本質是一個二分類模型,可以鑑別出真實圖像與生成器生成圖像之間的細微差別,而異常圖像本身與正常圖像差別較大,鑑別器會將異常圖像分爲非正常圖像。可以看到,鑑別器與生成器都可以單獨用於異常檢測,和AnoGAN一樣,論文將兩者進行了結合。

模型分爲兩個階段,如下圖
階段一:訓練WGAN
階段二:訓練Encoder

在這裏插入圖片描述

階段一:訓練WGAN

此處總結數據準備

設有NN張正常醫療圖片構成的集合RRInRI_n \in Rn=123...Nn=1、2、3...N),從InI_n中隨機截取KK張大小爲ccc*c的圖片構成訓練數據集

設標記好的數據集爲JJ,按上述方式採集大小爲ccc*c的圖像ymy_m,同時獲得對應的大小爲ccc*c的掩碼圖像ama_m(爲像素爲1表示異常,爲0表示無異常),<ym,am><y_m,a_m>構成了一個測試數據,不斷重複上述方式構成測試數據集

在視網膜光學相干斷層掃描圖像數據集上構建訓練與測試數據集的流程如下:

在這裏插入圖片描述


階段二:訓練Encoder

論文沒有給出Encoder的結構,應該是一個卷積神經網絡,具體可以查看代碼部分

WGAN訓練完畢後,不在改變,由生成器充當decoder,與Encoder一起構成了auto-encoder結構,Encoder負責將訓練圖片(查看上一節數據準備部分)映射爲隱空間中的點ZZ,生成器將ZZ映射爲圖片。

Encoder存在三種訓練方式,如下圖
在這裏插入圖片描述

訓練方式一:iziizi

具體步驟

  1. Encoder將圖片x映射爲隱空間中的點z^\hat z
  2. 生成器將z^\hat z映射爲圖片G(z^)G(\hat z)
  3. 損失函數爲MSE:Lizi(x)=1nxG(z^)2L_{izi}(x)=\frac{1}{n}||x-G(\hat z)||^2 nn爲像素的個數

訓練方式二:zizziz

具體步驟

  1. 在隱空間中隨機選取一個點zz,生成器將zz映射爲圖片G(z)G(z)
  2. Encoder將G(z)G(z)映射爲隱空間中的點z^\hat z
  3. 損失函數爲MSE:Lziz(z)=1dzz^)2L_{ziz}(z)=\frac{1}{d}||z-\hat z)||^2 d爲隱空間的維數

訓練方式三:izifizi_f

具體步驟

  1. Encoder將圖片x映射爲隱空間中的點z^\hat z
  2. 生成器將z^\hat z映射爲圖片G(z^)G(\hat z)
  3. G(z^)G(\hat z)xx輸入到鑑別器中,得到LD=1ndf(x)f(G(z^))2L_D=\frac{1}{n_d}||f(x)-f(G(\hat z))||^2,f(x)爲鑑別器中間某一層的特徵圖,該特徵圖被認爲含有輸入圖像的統計信息,LDL_D用於比較圖像之間統計信息的差異,ndn_d爲特徵圖的維數(個人理解爲特徵圖像素個數)
  4. 損失函數爲Lizif(x)=1nxG(z^)2+λ1ndf(x)f(G(z^))2L_{izi_f}(x)=\frac{1}{n}||x-G(\hat z)||^2+\lambda \frac{1}{n_d}||f(x)-f(G(\hat z))||^2λ\lambda爲超參數

fAnoGANf-AnoGANizifizi_f 作爲Encoder的訓練方式


異常檢測

異常檢測其實是一個二分類問題,我們需要設計一個異常分數公式用於計算異常分數,異常分數高於某個值,即可認爲出現異常,f-AnoGAN將Lizif(x)L_{izi_f}(x)作爲異常分數公式,Lizif(x)L_{izi_f}(x)從像素差異與圖片之間的統計學差異角度比較了兩張圖片之間的差距。

假設xx爲異常圖片,由於生成器只能生成正常圖片,鑑別器能鑑別圖片是否符合正常圖片分佈,則G(z^)G(\hat z)xxf(G(z^))f(G(\hat z))f(x)f(x)之間的差異勢必比較大。

LiziL_{izi}對應AnoGAN中的ResidualLossResidual LossLDL_D則對應DiscriminationLossDiscrimination Loss,AnoGAN中統計過正常與異常圖片在ResidualLossResidual LossDiscriminationLossDiscrimination Loss上的取值差異,如下:

在這裏插入圖片描述

x軸表示LiziL_{izi}LDL_D的值,y軸表示頻率,可以看出

  1. 異常圖片的LiziL_{izi}LDL_D普遍大於正常圖片
  2. 正常圖片與異常圖片在LiziL_{izi}LDL_D上的取值分佈重疊部分小,說明LiziL_{izi}LDL_D對於正常圖片與異常圖片的區分度高

因此,Lizif(x)L_{izi_f}(x)可用於計算異常得分


實驗

問題一:隱空間是否平滑連續?
如果隱空間不夠平滑連續,只有部分隱空間中的點能生成真實度較高的圖片,爲了驗證隱空間是連續的,論文進行了兩個實驗

實驗一:隨機選擇隱空間中的兩個點,兩點之間做一條位於高維度空間的直線,生成這條直線上的點對應的圖片
實驗二:依據真實圖片在隱空間中選擇兩個點(應該是使用了Encoder),兩點之間做一條位於高維度空間的直線,生成這條直線上的點對應的圖片

兩個實驗的結果如下
在這裏插入圖片描述

可以看到,圖像之間的變化非常自然,由此可見隱空間還是比較平滑的,如果隱空間是劇烈抖動的,那麼圖像之間的漸變效果應該會非常明顯


問題二:f-AnoGAN的預測準確率如何?
異常檢測本質上是一個二分類問題,可以使用準確率召回率等指標進行模型評估

論文比對的baseline有

  1. AEAE
  2. AdvAEAdvAE
  3. ALIALI
  4. ADA_D:使用WGAN的鑑別器輸出作爲異常分數,由於WGAN的輸出比較的是生成圖片與真實圖片的Wasserstein距離,因此不能直接作爲異常分數,設測試圖片爲xx,則異常分數定義如下AD=m^xD(x)A_D=\hat m_{x}-D(x)
    隨機選擇32000張測試圖片,統計對應的鑑別器輸出,計算平均值,即爲m^x\hat m_x
  5. iterativeiterative:使用WCAN的AnoGAN

結果如下:
在這裏插入圖片描述
f-AnoGAN的評價指標均爲最高,表現相當優異

AUC如下
在這裏插入圖片描述


問題三:f-AnoGAN異常檢測的效果如何?
在這裏插入圖片描述


問題四:不同Encoder訓練策略的比較

首先是異常檢測的視覺效果
在這裏插入圖片描述

接着是各項指標
AUC如下:
在這裏插入圖片描述

在這裏插入圖片描述

可看出,izifizi_f策略的訓練結果最佳

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