各位 AI 愛(ài)好者們,準(zhǔn)備好通過(guò)各種 AI 技術(shù)來(lái)應(yīng)對(duì)一個(gè)迫切需要被解決的全球問(wèn)題了嗎?MathWorks 誠(chéng)邀您參加 2025 IEEE Signal Processing Cup 挑戰(zhàn)賽:“野外深度偽造人臉檢測(cè)”(DFWild-Cup)。
為什么挑戰(zhàn)深度偽造?
隨著合成數(shù)據(jù)生成的興起,深度偽造已成為一個(gè)重大威脅——它能夠操縱公眾輿論,甚至導(dǎo)致身份盜竊。在這個(gè)挑戰(zhàn)賽中,您可以運(yùn)用在現(xiàn)實(shí)世界場(chǎng)景中獲得的多樣化的數(shù)據(jù),來(lái)設(shè)計(jì)與實(shí)現(xiàn)算法,以識(shí)別面部圖像的真實(shí)性。
參加挑戰(zhàn)有什么好處?
您不僅有機(jī)會(huì)應(yīng)用 AI 技術(shù)處理一個(gè)亟待解決的全球問(wèn)題,還能有機(jī)會(huì)在IEEE ICASSP 2025——全球最大的信號(hào)處理技術(shù)學(xué)術(shù)會(huì)議上展示您的作品以贏取5000 美元的大獎(jiǎng)!
您準(zhǔn)備好了嗎?
開(kāi)始設(shè)置環(huán)境并啟動(dòng)深度偽造檢測(cè)項(xiàng)目吧!您可以點(diǎn)擊閱讀原文,在打開(kāi)網(wǎng)頁(yè)的右下方,點(diǎn)擊“Download Live Script”來(lái)獲取這個(gè)項(xiàng)目的MATLAB 入門(mén)代碼。
如果您所在的學(xué)校沒(méi)有MATLAB 全校使用授權(quán),您可以訪問(wèn) MathWorks 的 IEEE Signal Processing Cup 網(wǎng)站 ,申請(qǐng)免費(fèi)的MATLAB競(jìng)賽軟件許可并獲取其他相關(guān)學(xué)習(xí)資源。您也可以訪問(wèn)MATLAB Academy 學(xué)習(xí)多門(mén)免費(fèi)自定義進(jìn)度的在線入門(mén)課程。
目錄
第一步:加載數(shù)據(jù)
第二步:創(chuàng)建 Image Datastores
第三步:加載或創(chuàng)建網(wǎng)絡(luò)
第四步:準(zhǔn)備訓(xùn)練數(shù)據(jù)
第五步:訓(xùn)練神經(jīng)網(wǎng)絡(luò)
第六步:測(cè)試神經(jīng)網(wǎng)絡(luò)
第七步:創(chuàng)建提交
總結(jié)
第一步:加載數(shù)據(jù)
注冊(cè)您的團(tuán)隊(duì),然后獲取下載訓(xùn)練和驗(yàn)證數(shù)據(jù)集的說(shuō)明。將這些壓縮文件存放在當(dāng)前目錄下名為 datasetArchives 的子文件夾中。
下面的代碼將幫您自動(dòng)解壓這些文件,并將數(shù)據(jù)集整理到“real”和“fake”類(lèi)別中:
datasetArchives=fullfile(pwd,"datasetArchives"); datasetsFolder=fullfile(pwd,"datasets"); if~exist(datasetsFolder,'dir') mkdir(datasetsFolder); untar(fullfile(datasetArchives,"train_fake.tar"),fullfile(datasetsFolder,"train")); untar(fullfile(datasetArchives,"train_real.tar"),fullfile(datasetsFolder,"train")); untar(fullfile(datasetArchives,"valid_fake.tar"),fullfile(datasetsFolder,"valid")); untar(fullfile(datasetArchives,"valid_real.tar"),fullfile(datasetsFolder,"valid")); end
第二步:創(chuàng)建 Image Datastores
想要高效地處理包含大量圖像的數(shù)據(jù)集,創(chuàng)建 Image Datastore 是必不可少的。這種數(shù)據(jù)格式允許我們存儲(chǔ)大量的圖像數(shù)據(jù),包括那些超出內(nèi)存容量的,并在神經(jīng)網(wǎng)絡(luò)訓(xùn)練期間高效地批次讀取圖像。
以下是為訓(xùn)練和驗(yàn)證數(shù)據(jù)集分別創(chuàng)建 Image Datastore 的方法。您需要在函數(shù) imageDatastore 中指定其所需要包含圖像的文件夾,并指明子文件夾名稱對(duì)應(yīng)于圖像的標(biāo)簽,然后可以利用 shuffle 函數(shù)對(duì)圖像進(jìn)行隨機(jī)排序的處理。
trainImdsFolder=fullfile(datasetsFolder,'train'); validImdsFolder = fullfile(datasetsFolder,'valid'); imdsTrain=shuffle(imageDatastore(trainImdsFolder,... IncludeSubfolders=true,... LabelSource="foldernames")); imdsValid=shuffle(imageDatastore(validImdsFolder,... IncludeSubfolders=true,... LabelSource="foldernames"));
通過(guò)檢查 Image Datastore 中所包含文件的大小,您可以看到這個(gè)挑戰(zhàn)賽的訓(xùn)練數(shù)據(jù)集包含 26,2160 張圖像,而驗(yàn)證數(shù)據(jù)集只包含 3072 張圖像。由于目前我們還沒(méi)有獲得用于評(píng)估性能的測(cè)試數(shù)據(jù)集,可以使用 splitEachLabel 函數(shù)將訓(xùn)練數(shù)據(jù)集劃分為兩個(gè)新的 Image Datastore,如:10% 用于訓(xùn)練、2% 用于測(cè)試。
[imdsTrain,imdsTest] = splitEachLabel(imdsTrain,0.1,0.02,"randomized")
現(xiàn)在您可以獲取數(shù)據(jù)集標(biāo)簽的類(lèi)別名稱和數(shù)量,然后按如下方式查看一些面部圖像數(shù)據(jù)。
classNames=categories(imdsTrain.Labels); numClasses=numel(classNames); numImages=numel(imdsTrain.Labels); idx=randperm(numImages,16); I=imtile(imdsTrain,Frames=idx); figure imshow(I)
第三步:加載或創(chuàng)建網(wǎng)絡(luò)
現(xiàn)在,訓(xùn)練、驗(yàn)證和測(cè)試數(shù)據(jù)集的 Image Datastore 都已經(jīng)準(zhǔn)備好了!下一步是加載一個(gè)預(yù)訓(xùn)練好的網(wǎng)絡(luò)或創(chuàng)建一個(gè)新網(wǎng)絡(luò)模型。
如果您是深度學(xué)習(xí)的新手,可以使用像 ResNet 或 VGG 這樣的預(yù)訓(xùn)練網(wǎng)絡(luò)來(lái)節(jié)省時(shí)間并提高性能。MATLAB 提供了一些預(yù)訓(xùn)練模型,可以作為起點(diǎn)。以下是加載預(yù)訓(xùn)練網(wǎng)絡(luò)的簡(jiǎn)單方法:我們使用函數(shù) imagePretrainedNetwork 來(lái)加載一個(gè)具有指定標(biāo)簽類(lèi)別數(shù)量的預(yù)訓(xùn)練好的 ResNet-50 神經(jīng)網(wǎng)絡(luò)作為示例。請(qǐng)注意,在運(yùn)行代碼之前,您需要在 MATLAB 的 “Add-Ons” 下,搜索、下載并安裝名為 “Deep Learning Toolbox Model for ResNet-50 Network” 的插件。
net = imagePretrainedNetwork("resnet50",NumClasses=numClasses);
如果您更傾向于創(chuàng)建自己的網(wǎng)絡(luò)模型,MATLAB 的 Deep Network Designer 應(yīng)用程序【https://www.mathworks.com/help/deeplearning/ug/build-networks-with-deep-network-designer.html】是一個(gè)可以用來(lái)設(shè)計(jì)和可視化深度學(xué)習(xí)網(wǎng)絡(luò)模型的好工具。您還可以使用Deep Network Designer 導(dǎo)入 PyTorch 模型 【https://ww2.mathworks.cn/help/releases/R2024b/deeplearning/ug/import-pytorch-model-using-deep-network-designer.html】。
第四步:準(zhǔn)備訓(xùn)練數(shù)據(jù)
準(zhǔn)備數(shù)主要包括調(diào)整圖像大小以匹配神經(jīng)網(wǎng)絡(luò)的輸入尺寸,并通過(guò)數(shù)據(jù)增強(qiáng)來(lái)提高模型的魯棒性。數(shù)據(jù)增強(qiáng)技術(shù),如旋轉(zhuǎn)、縮放和翻轉(zhuǎn),可以使模型更具泛化能力。MATLAB 提供了便捷的內(nèi)置函數(shù),如 imageDataAugmenter 和 augmentedImageDatastore。
這里我們采用的增強(qiáng)操作包括:隨機(jī)沿垂直軸翻轉(zhuǎn)訓(xùn)練圖像,以及在訓(xùn)練圖像上隨機(jī)進(jìn)行最多 30 像素的水平和垂直平移。
inputSize=net.Layers(1).InputSize; pixelRange=[-3030]; imageAugmenter=imageDataAugmenter(... RandYReflection=true,... RandXTranslation=pixelRange,... RandYTranslation=pixelRange); augimdsTrain=augmentedImageDatastore(inputSize(1:2),imdsTrain,... DataAugmentation=imageAugmenter);
您需要注意的是:對(duì)于驗(yàn)證和測(cè)試圖像,我們只需要調(diào)整大小而不需要進(jìn)行其他增強(qiáng)處理。因此,我們使用 augmentedImageDatastore 函數(shù)來(lái)自動(dòng)調(diào)整大小,而不指定其他任何預(yù)處理操作。
augimdsValid=augmentedImageDatastore(inputSize(1:2),imdsValid); augimdsTest = augmentedImageDatastore(inputSize(1:2),imdsTest);
第五步:訓(xùn)練神經(jīng)網(wǎng)絡(luò)
當(dāng)數(shù)據(jù)和網(wǎng)絡(luò)模型都準(zhǔn)備就緒后,我們可以開(kāi)始訓(xùn)練模型了。
在遷移學(xué)習(xí)里,一般具有可學(xué)習(xí)參數(shù)的最后一層需要重新訓(xùn)練。它通常是一個(gè)全連接層或一個(gè)輸出大小與標(biāo)簽類(lèi)別數(shù)量匹配的卷積層。為了增加對(duì)該層的更新程度并加速收斂,您可以使用 setLearnRateFactor 函數(shù)增加這些層可學(xué)習(xí)參數(shù)的學(xué)習(xí)率因子。這里我們將它們的可學(xué)習(xí)參數(shù)的學(xué)習(xí)率因子設(shè)置為 10。
net=setLearnRateFactor(net,"res5c_branch2c/Weights",10); net = setLearnRateFactor(net,"res5c_branch2c/Bias",10);
接著定義訓(xùn)練選項(xiàng),如優(yōu)化器和學(xué)習(xí)率等。這些選擇需要進(jìn)行經(jīng)驗(yàn)分析。您可以使用MATLAB 的 Experiment Manager 應(yīng)用程序,通過(guò)實(shí)驗(yàn)探索不同的訓(xùn)練選項(xiàng)。
作為示例,我們將訓(xùn)練選項(xiàng)設(shè)置如下:
使用 Adam 優(yōu)化器進(jìn)行訓(xùn)練。
為了減少對(duì)預(yù)訓(xùn)練權(quán)重的更新程度,使用較小的學(xué)習(xí)率。將學(xué)習(xí)率設(shè)置為 0.0001。
每 5 次迭代使用驗(yàn)證數(shù)據(jù)驗(yàn)證網(wǎng)絡(luò)。對(duì)于較大的數(shù)據(jù)集,為防止驗(yàn)證減慢訓(xùn)練速度,可以增加此值。
在圖中顯示訓(xùn)練進(jìn)度并監(jiān)控準(zhǔn)確率指標(biāo)。
禁用詳細(xì)輸出。
options = trainingOptions("adam", ... InitialLearnRate=0.0001, ... MaxEpochs=3, ... ValidationData=augimdsValid, ... ValidationFrequency=5, ... MiniBatchSize=11, ... Plots="training-progress", ... Metrics="accuracy", ... Verbose=false);
然后,使用 trainnet 函數(shù)訓(xùn)練神經(jīng)網(wǎng)絡(luò)。對(duì)于圖像分類(lèi),您可以使用交叉熵?fù)p失。要使用 GPU 訓(xùn)練模型,你需要一個(gè)Parallel Computing Toolbox 的許可證和一個(gè)支持的 GPU 設(shè)備。有關(guān) MATLAB 所支持設(shè)備的更多信息,請(qǐng)參閱 GPU 計(jì)算要求。
默認(rèn)情況下,如果有可用的 GPU,trainnet 函數(shù)將使用 GPU。否則,它將使用 CPU。您還可以在訓(xùn)練選項(xiàng)中設(shè)置 ExecutionEnvironment 參數(shù)以指定執(zhí)行環(huán)境。
net = trainnet(augimdsTrain,net,"crossentropy",options);
第六步:測(cè)試神經(jīng)網(wǎng)絡(luò)
然后在測(cè)試數(shù)據(jù)集上評(píng)估訓(xùn)練好的模型,以測(cè)試模型在未知數(shù)據(jù)上的表現(xiàn)。您可以使用 minibatchpredict 函數(shù)對(duì)多個(gè)觀測(cè)進(jìn)行預(yù)測(cè)。該函數(shù)也會(huì)在有可用 GPU 的情況下自動(dòng)使用 GPU。
YTestScore = minibatchpredict(net,augimdsTest);
您還可以使用 scores2label 函數(shù)將預(yù)測(cè)得分轉(zhuǎn)換為標(biāo)簽值。
YTest = scores2label(YTestScore,classNames);
讓我們?cè)u(píng)估分類(lèi)準(zhǔn)確率,即測(cè)試數(shù)據(jù)的正確預(yù)測(cè)百分比,并在混淆矩陣中可視化分類(lèi)準(zhǔn)確率。
TTest = imdsTest.Labels; accuracy = mean(TTest==YTest); figure confusionchart(TTest,YTest); title(['Accuracy','approx',num2str(round(acc*10000)/100),'%'])
第七步:創(chuàng)建提交
當(dāng)您對(duì)訓(xùn)練的模型感到滿意時(shí),可以將其應(yīng)用于識(shí)別之后所發(fā)布的測(cè)試數(shù)據(jù)集并創(chuàng)建提交!由于目前用于評(píng)估的測(cè)試數(shù)據(jù)集目前還沒(méi)有發(fā)布,我們?cè)谶@里使用從訓(xùn)練數(shù)據(jù)集中所分割出來(lái)的測(cè)試數(shù)據(jù)集,展示如何利用代碼自動(dòng)創(chuàng)建符合提交格式要求的文件。
testImgSize = size(augimdsTest.Files,1); fileId = cell(testImgSize,1); for i = 1:testImgSize fileId{i,1} = augimdsTest.Files{i}(1,end-10:end-4); end resultsTable = table(fileId, YTestScore(:,2)); outPutFilename = 'mySubmission.txt'; writetable(resultsTable,outPutFilename,'Delimiter',' ','WriteVariableNames',false,'WriteRowNames',false) zip([pwd'/mySubmission.zip'],outPutFilename)
至此,您已經(jīng)成功開(kāi)啟了深度偽造人臉檢測(cè)項(xiàng)目!期待看到大家是如何應(yīng)對(duì)這個(gè)挑戰(zhàn)的!
最后
別忘了通過(guò) MathWorks 的 2025 IEEE Signal Processing Cup 網(wǎng)站 申請(qǐng)免費(fèi)的 MATLAB 競(jìng)賽軟件許可,并探索更多資源!如果您有任何問(wèn)題,請(qǐng)隨時(shí)通過(guò) studentcompetitions@mathworks.com 聯(lián)系我們。
2025 IEEE Signal Processing Cup 將會(huì)是大家學(xué)習(xí)、創(chuàng)新并在國(guó)際舞臺(tái)上展示技能的絕佳機(jī)會(huì)——不僅能收獲人工智能和信號(hào)處理方向?qū)氋F經(jīng)驗(yàn),還有機(jī)會(huì)為這個(gè)重要研究領(lǐng)域做出貢獻(xiàn),不容錯(cuò)過(guò)!
-
matlab
+關(guān)注
關(guān)注
185文章
2976瀏覽量
230520 -
AI
+關(guān)注
關(guān)注
87文章
30935瀏覽量
269182 -
代碼
+關(guān)注
關(guān)注
30文章
4789瀏覽量
68643 -
人臉檢測(cè)
+關(guān)注
關(guān)注
0文章
80瀏覽量
16464
原文標(biāo)題:集結(jié)令 | IEEE Signal Processing Cup 深度偽造人臉檢測(cè)挑戰(zhàn)賽
文章出處:【微信號(hào):MATLAB,微信公眾號(hào):MATLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論