各位 AI 愛好者們,準(zhǔn)備好通過各種 AI 技術(shù)來應(yīng)對一個迫切需要被解決的全球問題了嗎?MathWorks 誠邀您參加 2025 IEEE Signal Processing Cup 挑戰(zhàn)賽:“野外深度偽造人臉檢測”(DFWild-Cup)。
為什么挑戰(zhàn)深度偽造?
隨著合成數(shù)據(jù)生成的興起,深度偽造已成為一個重大威脅——它能夠操縱公眾輿論,甚至導(dǎo)致身份盜竊。在這個挑戰(zhàn)賽中,您可以運用在現(xiàn)實世界場景中獲得的多樣化的數(shù)據(jù),來設(shè)計與實現(xiàn)算法,以識別面部圖像的真實性。
參加挑戰(zhàn)有什么好處?
您不僅有機會應(yīng)用 AI 技術(shù)處理一個亟待解決的全球問題,還能有機會在IEEE ICASSP 2025——全球最大的信號處理技術(shù)學(xué)術(shù)會議上展示您的作品以贏取5000 美元的大獎!
您準(zhǔn)備好了嗎?
開始設(shè)置環(huán)境并啟動深度偽造檢測項目吧!您可以點擊閱讀原文,在打開網(wǎng)頁的右下方,點擊“Download Live Script”來獲取這個項目的MATLAB 入門代碼。
如果您所在的學(xué)校沒有MATLAB 全校使用授權(quán),您可以訪問 MathWorks 的 IEEE Signal Processing Cup 網(wǎng)站 ,申請免費的MATLAB競賽軟件許可并獲取其他相關(guān)學(xué)習(xí)資源。您也可以訪問MATLAB Academy 學(xué)習(xí)多門免費自定義進(jì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ò)
第六步:測試神經(jīng)網(wǎng)絡(luò)
第七步:創(chuàng)建提交
總結(jié)
第一步:加載數(shù)據(jù)
注冊您的團隊,然后獲取下載訓(xùn)練和驗證數(shù)據(jù)集的說明。將這些壓縮文件存放在當(dāng)前目錄下名為 datasetArchives 的子文件夾中。
下面的代碼將幫您自動解壓這些文件,并將數(shù)據(jù)集整理到“real”和“fake”類別中:
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ù)格式允許我們存儲大量的圖像數(shù)據(jù),包括那些超出內(nèi)存容量的,并在神經(jīng)網(wǎng)絡(luò)訓(xùn)練期間高效地批次讀取圖像。
以下是為訓(xùn)練和驗證數(shù)據(jù)集分別創(chuàng)建 Image Datastore 的方法。您需要在函數(shù) imageDatastore 中指定其所需要包含圖像的文件夾,并指明子文件夾名稱對應(yīng)于圖像的標(biāo)簽,然后可以利用 shuffle 函數(shù)對圖像進(jìn)行隨機排序的處理。
trainImdsFolder=fullfile(datasetsFolder,'train'); validImdsFolder = fullfile(datasetsFolder,'valid'); imdsTrain=shuffle(imageDatastore(trainImdsFolder,... IncludeSubfolders=true,... LabelSource="foldernames")); imdsValid=shuffle(imageDatastore(validImdsFolder,... IncludeSubfolders=true,... LabelSource="foldernames"));
通過檢查 Image Datastore 中所包含文件的大小,您可以看到這個挑戰(zhàn)賽的訓(xùn)練數(shù)據(jù)集包含 26,2160 張圖像,而驗證數(shù)據(jù)集只包含 3072 張圖像。由于目前我們還沒有獲得用于評估性能的測試數(shù)據(jù)集,可以使用 splitEachLabel 函數(shù)將訓(xùn)練數(shù)據(jù)集劃分為兩個新的 Image Datastore,如:10% 用于訓(xùn)練、2% 用于測試。
[imdsTrain,imdsTest] = splitEachLabel(imdsTrain,0.1,0.02,"randomized")
現(xiàn)在您可以獲取數(shù)據(jù)集標(biāo)簽的類別名稱和數(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)練、驗證和測試數(shù)據(jù)集的 Image Datastore 都已經(jīng)準(zhǔn)備好了!下一步是加載一個預(yù)訓(xùn)練好的網(wǎng)絡(luò)或創(chuàng)建一個新網(wǎng)絡(luò)模型。
如果您是深度學(xué)習(xí)的新手,可以使用像 ResNet 或 VGG 這樣的預(yù)訓(xùn)練網(wǎng)絡(luò)來節(jié)省時間并提高性能。MATLAB 提供了一些預(yù)訓(xùn)練模型,可以作為起點。以下是加載預(yù)訓(xùn)練網(wǎng)絡(luò)的簡單方法:我們使用函數(shù) imagePretrainedNetwork 來加載一個具有指定標(biāo)簽類別數(shù)量的預(yù)訓(xùn)練好的 ResNet-50 神經(jīng)網(wǎng)絡(luò)作為示例。請注意,在運行代碼之前,您需要在 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】是一個可以用來設(shè)計和可視化深度學(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ò)的輸入尺寸,并通過數(shù)據(jù)增強來提高模型的魯棒性。數(shù)據(jù)增強技術(shù),如旋轉(zhuǎn)、縮放和翻轉(zhuǎn),可以使模型更具泛化能力。MATLAB 提供了便捷的內(nèi)置函數(shù),如 imageDataAugmenter 和 augmentedImageDatastore。
這里我們采用的增強操作包括:隨機沿垂直軸翻轉(zhuǎn)訓(xùn)練圖像,以及在訓(xùn)練圖像上隨機進(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);
您需要注意的是:對于驗證和測試圖像,我們只需要調(diào)整大小而不需要進(jìn)行其他增強處理。因此,我們使用 augmentedImageDatastore 函數(shù)來自動調(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)備就緒后,我們可以開始訓(xùn)練模型了。
在遷移學(xué)習(xí)里,一般具有可學(xué)習(xí)參數(shù)的最后一層需要重新訓(xùn)練。它通常是一個全連接層或一個輸出大小與標(biāo)簽類別數(shù)量匹配的卷積層。為了增加對該層的更新程度并加速收斂,您可以使用 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)練選項,如優(yōu)化器和學(xué)習(xí)率等。這些選擇需要進(jìn)行經(jīng)驗分析。您可以使用MATLAB 的 Experiment Manager 應(yīng)用程序,通過實驗探索不同的訓(xùn)練選項。
作為示例,我們將訓(xùn)練選項設(shè)置如下:
使用 Adam 優(yōu)化器進(jìn)行訓(xùn)練。
為了減少對預(yù)訓(xùn)練權(quán)重的更新程度,使用較小的學(xué)習(xí)率。將學(xué)習(xí)率設(shè)置為 0.0001。
每 5 次迭代使用驗證數(shù)據(jù)驗證網(wǎng)絡(luò)。對于較大的數(shù)據(jù)集,為防止驗證減慢訓(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ò)。對于圖像分類,您可以使用交叉熵?fù)p失。要使用 GPU 訓(xùn)練模型,你需要一個Parallel Computing Toolbox 的許可證和一個支持的 GPU 設(shè)備。有關(guān) MATLAB 所支持設(shè)備的更多信息,請參閱 GPU 計算要求。
默認(rèn)情況下,如果有可用的 GPU,trainnet 函數(shù)將使用 GPU。否則,它將使用 CPU。您還可以在訓(xùn)練選項中設(shè)置 ExecutionEnvironment 參數(shù)以指定執(zhí)行環(huán)境。
net = trainnet(augimdsTrain,net,"crossentropy",options);
第六步:測試神經(jīng)網(wǎng)絡(luò)
然后在測試數(shù)據(jù)集上評估訓(xùn)練好的模型,以測試模型在未知數(shù)據(jù)上的表現(xiàn)。您可以使用 minibatchpredict 函數(shù)對多個觀測進(jìn)行預(yù)測。該函數(shù)也會在有可用 GPU 的情況下自動使用 GPU。
YTestScore = minibatchpredict(net,augimdsTest);
您還可以使用 scores2label 函數(shù)將預(yù)測得分轉(zhuǎn)換為標(biāo)簽值。
YTest = scores2label(YTestScore,classNames);
讓我們評估分類準(zhǔn)確率,即測試數(shù)據(jù)的正確預(yù)測百分比,并在混淆矩陣中可視化分類準(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)您對訓(xùn)練的模型感到滿意時,可以將其應(yīng)用于識別之后所發(fā)布的測試數(shù)據(jù)集并創(chuàng)建提交!由于目前用于評估的測試數(shù)據(jù)集目前還沒有發(fā)布,我們在這里使用從訓(xùn)練數(shù)據(jù)集中所分割出來的測試數(shù)據(jù)集,展示如何利用代碼自動創(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)成功開啟了深度偽造人臉檢測項目!期待看到大家是如何應(yīng)對這個挑戰(zhàn)的!
最后
別忘了通過 MathWorks 的 2025 IEEE Signal Processing Cup 網(wǎng)站 申請免費的 MATLAB 競賽軟件許可,并探索更多資源!如果您有任何問題,請隨時通過 studentcompetitions@mathworks.com 聯(lián)系我們。
2025 IEEE Signal Processing Cup 將會是大家學(xué)習(xí)、創(chuàng)新并在國際舞臺上展示技能的絕佳機會——不僅能收獲人工智能和信號處理方向?qū)氋F經(jīng)驗,還有機會為這個重要研究領(lǐng)域做出貢獻(xiàn),不容錯過!
-
matlab
+關(guān)注
關(guān)注
184文章
2970瀏覽量
230340 -
AI
+關(guān)注
關(guān)注
87文章
30573瀏覽量
268790 -
代碼
+關(guān)注
關(guān)注
30文章
4769瀏覽量
68487 -
人臉檢測
+關(guān)注
關(guān)注
0文章
80瀏覽量
16454
原文標(biāo)題:集結(jié)令 | IEEE Signal Processing Cup 深度偽造人臉檢測挑戰(zhàn)賽
文章出處:【微信號:MATLAB,微信公眾號:MATLAB】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論