Come creare un deepfake: tutorial introduttivo per chi non lo ha mai fatto

Fino a qualche anno fa, il fotoritocco era un’arte nella quale si cimentavano solo gli esperti del settore, e che spesso comportava ore e ore di controlli manuali per curare ogni particolare e realizzare un falso più autentico possibile.

Oggi, più precisamente da qualche anno a questa parte, i progressi nel machine learning hanno consentito di fare grandi passi in avanti, e modificare una foto è diventato un processo quasi automatico. È possibile compiere operazioni di face-swapping (cioè mettere la faccia di una persona nel corpo di un’altra) in maniera che il risultato appaia quasi indistinguibile agli occhi di un osservatore: i prodotti di queste operazioni si chiamano deepfake e nell’ultimo anno sono diventati estremamente popolari.

Quale dei due è quello vero?

Per realizzarli non servono grandi competenze: può farli chiunque, scaricando un semplice tool da usare nel proprio computer. La creazione di un deepfake richiede però tempo (da alcune ore ad alcuni giorni per la realizzazione di un video, a seconda della scheda grafica che si usa) e si consiglia l’uso di una scheda grafica da almeno 2GB di RAM.

Maggiore è la RAM della scheda grafica in uso, minore sarà il tempo impiegato per creare il video. Nella media, servono 72 ore per creare un deepfake con una GPU da 8 GB, ma il tutto dipende dai casi e dalla precisione che si vuole ottenere.

Un buon deepfake è considerato tale se il training ha impiegato almeno 100 -300 mila iterazioni. Ma in alcuni casi si ottengono risultati accettabili anche dopo le prime 30-50 mila iterazioni. In generale questi sono i tempi necessari per una singola iterazione a seconda della quantità di RAM della scheda grafica in uso:

2 GB  → 10-15 secondi a iterazione

8 GB → 2-3 secondi a iterazione

11 GB→ 1-2 secondi a iterazione

16 GB → 0.5-0.8 secondi a iterazione

Volendo si può usare anche la propria CPU, cioè il processore del proprio computer, ma ci vorrebbero settimane di attesa per la creazione del video.

*****

Per fare un deepfake online: Google offre gratuitamente una Tesla K80 da 11 GB nel suo ambiente di sviluppo online Colab. Questo il link del notebook precompilato per creare deepfake (con DeepFaceLab): 
https://colab.research.google.com/github/chervonij/DFL-Colab/blob/master/DFL_Colab_1-0.ipynb

*****

Chi ha una scheda grafica NVIDIA si ricordi di scaricare ed installare il toolkit CUDA prima di iniziare a creare il proprio deepfake. Link al download: https://developer.nvidia.com/cuda-downloads

Il primo passo è quello di scaricarsi i tool: i più usati sono FakeApp, DeepFaceLab e OpenFaceSwap. DeepFaceLab viene solitamente preferito agli altri due per la facilità d’uso, oltre per il fatto che permette di creare deepfake anche con schede grafiche diverse dalle NVIDIA.

Per scaricarlo cliccate questo link:

mega.nz/#!eGRk0KpQ!pwLhNEf3zTuyquO2kZIGICrVc_iSv-ZwrswQah5YYKU

Una volta estratto l’archivio, troverete al suo interno questo contenuto:

Ci sono due cartelle, e un gran numero di file eseguibili. A noi interessa solamente la cartella “workspace” e alcuni di questi file eseguibili.

Andiamo quindi dentro la cartella workspace:

Al suo interno sono presenti due file video: “data_dst” e “data_src”. Essi sono i video sorgente e il video destinazione per la creazione dei deepfake. Il “video_src” è quello dove c’è la faccia che volete traslare mentre “video_dst” è il video in cui volete inserire la faccia.

Se ad esempio volete fare un deepfake dove Di Maio parla nel corpo di Salvini, “video_src” dovrà contenere un video di Di Maio, mente “video_dst” dovrà contenerne uno di Salvini.

Potete quindi cancellare i “data_dst” e “data_src” che trovate nella cartella e rimpiazzarli con i vostri nuovi “data_dst” e “data_src” da impiegare per la creazione del deepfake.

Il prossimo passo è ritornare nella cartella “DeepFaceLab” e cliccare sul file eseguibile “extract images from video data src“. Questo file estrarrà tutti i fotogrammi del video sorgente.

Il file eseguibile si presenterà a voi in questo modo. Vi chiede in quale formato volete salvare le immagini: cliccate invio e il programma inizierà ad estrarre le immagini.

– Se all’inizio non compare nessuna scritta, basta aspettare qualche secondo.-

Una volta compiuta questa operazione, noterete che tutti i fotogrammi estratti sono raccolti nella cartella “data_src” contenuta in “workspace”.

Come secondo passo, fate partire il file eseguibile “data_src extract faces MT best GPU“: questo programma estrarrà i volti dai fotogrammi raccolti nell’operazione precedente.

Tali volti saranno salvati nella sottocartella “aligned” della cartella “data_src” contenuta in workspace.

Successivamente, eseguire i file  data_src sort by similar histogram e data_src check result.

A questo punto recatevi nella cartella aligned, contenente tutti i volti estratti, e cancellate quelli che non rappresentano la faccia interamente, o sono stati estratti male (ad esempio al contrario).

Fatto questo, abbiamo raccolto un dataset con tutti i volti della faccia da translare.

Facciamo quindi lo stesso per il video di destinazione. Cliccare quindi sul file eseguibile “extract PNG from video data_dst FULL FPS“: saranno estratti, come nel caso precedente, tutti i fotogrammi del video.

Successivamente, il file data_dst extract faces MT (or DLIB) best GPU permetterà a sua volta di estrarre i volti dai fotogrammi precedentemente ricavati.

Infine, clicchiamo su data_dst sort by similar histogram data_dst check results. Quest’ultimo aprirà un programma, chiamato XNViewMP, che mostrerà tutti i volti estratti con tanto di landmark facciali. Controllateli ed eliminate quelli che non sono ben allineati con i tratti visivi.

In questo caso si può notare che il volto non è stato estratto correttamente.

Una volta controllati i volti estratti dai video sorgente e destinazione, la preparazione dei nostri dataset sarà terminata.

Potremo quindi iniziare ad allenare il nostro programma e creare il deepfake. Questa operazione viene detta training, che per l’appunto vuol dire “allenamento” in lingua inglese.

Troverete vari file eseguibili per fare questo: DF, H64, H128, LIAEF128, SAE

H64 e SAE funzionano con schede grafiche da 2GB di RAM o superiore.

H128: 3GB di RAM o superiore.

DF e LIAEF128: 5GB di RAM o superiore

Noi usiamo il più semplice tra tutti, l’H64, presente, oltre che in DeepFaceLab, anche in FakeApp.

Clicchiamo quindi su “train H64“.

Vi verrà chiesto quale scheda grafica usare. Se cliccate invio il programma sceglierà automaticamente quella dalle migliori prestazioni.

Successivamente, vi saranno alcune preferenze tra cui scegliere. Potete tranquillamente skipparle cliccando invio a ogni passo (in questo modo verrà impostato il valore predefinito).

Una volta iniziato il training, potrete notare la comparsa di una finestra dove verranno mostrate le anteprime dei progressi fatti nella creazione del vostro deepfake, oltre che al numero di interazioni compiute. Maggiore sarà il numero di interazioni, migliore è il risultato che otterrete.

Solitamente, i primi cambiamenti delle anteprime si iniziano a vedere dopo il primo migliaio di iterazioni.

Quando terminerà il training? A deciderlo siete soltanto voi. Quando le anteprime vi sembreranno abbastanza autentiche, allora potrete cliccare invio e chiudere il file H64.

A questo punto, per creare il file video, ovvero il deepfake vero e proprio, tornate nella cartella principale di DeepFaceLab aprite il file eseguibile “convert H64” ( o “convert SAE” se avete usato il training SAE).

L’ultimo file eseguibile su cui cliccare è “converted to mp4”, o “converted to avi” nel qual caso avrete un video in formato .avi. Nella cartella workspace verrà quindi creato il video, denominato “result.mp4”.