實踐教程|利用CNN來檢測偽造圖像

極市導(dǎo)讀
本文介紹了使用CNN來進(jìn)行偽造圖像檢測的完整過程。 >>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿
隨著像Facebook和Instagram這樣的社交網(wǎng)絡(luò)服務(wù)的出現(xiàn),在過去十年中產(chǎn)生的圖像數(shù)據(jù)量有一個巨大增加。使用圖像(和視頻)等處理軟件GNU Gimp,Adobe Photoshop創(chuàng)建修改過的圖像和視頻是Facebook等互聯(lián)網(wǎng)公司的主要關(guān)注點。
這些圖片是假新聞的主要來源,經(jīng)常被用于惡意的方式,如煽動暴徒。在對可疑圖像采取行動之前,我們必須核實其真實性。IEEE信息取證和安全技術(shù)委員會(IFS-TC)發(fā)起了一項檢測和定位取證挑戰(zhàn)第一次圖像取證挑戰(zhàn)2013年解決了這個問題。他們提供了一個開放的數(shù)字圖像數(shù)據(jù)集,其中包括在不同光照條件下拍攝的圖像,以及使用如下算法生成的偽造圖像:
內(nèi)容感知的填充和補丁匹配(用于復(fù)制/粘貼) 內(nèi)容感知修復(fù)(用于復(fù)制/粘貼和拼接) 克隆圖章(復(fù)制/粘貼) 縫刻(圖像重定向) 修復(fù)(受損部分的圖像重建-復(fù)制/粘貼的特殊情況) Alpha Matting(用于拼接)
挑戰(zhàn)的兩個階段
第一階段要求參與的團(tuán)隊將圖像分類為偽造的或原始的(從不操縱)。
第二階段則要求他們檢測/定位偽造圖像中的偽造區(qū)域。
為什么使用CNN ?
在人工智能的前深度學(xué)習(xí)時代,圖像處理研究人員用于設(shè)計手工特征,解決一般的圖像處理問題,特別是圖像分類問題。一個這樣的例子是Sobel內(nèi)核用于邊緣檢測。之前使用的圖像取證工具可以分為5類,即
基于像素的技術(shù),檢測像素級引入的統(tǒng)計異常。 利用特定有損壓縮方案引入的統(tǒng)計相關(guān)性的基于格式的技術(shù)。 利用相機鏡頭、傳感器或芯片后處理引入的偽影的基于相機的技術(shù)。 基于物理學(xué)的技術(shù),明確地建模和檢測物理對象、光和相機之間的三維交互作用中的異常。 基于幾何的技術(shù),使世界上的對象和他們的位置相對于相機的測量。
幾乎所有這些技術(shù)都利用了圖像的基于內(nèi)容的特征,即圖像中呈現(xiàn)的視覺信息。CNN的是靈感來自視覺皮層。從技術(shù)上講,這些網(wǎng)絡(luò)被設(shè)計用來提取對分類有意義的特征,即那些使損失函數(shù)最小化的特征。通過梯度下降法學(xué)習(xí)網(wǎng)絡(luò)參數(shù)-核權(quán)值,從而從輸入給網(wǎng)絡(luò)的圖像中生成最有區(qū)別的特征。然后,這些特征被提供給一個完全連接的層,該層執(zhí)行最后的分類任務(wù)。
在觀察了一些偽造的圖像后,很明顯,人類視覺皮層找到偽造的區(qū)域是可能的。因此CNN是這個工作的完美的深度學(xué)習(xí)模型。如果人類的視覺皮層能夠探測到它,那么這個專為這項任務(wù)而設(shè)計的網(wǎng)絡(luò)肯定會更強大。
數(shù)據(jù)集
在進(jìn)入數(shù)據(jù)集概述之前,需要明確使用的術(shù)語
偽造圖像:
使用兩種最常見的操作操作即復(fù)制/粘貼和圖像拼接來處理/篡改的圖像。
原始圖像:
沒有被操縱的圖像,除了根據(jù)比賽規(guī)則將所有圖像調(diào)整為標(biāo)準(zhǔn)尺寸。
圖像拼接:
拼接操作可以將人的圖像組合在一起,給建筑物加門,給停車場加樹,加車等等。拼接的圖像也可以包含復(fù)制/粘貼操作產(chǎn)生的部分。接收拼接部分的圖像稱為“主機”圖像。與宿主映像拼接在一起的部分稱為“外星人”。
可以找到第一階段和第二階段的整個數(shù)據(jù)集在這里。對于這個項目,我們將只使用火車集。它包含2個目錄—一個包含假圖像及其對應(yīng)的掩碼,另一個包含原始圖像。偽圖像的掩碼是描述偽圖像拼接區(qū)域的黑白(非灰度)圖像。蒙版中的黑色像素表示在源圖像中進(jìn)行操作以獲得偽造圖像的區(qū)域,特別是拼接區(qū)域。

該數(shù)據(jù)集由1050張原始圖像和450張偽造圖像組成。彩色圖像通常是三個通道的圖像,紅、綠、藍(lán)各一個通道,但有時也會出現(xiàn)黃色的第四個通道。我們的數(shù)據(jù)集中的圖像是1、3和4通道圖像的混合。在觀察一些1通道圖像即灰度圖像后。
挑戰(zhàn)設(shè)置者有意添加這些圖像,因為他們想要解決這樣的噪聲。盡管一些藍(lán)色的圖像可以是晴朗天空的圖像。因此,其中一些被包括在內(nèi),而另一些則作為噪聲被丟棄。來看看四個頻道的圖像——它們也沒有任何有用的信息。它們只是填充0值的像素網(wǎng)格。因此,清理后的原始數(shù)據(jù)集包含大約1025張RGB圖像。
假圖像是3和4通道圖像的混合,但是,沒有一個是噪聲的。相應(yīng)的掩模是1、3和4通道圖像的混合。我們將使用的特征提取只需要從蒙版的一個通道獲取信息。因此,我們的偽造圖像語料庫有450個贗品。接下來,我們做了一個火車測試分離,以保留20%的1475張照片的最終測試。
訓(xùn)練集的特征提取
數(shù)據(jù)集目前的狀態(tài)不適合訓(xùn)練模型。它必須轉(zhuǎn)換成一種狀態(tài),這種狀態(tài)非常適合于手頭的任務(wù),即在像素級檢測由于鍛造操作而引入的異常。把思想從在這里,我們設(shè)計了以下方法來從給定的數(shù)據(jù)創(chuàng)建相關(guān)的圖像。
對于每一個假圖像,我們都有一個對應(yīng)的掩模。我們使用該掩模沿拼接區(qū)域的邊界對假圖像進(jìn)行采樣,以確保圖像的偽造部分和未偽造部分都至少有25%的貢獻(xiàn)。這些樣本將具有只有在假圖像中才會出現(xiàn)的可區(qū)分的邊界。這些界限將由我們設(shè)計的CNN來學(xué)習(xí)。由于mask的3個通道都包含相同的信息(不同像素的圖像的假部分),所以我們只需要1個通道來提取樣本。
為了使圖像的邊界更加清晰,將灰度圖像轉(zhuǎn)換為二值圖像首先進(jìn)行閾值(實施OpenCV),然后用高斯濾波器去噪。在此操作之后,采樣僅僅是在偽圖像中移動一個64×64窗口(8步),在對應(yīng)的掩模中計數(shù)0值(黑色)像素,如果值在一定的間隔內(nèi)進(jìn)行采樣。
In [29]:binaries=[]for grayscale in x_train_masks:blur = cv2.GaussianBlur(grayscale,(5,5),0)ret,th = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)binaries.append(th)In [56]:~binaries[28]Out[56]:array([[0, 0, 0, ..., 0, 0, 0],[],[],...,[],[],[]], dtype=uint8)

采樣后,我們從假圖像中得到175,119個64×64補丁。為了生成0標(biāo)記(原始)補丁,我們從真實圖像中采樣了大致相同的數(shù)量。最后,我們有350,728個補丁,它們被分成了多個序列和交叉驗證集?,F(xiàn)在我們有了一個大的高質(zhì)量輸入圖像數(shù)據(jù)集。現(xiàn)在是試驗各種CNN架構(gòu)的時候了。
自定義CNN架構(gòu)
我們嘗試的第一個建筑靈感來自于最初的建筑研究論文. 他們的輸入圖像大小為128×128×3,因此網(wǎng)絡(luò)很大。因為我們有一半的空間大小,我們的網(wǎng)絡(luò)也更小。這是第一個嘗試的架構(gòu)。

綠色的圖層是卷積的,藍(lán)色的是Max pool。該網(wǎng)絡(luò)對150,000列樣本(用于測試)和25,000驗證樣本進(jìn)行了訓(xùn)練。該網(wǎng)絡(luò)有8536個參數(shù),與訓(xùn)練樣本相比相對較少,因此避免了更激進(jìn)的輟學(xué)的需要。在20個單位的平坦產(chǎn)量上應(yīng)用了0.2的輟學(xué)率。我們使用缺省學(xué)習(xí)率(0.001)和beta_1, beta_2的Adam優(yōu)化器。在大約___個迭代之后,結(jié)果如下:
訓(xùn)練精度:77.13%,訓(xùn)練損耗:0.4678
驗證準(zhǔn)確性:75.68%,驗證損耗:0.5121
這些數(shù)字并不是很令人印象深刻,因為在2012年,CNN以巨大的優(yōu)勢擊敗了專家們經(jīng)過多年研究開發(fā)的特色節(jié)目。然而,考慮到我們完全沒有使用圖像取證知識(像素統(tǒng)計和相關(guān)概念)來獲得看不見的數(shù)據(jù)的___精度,這些數(shù)字也不是很糟糕。
轉(zhuǎn)移學(xué)習(xí)
因為這是一個CNN它擊敗了所有經(jīng)典的機器學(xué)習(xí)算法ImageNet分類任務(wù),為什么不利用這些強大的機器之一的工作來解決手邊的問題呢?這是背后的想法轉(zhuǎn)移學(xué)習(xí). 簡而言之,我們使用一個預(yù)訓(xùn)練模型的權(quán)重來解決我們的問題,這個模型可能是在一個更大的數(shù)據(jù)集上訓(xùn)練的,在解決它的問題時給出了更好的結(jié)果。換句話說,我們將一種模型的學(xué)習(xí)“轉(zhuǎn)移”到我們自己的模型上。在我們的例子中,我們使用theVGG16在ImageNet數(shù)據(jù)集上訓(xùn)練,使我們的數(shù)據(jù)集中的圖像矢量化。在這里,我們嘗試了兩種方法
使用VGG16輸出的瓶頸特性,并在此基礎(chǔ)上構(gòu)建一個淺網(wǎng)絡(luò)。 微調(diào)上面(1)中VGG16+Shallow模型的最后一個卷積層。
憑直覺,2給出的結(jié)果比1好得多。我們嘗試了多種淺層網(wǎng)絡(luò)架構(gòu),最終到達(dá)這里:

平坦層的輸入是VGG16輸出的瓶頸特征。這些是形狀的張量(2×2×512),因為我們使用了64×64輸入圖像。
上面的架構(gòu)給出了以下結(jié)果:
訓(xùn)練精度83.18%,訓(xùn)練損耗0.3230
驗證精度84.26%,驗證損耗0.3833
我們使用Adam優(yōu)化器進(jìn)行訓(xùn)練,自定義學(xué)習(xí)率在每10個epoch后降低(除了在每批處理后由Adam定期更新)。

第二種方法需要微調(diào)最后一層。這里需要注意的重要一點是,為了進(jìn)行微調(diào),我們必須使用預(yù)先訓(xùn)練好的頂層模型。目標(biāo)是稍微改變已經(jīng)掌握的權(quán)重,以便更好地擬合數(shù)據(jù)。如果我們使用一些隨機初始化的權(quán)值,輕微的變化不會對它們有任何好處,而大的變化會破壞學(xué)習(xí)到的卷積層的權(quán)值。我們還需要一個非常小的學(xué)習(xí)率來微調(diào)我們的模型(原因與上面提到的相同)。在這后,建議使用SGD優(yōu)化器進(jìn)行微調(diào)。然而,我們觀察到亞當(dāng)在這項任務(wù)上比SGD表現(xiàn)得更好。
微調(diào)模型得到以下結(jié)果訓(xùn)練精度:99.16%,訓(xùn)練損耗:0.018
驗證精度94.77%,驗證損耗0.30
稍微過擬合的模型,可以通過使用更小的學(xué)習(xí)速率來補救(我們使用1e-6)。除了VGG16,我們還嘗試了ResNet50和VGG19模型在Image-Net數(shù)據(jù)集上預(yù)先訓(xùn)練的瓶頸特性。ResNet50的功能表現(xiàn)優(yōu)于VGG16。VGG19的表現(xiàn)不是很令人滿意。我們對ResNet50體系結(jié)構(gòu)(最后一個卷積層)進(jìn)行了微調(diào),采用了與VGG16類似的方式,使用相同的學(xué)習(xí)率更新策略,在較小的過擬合問題下給出了更有希望的結(jié)果。訓(xùn)練準(zhǔn)確率:98.65%,訓(xùn)練損耗:0.048驗證精度:95.22%,驗證損耗:0.18
最后對試驗數(shù)據(jù)進(jìn)行模型預(yù)測
為了從之前創(chuàng)建的測試集中采樣圖像,我們采用了與創(chuàng)建訓(xùn)練和交叉驗證集類似的策略,即在邊界處使用掩模采樣假圖像,并采樣相同尺寸的相同數(shù)量的原始圖像。我們使用經(jīng)過微調(diào)的VGG16模型來預(yù)測這些補丁的標(biāo)簽,并給出了以下結(jié)果測試精度:94.65%,測試損耗:0.31另一方面,ResNet50給出了以下測試數(shù)據(jù)的結(jié)果測試精度:95.09%,測試損耗:0.19正如我們所見,我們的模型表現(xiàn)得很好。我們還有很多改進(jìn)的余地。如果通過數(shù)據(jù)增強(剪切、調(diào)整大小、旋轉(zhuǎn)和其他操作)可以生成更多的數(shù)據(jù),或許我們可以對更多的SOTA網(wǎng)絡(luò)層進(jìn)行微調(diào)。
如果覺得有用,就請分享到朋友圈吧!
公眾號后臺回復(fù)“79”獲取CVPR 2021:TransT 直播鏈接~

# CV技術(shù)社群邀請函 #
備注:姓名-學(xué)校/公司-研究方向-城市(如:小極-北大-目標(biāo)檢測-深圳)
即可申請加入極市目標(biāo)檢測/圖像分割/工業(yè)檢測/人臉/醫(yī)學(xué)影像/3D/SLAM/自動駕駛/超分辨率/姿態(tài)估計/ReID/GAN/圖像增強/OCR/視頻理解等技術(shù)交流群
每月大咖直播分享、真實項目需求對接、求職內(nèi)推、算法競賽、干貨資訊匯總、與 10000+來自港科大、北大、清華、中科院、CMU、騰訊、百度等名校名企視覺開發(fā)者互動交流~

