圖像取證:基於深度學習的剪貼/裁剪圖像的防僞識別方法

——本文大部分內容來源於 A deep learning approach to detection of splicing and copy-move forgeries in images 這篇文章,作者是 Yuan Rao, Jiangqun Ni 兩位老師;內容爲縮減內容,只取了我 需要了解的一部分intro和算法的詳細內容。

目錄

Intro:深度學習與圖像取證

模型介紹

A. Patch Sampling 塊樣本提取

B. Architecture of the Proposed CNN

C. The proposed initialization method 初始化方法

D. Feature Fusion

實驗與分析


Intro:深度學習與圖像取證

近年來,深度學習的種種算法展現出十分強勁的信息提取能力,尤其是從高維敏感信息提取信息及學習其結構表達,所以在許多CV問題上都有應用。在數字取證方面,14年的一篇文章使用了CNN,用於中值濾波盲測。然而,在2015年的一篇文章上,說明了CNN並不適合直接用於圖像篡改檢測,這是因爲複雜的圖像修改工具會使修改後的圖像與原圖不僅視覺上相似,甚至在統計上也十分相似。所以,它們將圖像的小波特徵作爲圖像輸入,受同樣思想的啓發,Bayar也在他的網絡中設計了一個卷積層來學習一個預判錯誤濾波器,這個濾波器用於發現圖片篡改的痕跡。

而此篇文章的主要貢獻在於設計了一個新型的圖片取證結果,用於自動學習特徵表達。主要貢獻有以下三點:

  • 首先訓練了一個有監督的CNN模型通過訓練圖像中標記後的圖像塊(pxp大小)用於學習修改操作的結構特徵。CNN結構的第一層被作爲一個預處理模型,用於控制圖像內容,即輸入進入網絡的圖像形態。與隨機選取的策略不同,第一層CNN的核權重被初始化爲一個高通濾波器用於在空域富模型中進行殘差圖的計算。這麼做能很好的提高模型的泛化能力,並使網絡加速擬合。
  • 隨後,通過一個pxp的滑窗,使用一個預訓練的CNN模型在整張圖片上進行圖像特徵的提取。生成的圖像表達通過一個簡單融合機制進行壓縮,如區域池化來得到最終的區分特徵。
  • 最後的特徵會經過一個SVM進行二分類。

在2016年,這個模型在多個數據集上都取得了STOA的結果。


模型介紹

模型的處理過程分爲兩個主要步驟,一個是特徵學習,另一個是特徵提取

在第一步中,算法使用標記好的圖形塊進行訓練(從訓練集上截取的),其中正樣本是從篡改圖片的修改邊緣精心截取的,而負樣本則是從正確圖片中隨機截取的。這樣,CNN就能注意由篡改造成的局部特徵,從而學習篡改圖像的結構特徵。

在第二步中,預訓練好的CNN模型,通過對整張圖片的塊大小掃描,來提取圖片塊中的特徵。最終,提取的特徵將經過融合並通過SVM進行分類。

A. Patch Sampling 塊樣本提取

由於大量的樣本對僞證識別十分有效,本文章的正樣本都是由整張圖片中提取的,由此原因,越大的圖片可以獲得越多的正圖片塊樣本。同時,爲了解決過擬合的問題,圖片也加入了旋轉和翻轉後的圖片塊,使數據集擴大了八倍。

B. Architecture of the Proposed CNN

整個的網絡結構其實十分直白,是由幾個卷積層級聯得到的,最後一層爲一些全連接層,接softmax進行分類。卷積層的輸入和輸出爲feature maps 其實這個都比較直白了。每個卷積層都是由三部構成:卷積、激活函數、池化。

整個CNN部分的結構如圖:

如圖所示,pooling並不是每層都有,另外,在第一層60個feature map都是使用的是5x5的核。最終,網絡輸入一層400維的全連接層進行分類,全連接層使用了dropout = 0.5。這裏作者提出,多層全連接極易造成overfitting和計算量過大的問題。

這裏雖然圖片的卷積核由10層,但實際上只有8層,因爲卷積與前面的卷積操作只能算一個卷積層。2x2的池化核可以使圖像縮小爲原來的四分之一,這會使75%的激活後的結果被丟棄。選擇Max-pooling的原因在於最大池化能有效的保持圖片的紋理信息,並且顯著的提升網絡收斂效果。

此外,爲了增加算法的泛化性,結構中對 feature maps 在池化層之前使用了 local response normalization, 使每個網格的中心值都由其周圍的像素進行歸一化。

C. The proposed initialization method 初始化方法

上文說過,卷積的第一層是一個預處理模型,能夠有效的壓縮圖片信息。這點與圖片隱寫的富媒體模式十分相近,對殘差而不是像素值進行處理的優勢是通過殘差圖像,圖片的信息能夠被很好的壓縮,並且有效的提升圖片的信噪比(stego 信號:圖片內容),以至於由隱寫造成的微小痕跡都會被很好的檢測到。這樣的方法也被其他學者使用,即將SRM與高通濾波器相結合。這樣的方式的有效之處在於篡改操作會帶來十分尖銳的邊緣,尤其是拼接操作,會被高通濾波後明顯的體現出來。

所以文章在CNN的結構裏會對第一層卷積的權重使用30個在SRM中用於計算殘差圖的基本高通濾波器進行初始化。這些基礎的濾波器對應了7個SRM殘差類別。分佈如下:

個數 濾波器類別
8 1st
4 2nd
8 3rd
1 SQUARE3x3
4 EDGE3x3
1 SQUARE5x5
4 EDGE3x3

如果我們將濾波器的序號編號,則有: c1 = [1, ..., 8], c2 = [9, ..., 12], ..., c7 = [27, ..., 30]; c = [c1, ..., c7]

對SRM中,mxn 的濾波器核,我們將它移植到CNN的公式爲:

W_{CNN}^c(x,y)=\begin{Bmatrix}W_{SRM}^c(x,y), & ifx\leq m, y\leq n, \\ 0, & otherwise \end{matrix} 

經過實驗後發現,當初始化的濾波器能儘量保持相似而不是相同的殘差類型會提高CNN的描述效率,所以我們令 W_j=\left[ W_j^1\ W_j^2 \ W_j^3\right] 代表了第j個feature map的核權重 則對第j個feature map,那麼初始化的核權重爲

W_j = \left[ W_{CNN}^{3k-2}\ W_{CNN}^{3k-1}\ W_{CNN}^{3k}{}\right]k=((j-1) \mod 10)+1

初始化在機器學習中猶如一個正則項,可以有效的限制有效參數空間,並改善網絡對篡改痕跡識別的魯棒性。除了第一層外,其他的網絡層均使用了Xavier初始化,這種初始化策略可以通過輸入和輸出的神經元個數來自動調整其他層的參數範圍,這種方法會比random initialization更好。

D. Feature Fusion

經過了CNN的處理,會把圖片中 pxp大小的圖片塊轉化爲一個k維的列向量,這使得CNN的模型變成了一個圖片的區域描述器,下圖展示了這個過程:

一個大小爲mxn的圖片經過大小爲pxp的描述器以s的步長進行描述後會得到一個Y矩陣,Y = \left[Y_1 \ ... Y_T\right],這裏的T顯而易見,由步長和圖片大小決定,T=([(m-w)/s]+1)\times([(n-w)/s]+1),[]代表向上取整。

爲了獲得更精確的結果,s 通常會小於等於 p,爲了得到最終的表示\widehat{Y},這裏對每一行採用mean/max pooling 的策略:

\widehat{Y}=Mean\ or\ Max \begin{Bmatrix} Y_1[k]\ ...\ Y_T[k]\end{Bmatrix},

如此得到的Y是一個K維的向量,會作爲每張圖片的輸入給SVM,由SVM做最終的判斷。


實驗與分析

實驗這一部分就不細節介紹,通過一張圖直接展示。

值得注意的是作者在實驗部分的調參,在訓練部分,使用的momentum作爲優化器,參數爲(0.99, 5e-10),學習率的下降加入了decaying, 初始值爲0.01, 每十個epoch下降10%。

最後這項結果也是在各個數據集上基本取得了全勝,見下圖

本篇文章的介紹就到這裏了,可以看出這篇文章使用CNN的方式十分特別,真正結合了圖片取證所需要的部分,又發揮了CNN的信息提取功效才能取得如此好的結果。當然,在做數據集的過程中,相信作者也是花費了大量的財力物力的,也能看出預訓練牛逼!

 

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