【深度学习】利用CNN来检测伪造图像
隨著像Facebook和Instagram這樣的社交網(wǎng)絡(luò)服務(wù)的出現(xiàn),在過(guò)去十年中產(chǎn)生的圖像數(shù)據(jù)量有一個(gè)巨大增加。使用圖像(和視頻)等處理軟件GNU Gimp,Adobe Photoshop創(chuàng)建修改過(guò)的圖像和視頻是Facebook等互聯(lián)網(wǎng)公司的主要關(guān)注點(diǎn)。
這些圖片是假新聞的主要來(lái)源,經(jīng)常被用于惡意的方式,如煽動(dòng)暴徒。在對(duì)可疑圖像采取行動(dòng)之前,我們必須核實(shí)其真實(shí)性。IEEE信息取證和安全技術(shù)委員會(huì)(IFS-TC)發(fā)起了一項(xiàng)檢測(cè)和定位取證挑戰(zhàn)第一次圖像取證挑戰(zhàn)2013年解決了這個(gè)問(wèn)題。他們提供了一個(gè)開(kāi)放的數(shù)字圖像數(shù)據(jù)集,其中包括在不同光照條件下拍攝的圖像,以及使用如下算法生成的偽造圖像:
內(nèi)容感知的填充和補(bǔ)丁匹配(用于復(fù)制/粘貼)
內(nèi)容感知修復(fù)(用于復(fù)制/粘貼和拼接)
克隆圖章(復(fù)制/粘貼)
縫刻(圖像重定向)
修復(fù)(受損部分的圖像重建-復(fù)制/粘貼的特殊情況)
Alpha Matting(用于拼接)
挑戰(zhàn)的兩個(gè)階段
第一階段要求參與的團(tuán)隊(duì)將圖像分類為偽造的或原始的(從不操縱)。
第二階段則要求他們檢測(cè)/定位偽造圖像中的偽造區(qū)域。
為什么使用CNN ?
在人工智能的前深度學(xué)習(xí)時(shí)代,圖像處理研究人員用于設(shè)計(jì)手工特征,解決一般的圖像處理問(wèn)題,特別是圖像分類問(wèn)題。一個(gè)這樣的例子是Sobel內(nèi)核用于邊緣檢測(cè)。之前使用的圖像取證工具可以分為5類,即
基于像素的技術(shù),檢測(cè)像素級(jí)引入的統(tǒng)計(jì)異常。
利用特定有損壓縮方案引入的統(tǒng)計(jì)相關(guān)性的基于格式的技術(shù)。
利用相機(jī)鏡頭、傳感器或芯片后處理引入的偽影的基于相機(jī)的技術(shù)。
基于物理學(xué)的技術(shù),明確地建模和檢測(cè)物理對(duì)象、光和相機(jī)之間的三維交互作用中的異常。
基于幾何的技術(shù),使世界上的對(duì)象和他們的位置相對(duì)于相機(jī)的測(cè)量。
幾乎所有這些技術(shù)都利用了圖像的基于內(nèi)容的特征,即圖像中呈現(xiàn)的視覺(jué)信息。CNN的是靈感來(lái)自視覺(jué)皮層。從技術(shù)上講,這些網(wǎng)絡(luò)被設(shè)計(jì)用來(lái)提取對(duì)分類有意義的特征,即那些使損失函數(shù)最小化的特征。通過(guò)梯度下降法學(xué)習(xí)網(wǎng)絡(luò)參數(shù)-核權(quán)值,從而從輸入給網(wǎng)絡(luò)的圖像中生成最有區(qū)別的特征。然后,這些特征被提供給一個(gè)完全連接的層,該層執(zhí)行最后的分類任務(wù)。
在觀察了一些偽造的圖像后,很明顯,人類視覺(jué)皮層找到偽造的區(qū)域是可能的。因此CNN是這個(gè)工作的完美的深度學(xué)習(xí)模型。如果人類的視覺(jué)皮層能夠探測(cè)到它,那么這個(gè)專為這項(xiàng)任務(wù)而設(shè)計(jì)的網(wǎng)絡(luò)肯定會(huì)更強(qiáng)大。
數(shù)據(jù)集
在進(jìn)入數(shù)據(jù)集概述之前,需要明確使用的術(shù)語(yǔ)
偽造圖像:使用兩種最常見(jiàn)的操作操作即復(fù)制/粘貼和圖像拼接來(lái)處理/篡改的圖像。
原始圖像:沒(méi)有被操縱的圖像,除了根據(jù)比賽規(guī)則將所有圖像調(diào)整為標(biāo)準(zhǔn)尺寸。
圖像拼接:拼接操作可以將人的圖像組合在一起,給建筑物加門,給停車場(chǎng)加樹(shù),加車等等。拼接的圖像也可以包含復(fù)制/粘貼操作產(chǎn)生的部分。接收拼接部分的圖像稱為“主機(jī)”圖像。與宿主映像拼接在一起的部分稱為“外星人”。
可以找到第一階段和第二階段的整個(gè)數(shù)據(jù)集在這里。對(duì)于這個(gè)項(xiàng)目,我們將只使用火車集。它包含2個(gè)目錄—一個(gè)包含假圖像及其對(duì)應(yīng)的掩碼,另一個(gè)包含原始圖像。偽圖像的掩碼是描述偽圖像拼接區(qū)域的黑白(非灰度)圖像。蒙版中的黑色像素表示在源圖像中進(jìn)行操作以獲得偽造圖像的區(qū)域,特別是拼接區(qū)域。
該數(shù)據(jù)集由1050張?jiān)紙D像和450張偽造圖像組成。彩色圖像通常是三個(gè)通道的圖像,紅、綠、藍(lán)各一個(gè)通道,但有時(shí)也會(huì)出現(xiàn)黃色的第四個(gè)通道。我們的數(shù)據(jù)集中的圖像是1、3和4通道圖像的混合。在觀察一些1通道圖像即灰度圖像后。
挑戰(zhàn)設(shè)置者有意添加這些圖像,因?yàn)樗麄兿胍鉀Q這樣的噪聲。盡管一些藍(lán)色的圖像可以是晴朗天空的圖像。因此,其中一些被包括在內(nèi),而另一些則作為噪聲被丟棄。來(lái)看看四個(gè)頻道的圖像——它們也沒(méi)有任何有用的信息。它們只是填充0值的像素網(wǎng)格。因此,清理后的原始數(shù)據(jù)集包含大約1025張RGB圖像。
假圖像是3和4通道圖像的混合,但是,沒(méi)有一個(gè)是噪聲的。相應(yīng)的掩模是1、3和4通道圖像的混合。我們將使用的特征提取只需要從蒙版的一個(gè)通道獲取信息。因此,我們的偽造圖像語(yǔ)料庫(kù)有450個(gè)贗品。接下來(lái),我們做了一個(gè)火車測(cè)試分離,以保留20%的1475張照片的最終測(cè)試。
列車集的特征提取
數(shù)據(jù)集目前的狀態(tài)不適合訓(xùn)練模型。它必須轉(zhuǎn)換成一種狀態(tài),這種狀態(tài)非常適合于手頭的任務(wù),即在像素級(jí)檢測(cè)由于鍛造操作而引入的異常。把思想從在這里,我們?cè)O(shè)計(jì)了以下方法來(lái)從給定的數(shù)據(jù)創(chuàng)建相關(guān)的圖像。
對(duì)于每一個(gè)假圖像,我們都有一個(gè)對(duì)應(yīng)的掩模。我們使用該掩模沿拼接區(qū)域的邊界對(duì)假圖像進(jìn)行采樣,以確保圖像的偽造部分和未偽造部分都至少有25%的貢獻(xiàn)。這些樣本將具有只有在假圖像中才會(huì)出現(xiàn)的可區(qū)分的邊界。這些界限將由我們?cè)O(shè)計(jì)的CNN來(lái)學(xué)習(xí)。由于mask的3個(gè)通道都包含相同的信息(不同像素的圖像的假部分),所以我們只需要1個(gè)通道來(lái)提取樣本。
為了使圖像的邊界更加清晰,將灰度圖像轉(zhuǎn)換為二值圖像首先進(jìn)行閾值(實(shí)施OpenCV),然后用高斯濾波器去噪。在此操作之后,采樣僅僅是在偽圖像中移動(dòng)一個(gè)64×64窗口(8步),在對(duì)應(yīng)的掩模中計(jì)數(shù)0值(黑色)像素,如果值在一定的間隔內(nèi)進(jìn)行采樣。
In [29]: # Convert grayscale images to binary 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],[0, 0, 0, ..., 0, 0, 0],[0, 0, 0, ..., 0, 0, 0],...,[0, 0, 0, ..., 0, 0, 0],[0, 0, 0, ..., 0, 0, 0],[0,?0,?0,?...,?0,?0,?0]],?dtype=uint8)采樣后,我們從假圖像中得到175,119個(gè)64×64補(bǔ)丁。為了生成0標(biāo)記(原始)補(bǔ)丁,我們從真實(shí)圖像中采樣了大致相同的數(shù)量。最后,我們有350,728個(gè)補(bǔ)丁,它們被分成了多個(gè)序列和交叉驗(yàn)證集。
現(xiàn)在我們有了一個(gè)大的高質(zhì)量輸入圖像數(shù)據(jù)集。現(xiàn)在是試驗(yàn)各種CNN架構(gòu)的時(shí)候了。
自定義CNN架構(gòu)
我們嘗試的第一個(gè)建筑靈感來(lái)自于最初的建筑研究論文. 他們的輸入圖像大小為128×128×3,因此網(wǎng)絡(luò)很大。因?yàn)槲覀冇幸话氲目臻g大小,我們的網(wǎng)絡(luò)也更小。這是第一個(gè)嘗試的架構(gòu)。
綠色的圖層是卷積的,藍(lán)色的是Max pool。該網(wǎng)絡(luò)對(duì)150,000列樣本(用于測(cè)試)和25,000驗(yàn)證樣本進(jìn)行了訓(xùn)練。該網(wǎng)絡(luò)有8536個(gè)參數(shù),與列車樣本相比相對(duì)較少,因此避免了更激進(jìn)的輟學(xué)的需要。在20個(gè)單位的平坦產(chǎn)量上應(yīng)用了0.2的輟學(xué)率。我們使用缺省學(xué)習(xí)率(0.001)和beta_1, beta_2的Adam優(yōu)化器。在大約___個(gè)時(shí)代之后,結(jié)果如下
列車精度:77.13%,列車損耗:0.4678
驗(yàn)證準(zhǔn)確性:75.68%,驗(yàn)證損耗:0.5121
這些數(shù)字并不是很令人印象深刻,因?yàn)樵?012年,CNN以巨大的優(yōu)勢(shì)擊敗了專家們經(jīng)過(guò)多年研究開(kāi)發(fā)的特色節(jié)目。然而,考慮到我們完全沒(méi)有使用圖像取證知識(shí)(像素統(tǒng)計(jì)和相關(guān)概念)來(lái)獲得看不見(jiàn)的數(shù)據(jù)的___精度,這些數(shù)字也不是很糟糕。
轉(zhuǎn)移學(xué)習(xí)
因?yàn)檫@是一個(gè)CNN它擊敗了所有經(jīng)典的機(jī)器學(xué)習(xí)算法ImageNet分類任務(wù),為什么不利用這些強(qiáng)大的機(jī)器之一的工作來(lái)解決手邊的問(wèn)題呢?這是背后的想法轉(zhuǎn)移學(xué)習(xí). 簡(jiǎn)而言之,我們使用一個(gè)預(yù)訓(xùn)練模型的權(quán)重來(lái)解決我們的問(wèn)題,這個(gè)模型可能是在一個(gè)更大的數(shù)據(jù)集上訓(xùn)練的,在解決它的問(wèn)題時(shí)給出了更好的結(jié)果。換句話說(shuō),我們將一種模型的學(xué)習(xí)“轉(zhuǎn)移”到我們自己的模型上。在我們的例子中,我們使用theVGG16在ImageNet數(shù)據(jù)集上訓(xùn)練,使我們的數(shù)據(jù)集中的圖像矢量化。在這里,我們嘗試了兩種方法
使用VGG16輸出的瓶頸特性,并在此基礎(chǔ)上構(gòu)建一個(gè)淺網(wǎng)絡(luò)。
微調(diào)上面(1)中VGG16+Shallow模型的最后一個(gè)卷積層。
憑直覺(jué),2給出的結(jié)果比1好得多。我們嘗試了多種淺層網(wǎng)絡(luò)架構(gòu),最終到達(dá)這里
平坦層的輸入是VGG16輸出的瓶頸特征。這些是形狀的張量(2×2×512),因?yàn)槲覀兪褂昧?4×64輸入圖像。
上面的架構(gòu)給出了以下結(jié)果
列車精度83.18%,列車損耗0.3230
驗(yàn)證精度84.26%,驗(yàn)證損耗0.3833
我們使用Adam優(yōu)化器進(jìn)行訓(xùn)練,自定義學(xué)習(xí)率在每10個(gè)epoch后降低(除了在每批處理后由Adam定期更新)。
第二種方法需要微調(diào)最后一層。這里需要注意的重要一點(diǎn)是,為了進(jìn)行微調(diào),我們必須使用預(yù)先訓(xùn)練好的頂層模型。目標(biāo)是稍微改變已經(jīng)掌握的權(quán)重,以便更好地?cái)M合數(shù)據(jù)。如果我們使用一些隨機(jī)初始化的權(quán)值,輕微的變化不會(huì)對(duì)它們有任何好處,而大的變化會(huì)破壞學(xué)習(xí)到的卷積層的權(quán)值。我們還需要一個(gè)非常小的學(xué)習(xí)率來(lái)微調(diào)我們的模型(原因與上面提到的相同)。在這后,建議使用SGD優(yōu)化器進(jìn)行微調(diào)。然而,我們觀察到亞當(dāng)在這項(xiàng)任務(wù)上比SGD表現(xiàn)得更好。
微調(diào)模型得到以下結(jié)果
列車精度:99.16%,列車損耗:0.018
驗(yàn)證精度94.77%,驗(yàn)證損耗0.30
稍微過(guò)擬合的模型,可以通過(guò)使用更小的學(xué)習(xí)速率來(lái)補(bǔ)救(我們使用1e-6)。
除了VGG16,我們還嘗試了ResNet50和VGG19模型在Image-Net數(shù)據(jù)集上預(yù)先訓(xùn)練的瓶頸特性。ResNet50的功能表現(xiàn)優(yōu)于VGG16。VGG19的表現(xiàn)不是很令人滿意。我們對(duì)ResNet50體系結(jié)構(gòu)(最后一個(gè)卷積層)進(jìn)行了微調(diào),采用了與VGG16類似的方式,使用相同的學(xué)習(xí)率更新策略,在較小的過(guò)擬合問(wèn)題下給出了更有希望的結(jié)果。
列車準(zhǔn)確率:98.65%,列車損耗:0.048
驗(yàn)證精度:95.22%,驗(yàn)證損耗:0.18
最后對(duì)試驗(yàn)數(shù)據(jù)進(jìn)行模型預(yù)測(cè)
為了從之前創(chuàng)建的測(cè)試集中采樣圖像,我們采用了與創(chuàng)建訓(xùn)練和交叉驗(yàn)證集類似的策略,即在邊界處使用掩模采樣假圖像,并采樣相同尺寸的相同數(shù)量的原始圖像。我們使用經(jīng)過(guò)微調(diào)的VGG16模型來(lái)預(yù)測(cè)這些補(bǔ)丁的標(biāo)簽,并給出了以下結(jié)果
測(cè)試精度:94.65%,測(cè)試損耗:0.31
另一方面,ResNet50給出了以下測(cè)試數(shù)據(jù)的結(jié)果
測(cè)試精度:95.09%,測(cè)試損耗:0.19
正如我們所見(jiàn),我們的模型表現(xiàn)得很好。我們還有很多改進(jìn)的余地。如果通過(guò)數(shù)據(jù)增強(qiáng)(剪切、調(diào)整大小、旋轉(zhuǎn)和其他操作)可以生成更多的數(shù)據(jù),或許我們可以對(duì)更多的SOTA網(wǎng)絡(luò)層進(jìn)行微調(diào)。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專輯黃海廣老師《機(jī)器學(xué)習(xí)課程》視頻課 本站qq群851320808,加入微信群請(qǐng)掃碼:總結(jié)
以上是生活随笔為你收集整理的【深度学习】利用CNN来检测伪造图像的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【NLP】首个任务型对话系统中生成模块资
- 下一篇: Uncaught (in promise