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