天池偽造圖像檢測
轉自公共號【AI約讀社】天池偽造圖像的篡改檢測比賽TOP3分享
背景介紹
1.1 賽題背景
本次比賽的背景是由於隨着各種P圖工具的普及,篡改偽造出視覺無痕跡的假圖門檻大幅降低,於是我們看到大量的假圖用於散播謠言、編造虛假新聞、非法獲取經濟利益,更有甚者,還可能會被用來惡意地充當法庭證據。因此需要設計出能夠准確檢測出圖像篡改區域的算法,避免假圖造成的危害。
1.2 題目描述
比賽的任務是通過提供的訓練集學習出有效的檢測算法,對測試集的偽造圖像進行篡改定位。比賽的難點在於其分割區域是不能依靠邊緣輪廓,因為篡改特征是偏向於弱信號特征(不可視的,跟內容特征弱相關),而且相對要分割出來的區域可能面積偏小。
1.3 數據分析
-
數據集數量偏小:數據包括訓練集和測試集,訓練集有1500張JPEG圖像及對應mask,測試集有1500張JPEG圖像。訓練集的數量偏小,訓練epoch過多和復雜的網絡容易出現過擬合情況。
-
圖片大小不均勻:篡改數據集圖片大小層次不齊,並且圖片尺寸分布為[500,1400],大部分圖片為正方形,但是有部分圖片寬不等於高。
-
篡改區域分布不均勻:不論是官方提供的mask還是經過crop之后的mask中篡改區域的大小不均勻,在這樣的數據集進行訓練得到的效果並不會很好。
數據分布不一致:測試集中有部分篡改特征為splcing,但是在比賽提供的訓練集中並沒有含有此類特征的圖像,所以在含有此類特征測試集中預測所得mask為全黑,即模型沒有檢測這類特征的能力。 -
存在noisy label:分析圖像中的篡改類型,我們同樣發現在某些篡改為將字體中的黑色(0)直接篡改為了白色(255),這類篡改不論對於人眼還是模型都是難以檢測的。
子類過多問題:我們可以看到賽道一的數據中已經有篡改區域,即一次篡改,賽道二的數據是在一次篡改之后進行二次篡改得到的,所以在一張圖片里面包含的篡改類型中包含多個子類(splicing, copy-move, remove,以及賽道一選手進行的篡改)
1.4 評估指標
在測試集的1500張圖像中選手需要進行篡改定位,生成對應的二值化mask圖像。根據提交的mask與基准mask計算F1值與IOU值。
F1 指標計算:
IOU 指標計算:
總成績: Score = Score_iou+ Score_f1
Score 計算代碼:單張圖片
def metric(groundtruth,premask):
premask = premask.cpu().detach().numpy()
groundtruth = groundtruth.cpu().detach().numpy()
premask[premask>=0.5] = 1
premask[premask<0.5] = 0
groundtruth[groundtruth>0] = 1
groundtruth[groundtruth<=0] = 0
seg_inv, gt_inv = np.logical_not(premask), np.logical_not(groundtruth)
true_pos = float(np.logical_and(premask, groundtruth).sum()) # float for division
true_neg = np.logical_and(seg_inv, gt_inv).sum()
false_pos = np.logical_and(premask, gt_inv).sum()
false_neg = np.logical_and(seg_inv, groundtruth).sum()
f1 = 2 * true_pos / (2 * true_pos + false_pos + false_neg + 1e-6)
cross = np.logical_and(premask, groundtruth)
union = np.logical_or(premask, groundtruth)
iou = np.sum(cross) / (np.sum(union) + 1e-6)
if np.sum(cross) + np.sum(union) == 0:
iou = 1
return f1, iou
F1、IoU其它方式實現
# 該代碼適用於pytorch框架,函數的輸入都是tensor類型的
from sklearn.metrics import roc_auc_score,jaccard_score
import numpy as np
def auc_on_batch(masks, pred):
'''Computes the mean Area Under ROC Curve over a batch during training'''
aucs = []
for i in range(pred.shape[1]):
pred_tmp = pred[i][0].cpu().detach().numpy()
mask = masks[i].cpu().detach().numpy()
pred_tmp[pred_tmp>=0.5] = 1
pred_tmp[pred_tmp<0.5] = 0
mask_tmp[mask_tmp>0] = 1
mask_tmp[mask_tmp<=0] = 0
aucs.append(roc_auc_score(mask.reshape(-1), pred_tmp.reshape(-1)))
return np.mean(aucs)
# iou
def iou_on_batch(masks, pred):
'''Computes the mean Area Under ROC Curve over a batch during training'''
ious = []
for i in range(pred.shape[0]):
pred_tmp = pred[i][0].cpu().detach().numpy()
mask_tmp = masks[i].cpu().detach().numpy()
pred_tmp[pred_tmp>=0.5] = 1
pred_tmp[pred_tmp<0.5] = 0
mask_tmp[mask_tmp>0] = 1
mask_tmp[mask_tmp<=0] = 0
ious.append(jaccard_score(mask_tmp.reshape(-1), pred_tmp.reshape(-1)))
return np.mean(ious)
def dice_coef(y_true, y_pred):
smooth = 1e-5
y_true_f = y_true.flatten()
y_pred_f = y_pred.flatten()
intersection = np.sum(y_true_f * y_pred_f)
return (2. * intersection + smooth) / (np.sum(y_true_f) + np.sum(y_pred_f) + smooth)
# f1 score
def dice_on_batch(masks, pred):
'''Computes the mean Area Under ROC Curve over a batch during training'''
dices = []
for i in range(pred.shape[0]):
pred_tmp = pred[i][0].cpu().detach().numpy()
mask_tmp = masks[i].cpu().detach().numpy()
pred_tmp[pred_tmp>=0.5] = 1
pred_tmp[pred_tmp<0.5] = 0
mask_tmp[mask_tmp>0] = 1
mask_tmp[mask_tmp<=0] = 0
dices.append(dice_coef(mask_tmp, pred_tmp))
return np.mean(dices)
Rank Top1解決方案
ZOLOZ隊的算法方案:
- 在數據生成過程中使用了自制的Auto_ps算法進行數據增廣。
- 利用ELA, DCT, MantraNet和Noiseprint四種算法分別提取每個數據的篡改概率圖,再對原圖和每一個概率圖都訓練一個分割模型,然后融合5個分割模型的結果。
- 通過馬賽克檢測和同源比對來進一步挖掘篡改區域。
- 最后融合所有步驟的結果,得到最終的mask。
2.1 Baseline:BiseNet
論文鏈接:https://arxiv.org/abs/1808.00897
BiseNet(Bilateral Segmentation Network) 是一個雙向分割網絡,BiseNet 通過雙路網絡提取特征分別Spatial Path 和 Context Path,最后經過特征融合模塊整合這兩路網絡的特征,其中 Spatial Path 實現保留原輸入圖像的空間尺度,並編碼豐富的空間信息,而 Context Path 充分利用輕量級模型與全局平均池化以提供大感受野。具體的細節大家可以去看原文。
2.2 數據增廣:Auto_ps
在數據生成過程中使用了自制的Auto_ps算法進行數據增廣。ZOLOZ隊在對賽道2的數據進行數據分析后,將它們其分為兩類,文檔和書本。其中,賽道2的文檔數據基本都來源於賽道1。考慮到這一點,他們使用Auto_ps算法的賽道1文檔數據集生成更多的"類賽道2"的文檔數據。
Autops的操作步驟
觀察賽道2 的數據,發現大部分圖片的ps方式多為remove、splicing和copy-move等,generated並不常見。但由於文檔之間沒有匹配信息可供使用,splicing便無從做起。如果自行對文檔進行結構化解析過於費時,故放棄生成splicing。同時,基本上賽道2的圖片里篡改操作單位均為line級別,於是最終采用Auto_ps下的 line_copy_move模式和line_remove模式。
步驟如下:
1.對圖片進行文字行檢測
2.隨機挑選若干文字框作為待篡改區域
3.進行line級別的remove
4.對這些區域的原本文字區域進行resize(縮放)+shake(隨機抖動),然后復制過去。
2.3 分割模型
ZOLOZ隊將此問題視為圖像分割問題,類別為兩類,非PS區域和PS區域。相比較將本問題設為目標檢測問題的好處是,可以更好地解決印章等不規則區域。網絡上,他們采用了輕量化的BiseNet以進行更快的迭代,方便多次提交進行分析。
BiseNet的效果中仍有少量孤立的區域和一些誤識別。換言之,他們的模型總是檢測過多的區域。他們考慮使用模型融合的交集法,如果一個像素被每個模型都擊中了,才認為是正確的結果。
模型融合中他們使用的多個模型,仍采用BiseNet作為基本網絡結構,但輸入改為訓練圖片的概率圖。這些概率圖來自於其他常見的PS檢測方法,簡要介紹如下:
1.Mantranet
鏈接:https://ieeexplore.ieee.org/document/8953774
代碼:https://github.com/ISICV/ManTraNet
- Mantranet是一個使用了385種篡改類型進行異常檢測的自監督學習網絡,其特色是將篡改定位問題當做一個局部異常點檢測問題。具體介紹可以看我們這篇圖像篡改檢測:ManTra-Net
2.Noiseprint
鏈接:https://arxiv.org/abs/1808.08396
代碼:https://github.com/grip-unina/noiseprint
- 每一個獨立的設備對其所有照片上留有一個獨特的模式,也就是光響應不均勻性(PRNU,Photo Response Non-Uniformity)。這是由於設備加工過程中的缺陷導致的。由於PRNU的唯一性和穩定性,其被用於設備指紋(device fingerprint),並被用於圖片偽造檢測任務中。
3.DCT
- 離散余弦變換(DCT for Discrete Cosine Transform)常用於數據的有損數據壓縮,大名鼎鼎的圖片格式JPEG就采用了DCT算法。利用DCT算法多次壓縮之后出現的double quantization特性,可以分辨jpeg圖片的篡改痕跡。
4.ELA
- 將圖像經過一個固定質量壓縮保存后,兩個不同區域表現不同,據此來得到篡改區域的位置。
最后,他們對上述概率圖在同一網絡中進行訓練,對輸出結果取交集,即可得到分割模型的最終結果。
2.4 馬賽克檢測
他們借鑒了一個輕量的馬賽克檢測算法:(https://github.com/summer4an/mosaic_detector.git),針對性地做了一些優化調整,然后對測試數據進行了馬賽克區域的提取。效果圖如下:
2.5 同源比對
他們發現測試數據和訓練數據存在同源性,即不同篡改圖片來自同一張種子圖片。
於是他們想到可以通過比對同源圖片之間的差異來定為篡改區域。整個方法分為下面3個步驟:
-
同源匹配,為每一個圖片找到同源圖。基本流程如下:
- 提取sift特征
- 利用sift特征,對所有圖片進行兩兩暴力匹配,根據匹配程度確定是否同源。
- 對2的結果中置信度較低的情況,額外采用像素匹配的暴力搜索方法來進一步確認同源性
-
同源圖片差異區域提取。他們按同源程度開發了3種提取算法:
-
高度同源:圖片沒有經過resize,直接做像素匹配然后比較兩個圖片的diff。
-
中度同源:圖片經過resize,需要resize到相同大小,然后利用1的方法來比對差異。
-
輕度同源:同一物體,但來自於不同角度、不同背景的拍攝,需要對兩個圖片先做一些亮度校准,再利用sift特征進行透視變換,將兩個物體拉伸成基本一致的形狀。
-
-
篡改區域識別
在找到一對同源圖片的差異區域之后,怎么判斷這個區域哪張圖是經過了篡改,哪張圖沒經過篡改呢?他們采用了幾個技巧:
-
a. 通過如果其中一張圖來自於訓練集,則可以利用這個圖的ground truth來幫助判斷。
-
b. 如果兩個圖都沒有ground truth,則通過提取ELA、Mantranet等概率圖,利用這個區域的概率均值來輔助判斷。
-
最后他們將前面幾個方法得到的mask結果進行融合。通過試驗不同的融合方案,得到了一個最終的結果。
Rank Top2解決方案
3.1 Baseline:RRU-Net
RRU-Net是基於U-Net 提出了一種環狀殘差網絡 RRU-Net 用於圖像拼接偽造檢測。RRU-Net 的核心思想是加強 CNN 的學習方式,並由CNN中殘差的傳播和反饋過程實現。殘余傳播調用輸入的特征信息以解決更深層網絡中的梯度退化問題;殘差反饋合並輸入特征信息,使未篡改區域和篡改區域之間的圖像屬性差異更加明顯。具體介紹可以看這里。
3.2 數據預處理
-
滑窗crop,將圖像尺寸crop到一致,這樣降低了顯存占用,並且也能提升訓練時的batch size,選擇的窗口大小為512*512。
-
在crop的時候設置了一個閾值,將不符合閾值的數據丟棄。因為數據經過crop之后,數量增多,去除一些極端數據,例如全白的區域。
-
訓練集引入了含有splcing特征的外部數據集 cassia 2.0。
-
將訓練集分為一次篡改和二次篡改的兩部分,這個區分該隊是根據官方提供賽道一和賽道二數據集的規律,賽道一的數據都是只有發生一次篡改的圖片,賽道二的數據部分數據是發生篡改后再篡改的圖片。
3.3 孿生網絡
參考孿生網絡的思想,在網絡的輸入部分實例化兩個結構相同但是參數不共享的encoder分別編碼一次篡改和二次篡改的圖像,將得到特征圖進行相加,最終經過decoder輸出mask,模型結構如下:
最終結果如下,可以從圖中看出,mask中綠色部分為模型檢測明顯篡改區域(easy sample)得到,圖中紅色方框中為模型利用輔助信息進行檢測特征較弱區域(hard sample)得到。
該模型不僅能檢測到圖像中大部分的篡改區域,也就是easy sample,而且還能利用一次篡改圖中的輔助信息,幫助模型對於部分hard sample進行檢測。
Output:圖中紅色框內為hard sample,綠色框內為easy sample。
Rank Top3解決方案
代碼鏈接:
https://github.com/HighwayWu/Tianchi-FFT2
4.1 Baseline:UNet
111
Unet 是非常經典的圖像分割算法,具體介紹可以看快速回顧U-Net Family
4.2 數據預處理
- 數據擴增
- 由於原始訓練集數據較少,且大量重復,所以重新制作了一批數據用於訓練。擴增方式:
- 按照賽道一的圖像處理方法對賽道一的圖片進行篡改。(放置於…/s2_data/expand_data/s1_fake_w/)
- 從網絡下載了一批證書類文件並按照賽道一的圖像處理方法進行篡改。(放置於…/s2_data/expand_data/online_*/)
- 將原始訓練集中所拍攝的書籍封面類(以下簡稱書籍類)圖片進行PS/拼接篡改。(放置於…/s2_data/expand_data/book_*/)
- 在訓練的過程中隨機對訓練集圖像進行縮放(90%~110%)、旋轉、翻轉、噪聲,以及最后在隨機位置裁剪出512x512的小圖像。具體請看…/code/main.py中Dataset類的aug函數。
- 按照賽道一的圖像處理方法對賽道一的圖片進行篡改。(放置於…/s2_data/expand_data/s1_fake_w/)
- 訓練集、驗證集划分:
- 由於原始訓練集大量數據來源相同,若簡單使用隨機划分訓練集、驗證集則容易導致過擬合,所以按照不同源將訓練集進行簡單划分為四個fold。
4.2 模型方案
- Se-Resnet50作為編碼器
該隊將Se-Resnet50作為編碼器,Se-Resnet50 就是將在 ResNet50網絡中引入SE模塊,我們先介紹SE模塊:
SE模塊是在ImageNet冠軍模型SE-Net中提出的block,SE模塊看成是channel-wise的attention,可以嵌入到含有skip-connections的模塊中,ResNet,VGG,Inception等等,SE結構如下圖:
通過上圖可以理解他的實現過程,通過對卷積的到的feature map進行處理,得到一個和通道數一樣的一維向量作為每個通道的評價分數,然后將改分數分別施加到對應的通道上,得到其結果,就在原有的基礎上只添加了一個模塊。
-
Se-Resnet:
-
U-Net 引入 scSE感知模塊
該隊參考了FCN 加入SE模塊的方法https://arxiv.org/abs/1808.08127,構建了三種新的模塊cSE、sSE、scSE,最終將scSE感知模塊加入到U-Net中,這一改進十分有效主要是因為其進行的"感知"操作能夠很好的讓模型對篡改區域的特征進行re-weighting。
簡單來說cSE和sSE分別是根據通道和feature map cell的重要性來校准采樣。scSE則是同時進行兩種不同采樣校准,並將它們的結果結合起來使用。
-
scSE代碼如下:
class SCSEModule(nn.Module): def __init__(self, ch, re=16): super().__init__() self.cSE = nn.Sequential(nn.AdaptiveAvgPool2d(1), nn.Conv2d(ch,ch//re,1), nn.ReLU(inplace=True), nn.Conv2d(ch//re,ch,1), nn.Sigmoid()) self.sSE = nn.Sequential(nn.Conv2d(ch,ch,1), nn.Sigmoid()) def forward(self, x): return x * self.cSE(x) + x * self.sSE(x)
-
-
圖像篡改檢測模型一二
轉自公共號【AI約讀社】圖像篡改檢測方法總結
背景介紹
篡改技術中,拼接(splicing),復制移動 (copy-move) 和擦除填充 (removal) 是最常見的操作。
- 圖像拼接是指真實圖像中復制區域並將其粘貼到其他圖像;
- 復制移動是指復制並粘貼到同一圖像中的區域;
- 擦除填充操作是指會從真實圖像中消除區域,然后進行修補。
人類在識別復制移動方面可能比檢測剪切粘貼和擦除填充更好。這是因為在復制移動圖像中,人眼可以感覺到類似物體的重復。對於剪切粘貼和擦除填充圖像,人類在很大程度上依靠尋找明顯的邊緣不連續和照明不一致來確定是否發生了篡改。
因此,當在經過良好篡改的圖像中視覺上看不到不一致之處時,人類將無法檢測到篡改。之前傳統的圖像處理方法提出了探索邊緣不連續和照明不一致性的算法,以協助並超越人類在篡改檢測任務中的能力。
近年來,隨着深度學習技術的不斷發展,它們也在圖像篡改檢測領域實現突破,准確率大幅提升。當前深度學習的圖像篡改區域定位方法主要有以下三種方向:
- 將篡改區域定位認為是像素級的二分類,采用圖像分割的算法來定位篡改區域。
- 將篡改區域定位當作是目標檢測任務,采用目標檢測算法來定位篡改區域。
- 將篡改區域定位當作是局部異常檢測,采用CNN + LSTM網絡檢測圖像中的局部異常。
接下來為大家帶來近年來這三個方向具有代表性的圖像篡改區域定位方法。
RRU-Net
RRU-Net: The Ringed Residual U-Net for Image Splicing Forgery Detection
發表在:CVPRW 2019
論文:https://ieeexplore.ieee.org/document/9025485
代碼:https://github.com/yelusaleng/RRU-Net
類型:拼接
方法:作者基於 U-Net 提出了一種環狀殘差網絡 RRU-Net 用於圖像拼接偽造檢測。RRU-Net 是一個端到端的圖像本質屬性分割網絡,無需任何預處理和后處理即可完成偽造區域檢測。RRU-Net 的核心思想是加強 CNN 的學習方式,並由CNN中殘差的傳播和反饋過程實現。殘差傳播調用輸入的特征信息以解決更深層網絡中的梯度退化問題;殘差反饋合並輸入特征信息,使未篡改區域和篡改區域之間的圖像屬性差異更加明顯。
實驗結果:RRU-NET 在 CASIA1.0 和 COLUMB 兩個偽造圖像數據集上的實驗結果,CASIA 1.0 包括的篡改方式有拼接和復制粘貼攻擊方式,但是本文只選取了其中的拼接攻擊方式的數據集。COLUMB 是只包含拼接攻擊的數據集。
簡評:
- RRU-Net的主要創新體現在 Ringed Residual Structure,與其它方法不同是 RRU-Net 不直接設置檢測偽造圖像痕跡的特征,而是通過 residual feedback 機制讓 CNN 自己去學習圖片屬性的差異特征,屬於一種強化 CNN 學習的方法,並且經過實驗證明了這種利用殘差反饋方式自動學習圖片屬性差異的特征是有效的。
ManTra-Net
ManTra-Net: Manipulation Tracing Network For Detection And Localization of Image Forgeries With Anomalous Features
發表在CVPR2019
代碼:https://github.com/ISICV/ManTraNet
類型:拼接、移除、復制粘貼
方法:作者提出了一個不需要額外的預處理和后處理的篡改檢測網絡ManTra-Net。此網絡是一個全卷積網絡,可以處理任意尺寸的圖像和多種篡改類型。主要的貢獻在於用一個自監督學習的方式從385篡改類型中學習特征。並且將篡改定位問題當做一個局部異常點檢測問題來解決。使用Z-score特征表示局部異常,使用long short-term memory solution進行評估。
實驗結果:CASIA 2.0作為訓練集 CASIA1.0作為測試集。
簡評:
- ManTra-Net 的創新之處在於設計了一個簡單而有效的自我監督學習任務,以通過對385種圖像操作類型進行分類來學習強大的圖像操作軌跡。此外,我們將偽造定位問題公式化為局部異常檢測問題,設計Z分數功能以捕獲局部異常。ManTra-Net的優點主要在於它對於絕大多數的篡改攻擊方式的有效果,因為它利用了自監督學習篡改的類型,因此有效的檢測多種篡改方式,並且具有不錯的魯棒性,可以說是每個方式都有優勢,但單獨一種方式下不一定是最優的方法。
RGB-N
Learning Rich Features for Image Manipulation Detection
發表在:CVPR 2018
論文:https://arxiv.org/abs/1805.04953
代碼:https://github.com/LarryJiang134/Image_manipulation_detection
類型:拼接、移除
方法:提出了一種雙流的Faster R-CNN網絡,給定manipulated image,對其進行端到端的訓練,以便檢測被篡改的區域。雙流分別為RGB stream、noise stream。其中,RGB stream主要目的是從RGB圖像輸入中提取特征,從而發現篡改區域強烈對比差異,非自然的篡改邊界等之類的tampering artifacts。Noise stream 主要利用噪聲特征去發現在真實區域和篡改區域之間的噪聲不一致性,噪聲特征是從steganalysis rich model filter layer中提取的。之后,通過bilinear pooling layer融合兩個流的特征,以便進一步結合這兩種模態的空間信息。
實驗結果:CASIA 2.0作為訓練集 CASIA1.0作為測試集。
簡評:
- 該方法利用篡改區域與原圖噪聲不一致的線索,提出了雙流Fast RCNN,這種方法的優勢在於其具有很好的魯棒性,這是由於當篡改者利用JEPG壓縮或者resize隱藏時,噪聲不一致的線索會更加突顯出來,因此其具有很好的魯棒性和抗干擾的能力。作者在文中分享了這一方法的局限也就是在復制移動的篡改方式下表現不太好,其原因有兩個方面,首先,復制的區域來自同一張圖像,這產生了相似的噪聲分布,從而混淆了的噪聲流。並且,兩個區域通常具有相同的對比度。
精讀
簡介
網絡包含RGB流和噪聲流,其中RGB流用於提取RGB圖像的特征,以發現篡改的偽像,例如強烈的對比度差異,不自然的篡改邊界等,另一個是噪聲流,它利用從富隱寫分析模型分析的濾波器層(SRM)提取的噪聲特征來發現真實區域和篡改區域之間的噪聲不一致。然后,通過雙線性池化層融合來自兩個流的特征根據豐富的特征,根據RGB特征和噪聲特征來檢測圖像篡改區域和篡改的方式。
噪聲流的線索依據.
為什么要再加入一個噪聲流,這是因為采用了局部噪聲特征的方法。由於RGB通道不足以解決所有不同的篡改攻擊方式,尤其是,經過精心后處理以隱藏拼接邊界並減少對比度差異的篡改圖像,這種情況對於僅用RGB流而言是較為困難的。當從一個圖像(源)中刪除一個對象並將其粘貼到另一個圖像(目標)中時,源和目標圖像之間的噪聲特征不匹配。那么如何實現給圖像增加噪聲呢?作者希望通過Steganalysis Rich Model獲得噪聲圖片。
Steganalysis Rich Model 最早是應用在隱寫術(是一種將消息嵌入到數字載體的技術如圖像、視頻等),SRM功能從30個基本濾波器開始,濾波后在輸出附近使用最大值和最小值等非線性操作, 從該過程中獲得的特征可以被視為局部噪聲描述符。作者在實驗中發現,僅使用 SRM 其中的3個濾波器就可以實現不錯的性能,而應用所有30個內核並不能顯着提高性能,因此使用下面3個濾波器獲取像素值與相鄰像素的差值估計來實現圖片添加噪聲的功能。
下圖是分別經過拼接,復制移動和擦除填充后的篡改圖像,以及通過SRM層的噪聲圖,從圖中可以清晰的看出加入噪聲后篡改區域的噪聲與真實區域的較大區別。
網絡結構
作者采用了一個雙流的FasterRCNN 的結構, 分別包括RGB流和噪聲流。RGB流輸入RGB圖像, 噪聲流中輸入SRM圖像。兩部分共享相同的 ROI 層,同時執行分類和邊界框回歸兩個操作。作者通過雙線性池融合兩個流的特征進行分類,RPN利用RGB流的特征進行邊界框的回歸。
-
RGB Stream
RGB流采用的是單個Faster RCNN 網絡提取RGB圖像特征並用分類和邊界框回歸,主干使用的是 ResNet 101 網絡提取圖像特征,ResNet的最后一個卷積層的輸出 feature map用於分類篡改類型。RGB流中的RPN網絡利用這些特征為邊界框回歸提供 propose RoI,Loss function 如下:
\[\begin{array}{r} L_{R P N}\left(g_{i}, f_{i}\right)=\frac{1}{N_{c l s}} \sum_{i} L_{c l s}\left(g_{i}, g_{i}^{\star}\right) +\lambda \frac{1}{N_{r e g}} \sum_{i} g_{i}^{\star} L_{r e g}\left(f_{i}, f_{i}^{\star}\right) \end{array} \]
\(g_{i}\) 表示 anchor i 在一個 batch 中是潛在的被篡改區域的概率, \(g_{i}^{\star}\) 表示對於 anchor i 的 ground-truth 是 positive,\(f_{i}\) 和 \(f_{i}^{\star}\)分別是anchor i 和 ground-truth 的四維邊界框坐標。\(L_{cls}\)表示RPN網絡的交叉熵,\(L_{reg}\)表示用於平滑提議邊界框回歸的L1損失。\(N_{cls}\)表示在RPN中 batch 的 大小,\(L_{reg}\)是anchor location的數目。λ用來平衡這個兩個損失。
-
Noise Stream
噪聲流和RGB流的結構采用一樣的主干結構 ResNet 101 網絡。原圖經過SRM層變成噪聲圖片輸入噪聲流當中,ResNet 101 網絡提取噪聲特征。噪聲流與 RGB 流共享相同的 ROI 層,提取出的特征僅用於分類。需要注意的是對於邊界框回歸,作者只使用 RGB 通道,因為作者經過實驗,發現RGB 特征在 RPN 網絡中的性能優於噪聲特征。
-
Bilinear Pooling
作者采用雙線性池(BilinearPooling)的方法將 RGB 流與噪聲流結合起來進行篡改檢測。Bilinear Pooling 雙線性池 可以很好的結合了雙流 cnn 網絡中的特征,同時保留空間信息,以提高檢測置信度。下面是雙線性池的結構。
直觀上理解,所謂bilinear pooling,就是先把在同一位置上的兩個特征雙線性融合(相乘)后得到矩陣 ,對所有位置進行sum pooling(也可以是max pooling,但一般采用sum pooling以方便進行矩陣運算)得到矩陣,最后把矩陣展開成一個向量,記為bilinear vector。對進行sqrt操作和L2歸一化操作后,就得到融合后的特征。將RGB特征和噪聲特征經過雙線性池融合的特征用於分類,經過全連接層和 softmax 層獲得 RoI regions 的篡改類型。總的損失函數如下:
\[L_{\text {total }}=L_{R P N}+L_{\text {tamper }}\left(f_{R G B}, f_{N}\right)+L_{b b o x}\left(f_{R G B}\right) \]
\(L_{R P N}\)是RPN網絡中的loss。\(L_{tamper}\)表示最后的交叉熵分類損失;\(L_{b b o x}\)表示最后的邊界框回歸損失;\(f_{R G B}\)和\(f_{N}\)表示來自RGB和noise stream的RoI features。
MFCN
Image Splicing Localization using a Multi-task Fully Convolutional Network (MFCN)
發表在Journal of Visual Communication and Image Representation ,影響因子:2.45
論文:https://arxiv.org/pdf/1709.02016.pdf
類型:拼接攻擊
方法:作者提出了一種利用完全卷積網絡(FCN)定位圖像拼接攻擊的技術。采用 Multi-task FCN,該方法有兩個分支,一個用於學習像素是否發生篡改的標簽信息,另一個用於學習篡改區域邊界信息。最后學習出篡改區域和篡改邊界,通過將篡改邊界圍成的區域進行填充,將填充后的區域和檢測的篡改區域取交集就是最終的結果了。
實驗結果:
MFCN 將CASIA V2.0作為訓練集然后在 CASIA V1.0 和 Columbia 數據集上測試,指標:F1-Score
簡評:
- MFCN 采用了多任務全卷積的方式,創新之處在於提出學習同時學習篡改區域和篡改邊界,增加篡改區域的准確性,作者在文中也提出這個方法的問題,那就是篡改圖像JEPG壓縮后篡改的邊緣特征會被影響,因此該方法不能很好的抵抗JEPG壓縮攻擊,還有一個缺點就是沒有代碼,復現難度較高。其突出點是 MFCN 在 CASIA v1.0 取得了相當高的成績 0.5410。
D-Unet
論文:D-Unet: A Dual-encoder U-Net for Image Splicing Forgery Detection and Localization
鏈家:https://arxiv.org/abs/2012.01821
摘要
當前大多數基於卷積神經網絡(CNN)的檢測方法來進行圖像拼接偽造(篡改)檢測的方法都集中在局部補丁或局部對象上。實際上,圖像拼接偽造檢測是一項利用圖像指紋識別篡改和未篡改區域的全局二值分類任務。然而,基於CNN 的檢測網絡很難保留一些具體的圖像內容,但是如果包含其中,將會提高網絡的檢測精度。為了解決這些問題,作者提出了一種新的雙編碼器D-Unet用於圖像拼接偽造檢測,該網絡采用了不固定的編碼器和固定的編碼器。不固定的編碼器能夠自主學習區分篡改和未篡改區域的圖像指紋,而固定的編碼器提供方向信息,以幫助網絡的學習和檢測。該雙編碼器采用了空間金字塔全局特征提取模塊(SPGFE),擴展了D-Unet的全局洞察力,可以更准確地分類被篡改和未被篡改的區域。在對D-Unet和最新方法的實驗比較研究中,D-Unet在圖像級和像素級檢測方面優於其他方法,且不需要對大量偽造圖像進行預訓練或訓練。同時,該算法對各種攻擊具有穩定的魯棒性。
網絡結構
用於圖像拼接偽造檢測的雙編碼器D-Unet的結構如下圖所示,D-Unet的不固定編碼器自主學習區分篡改和未篡改區域的圖像指紋。固定編碼器提取圖像中像素的方向信息,並在檢測網絡的學習和決策過程中與非固定編碼器配合使用。接下來,通過空間金字塔全局特征提取模塊(SPGFE)擴展D-Unet的全局感受野,該SPGFE可以獲取具有全局特征的低分辨率特征圖。最終,解碼器從低分辨率特征圖學習映射,並對篡改區域進行逐像素預測,接下來我們介紹D-Unet的不固定編碼器,固定編碼器和SPGFE模塊。作者進行了充足的實驗證明每個模塊的有效性,本文受篇幅限制主要介紹方法,有興趣的小伙伴可以閱讀原文了解實驗細節。
2.1 不固定編碼器
D-Unet的不固定編碼器用於學習區分篡改和未篡改區域的圖像指紋,作者采用了U-Net作為D-Unet的基本架構,其中不固定編碼器的結構與U-Net編碼器結構相同。由於圖像指紋通常具有基本的圖像屬性,而不是高級語義特征。較深層網絡學習高級語義信息,並失去基本的圖像屬性。相反,較淺層網絡的學習特征不足以探索篡改和非篡改區域的不同圖像指紋,因此選擇合適的下采樣層數很重要。同時檢測網絡中的下采樣方式也很重要,需要保持甚至增強圖像指紋。
作者改變了UNet的深度和下采樣方式進行了對比實驗,實驗中用UNET-N-M,UNET-N-C表示不同的U-NET,其中中間的數字N代表下采樣的深度,最后一個字母M和C分別代表maxpooling and stride-2 convolution的下采樣方式,實驗結果如下表所示UNET-4-C效果最好,就是采用stride-2 convolution的下采樣方式並且層數為4。
2.2 固定編碼器
不固定的編碼器負責學習在篡改區域和非篡改區域之間進行區分的圖像指紋,而固定編碼器則負責學習特定的圖像指紋, 圖像中普遍存在的特定圖像指紋被認為可以直接提高檢測網絡的學習效率。作者測試了兩種不同方式的編碼器學習特定的圖像指紋分別:1. SRM(富隱寫模型) 2. DWT(三級小波分解)。
固定SRM編碼器
SRM最早是在LSN中使用在圖像篡改檢測領域,主要是基於圖像篡改區域噪聲不一致性,RGB圖像的三個通道通過具有三個SRM內核的SRM層可以獲取噪聲特征圖,然后將噪聲圖通過三個卷積層,每個卷積層的內核大小為5×5,卷積跨度為2。最后,對固定SRM編碼器的輸出特征進行下采樣,並與不固定的輸出特征簡單地融合在一起,結構如下圖所示:
固定DWT編碼器
離散小波變換(DWT)能夠保留像素的方向信息,有利於檢測篡改邊緣。作者在輸入RGB圖像的每個顏色通道上執行三級Haar離散小波變換(DWT),如下圖所示。三級小波分解(每級12(3×4)個特征圖)。固定DWT編碼器的輸出特征與非固定編碼器的輸出特征圖通過簡單融合方法(SF)融合。
固定編碼器和不固定編碼器的融合
作者嘗試了兩種融合方法:(1)輸出特征圖簡單融合方法(SF)融合(如下圖a),(2)固定和非固定編碼器之間的分層融合(HF)方法(如下圖b)
作者對固定SRM編碼器和固定DWT編碼器以及使用簡單(SF)融合方法和分層融合(HF)方法進行了測試,實驗結果如下表所示,采用固定DWT編碼器和分層融合(HF)方法取得了最好效果,證實了在解碼過程中將像素的方向信息提供給Unet-4-C的有效性,並且HF改善了在Unet-4-C中提供像素方向信息的有效性。
2.3 空間金字塔全局特征提取模塊(SPGFE)
為了進一步擴展檢測網絡的全局視野,作者在雙編碼器之后設計了一個空間金字塔全局特征提取模塊(SPGFE)。SPGFE受到人類視覺決策的啟發。為了觀察物體的局部,人類會接近該物體。為了獲得全局視圖,它們會離開對象。提出的SPGFE模塊下圖所示。固定和非固定編碼器生成的局部特征圖會通過三個分支,這些分支會生成不同比例的全局特征圖。小型,中型和大型全局特征圖通過1×1卷積層進行連接和操作,並輸出最終的多尺度全局特征圖。具有不同大小的三個卷積核等效於距對象的不同觀察距離。
實驗結果
D-UNET在通用的圖像篡改數據集CASIA、COLUMB、NIST16上表現SOTA,性能優於FusionNet、C2RNet和RRU-Net等網絡。
接着作者對D-UNET的抗攻擊能力也做了測試,實驗結果表明D-UNET對各種攻擊具有穩定的魯棒性。
總結
這篇文章提出了一種新的雙編碼器D-Unet用於圖像拼接偽造檢測,該網絡采用了不固定的編碼器和固定的編碼器,實驗證明D-Unet在圖像級和像素級檢測方面優於其他方法,且不需要對大量偽造圖像進行預訓練或訓練。同時,該算法對各種攻擊具有穩定的魯棒性。