AI換臉實戰教學(FaceSwap的使用)---------第二步Tools:處理輸入資料集。

2023-01-19 15:00:22

續上篇:https://www.cnblogs.com/techs-wenzhe/p/12936809.html

第一步中已經提取出了源視訊的人臉照片以及對應人臉遮罩(landmark以及其他自選遮罩)

第二步:利用Tools處理提取號好的資料集,使其對模型的訓練產生正向收益。

步驟1:剔除不需要的人臉

首先,我們需要剔除不需要的人臉(對齊識別錯誤以及非想要換臉的目標),做法是對生成的人臉進行聚類,排序。之後把不需要的類別的人臉刪除掉。

這一步的目的是:我們都知道訓練一個模型輸入引數的正確性決定了演演算法的精確度,這一步就是為了去除所有錯誤的,不恰當的輸入資料(圖片)集。我們需要給模型一個清晰,明瞭的可學習物件。

PS:如果你的輸入資料集(人臉圖片很多)過大,請拆分成多個,需要分多次聚類排序。因為這些操作會在RAM中進行,例如:大約22k 張人臉對應大約8G RAM,30k對應11G(還要考慮其他記憶體使用,瀏覽器什麼的==).  根據你電腦的RAM能力,選擇分幾次來處理即可。

GUI的設定如下:

PS: 實際根據有啥模型就用啥,筆者自己辦公用的機器有Face-cnn,所以就選了用這個模型排序,選face的話得需要vggface2_resnet50_v2.zip模型在對應目錄下才行。

 

1.1 Data模組: 

  • 輸入:輸入包含上一步提取的人臉的資料夾。

  • 輸出:留空則基於輸入的檔案內直接排序。

1.2 Sort Settings模組:

  • Sort by:排序的方式,這裡直接選face即可。意思是根據人臉相似度進行排序。當然還有其他排序方式(如基於landmark的Face-CNN,基於模糊度的Blur,基於聚類距離-識別錯誤對齊的distance,基於顏色的Color系列,基於大小的Size系列),實測還是face最有效。

  • Ref Threshold:Sort by內特殊幾種演演算法(face-CNN, Hist)的調節,同樣的值越高越嚴格。(推薦設定為-1即可,代表自動設定預設值) ,face-CNN 7.2就足夠了,設定為4會有較高識別度。Hist 0.3就足夠,設定為0.2 會有較高的識別度

1.3 Output模組:這裡不需要設定任何東西(此部分已完全棄用,並將在未來的更新中刪除。這裡不需要設定任何東西。

 

選好模型,選好資料集(圖片)所在資料夾,選好輸出資料夾,點選sort等待結果即可。

 

可看到是提取圖片中的landmark,根據直方圖分類。

 一旦完成,你應該發現 99% 的面孔被分類在一起,所有垃圾也一起分類,現在只需瀏覽每個垃圾箱(子資料夾),刪除那些您不想保留的面孔/資料夾,然後將您想要保留的任何面孔移回父資料夾。

至此,排序完畢,接下來要清理對齊-alignments檔案

 

步驟2:清理對齊檔案

現在我們已經刪除了所有不需要的面孔,只剩下一組了,接下來要做的是清理對齊檔案(對齊檔案中包含了每張圖片對應的五官所在位置的資料)。因為所有關於不需要的面孔的資訊仍然在檔案中(剛才排序步驟刪除的那些),這很可能在將來給我們帶來麻煩。所以需要刪除不需要圖片的對齊檔案。 使用整合工具清理對齊檔案還有一個額外的好處,可以將我們的面孔重新命名回它們的原始檔名。

步驟如下,找到Tools->Alignments檔案:

根據上圖設定後,點選alignments,完成後面孔將被重新命名為預設名稱,並且所有不需要的面孔就會從對齊檔案中刪除。

該過程將備份舊對齊檔案並將其放在新建立的檔案旁邊的原始位置。它將與您清理過的對齊檔案同名,但在其末尾附加「backup_<timestamp>」。如果對新的對齊檔案正確無誤感到滿意,則可以安全地刪除此備份檔案。

此時,如果正在提取以進行轉換(或者該集合將用於轉換和訓練),那麼可以完全刪除faces 資料夾。不再需要這些面孔。如果您需要重新生成面部集,則可以使用對齊工具的extract來完成。

執行完對齊檔案的清理後,留下來的對齊檔案就是想要訓練的有效資料集(臉)對應的對齊檔案了。

手動清理對齊檔案就不介紹了,詳情參照:https://forum.faceswap.dev/viewtopic.php?f=5&t=27

步驟3:從對齊檔案中提取訓練集

現在已經清理了對齊檔案,需要拉出其中的一些臉用於作為訓練集。

導航到工具索引標籤,然後導航到對齊子索引標籤:

對齊1.jpg
  • Processing
    此部分允許我們選擇我們希望執行的操作,以及設定任何輸出處理。我們只對Job部分感興趣。

    • Job:這是工具中可用的所有不同對齊工作的列表。
      • 選擇extract
    • 輸出:忽略此部分,因為extract不會生成任何輸出
      對齊9.jpg
  • Data
    我們要處理的資源所在的位置。

    • Alignments File:選擇上一步清理後生成的alignments檔案。
    • Faces Folder:選擇一個空資料夾,將輸出的面孔放在其中。
    • 幀資料夾:選擇提取過程輸入的視訊或幀資料夾
    • 將此部分中的任何其他選項留空,因為此步驟不需要它們。
      對齊10.jpg
  • Extract
    這些是從路線檔案中提取人臉的選項

    • Extract Every N: 這將取決於您輸入的每秒幀數。然而,對於 25fps 的視訊,合理的值在大約 12 - 25 之間(即每半秒到一秒)。任何不足,你最終可能會得到太多相似的面孔。值得牢記的是,您為訓練集從中提取了多少來源,您希望在最終訓練集中擁有多少張面孔,以及您的來源有多長。這些都將根據具體情況而有所不同。
    • Size:這是包含提取的人臉的影象的大小。目前沒有模型支援 256px 以上,所以保持預設
    • Large:啟用此選項將僅提取尚未放大到輸出大小的面孔。例如,如果提取大小設定為512px,而在幀中找到的人臉為480px,則不會提取。如果它是 520px,它會。
      對齊12.jpg
  • 執行
    將所有其他選項保留為預設值。準備好檢查選項,並將訓練集從清理過的對齊檔案中提取到我們選擇的資料夾中。

    • 最終設定如下圖
      對齊13.jpg
    • 點選Alignments按鈕以提取面孔。

完成後,將所有人臉資料集放入同一個資料夾中。訓練集已準備就緒。後續第三章將介紹訓練部分。