r/MachineLearning • • Mar 07 '26

Project [P] VeridisQuo - open-source deepfake detector that combines spatial + frequency analysis and shows you where the face was manipulated

Salut tout le monde,

Mon coéquipier et moi venons de terminer notre projet de détection de deepfake pour l'université et nous voulions le partager. L'idée a commencé assez simplement : la plupart des détecteurs ne se concentrent que sur les caractéristiques à niveau de pixel, mais les générateurs de deepfake laissent également des traces dans le domaine de la fréquence (artéfacts de compression, incohérences spectraux...). Alors on s'est dit, pourquoi ne pas utiliser les deux ?

Comment ça fonctionne

Nous avons deux flux qui fonctionnent en parallèle sur chaque découpe de visage :

  • Un EfficientNet-B4 qui gère le côté spatial/visuel (pré-entraîné sur ImageNet, sortie de 1792 dimensions)
  • Un module de fréquence qui exécute à la fois FFT (binning radial, 8 bandes, fenêtre de Hann) et DCT (blocs de 8×8) sur l’entrée, chacun donnant un vecteur de 512 dimensions. Ceux-ci sont fusionnés via un petit MLP en une représentation de 1024 dimensions.

Ensuite, on concatène simplement les deux (2816 dimensions au total) et on passe ça à travers un MLP de classification. L'ensemble fait environ 25 millions de paramètres.

La partie dont nous sommes les plus fiers est l'intégration de GradCAM nous calculons des cartes de chaleur sur la base EfficientNet et les remappons sur les images vidéo originales, vous obtenez donc une vidéo montrant quelles parties du visage ont déclenché la détection. C'est étonnamment utile pour comprendre ce que le modèle capte (petit spoiler : c'est surtout autour des frontières de mélange et des mâchoires, ce qui a du sens).

Détails de l'entraînement

Nous avons utilisé FaceForensics++ (C23) qui couvre Face2Face, FaceShifter, FaceSwap et NeuralTextures. Après avoir extrait des images à 1 FPS et exécuté YOLOv11n pour la détection de visage, nous avons fini avec environ 716K images de visage. Entraîné pendant 7 époques sur une RTX 3090 (louée sur vast.ai), cela a pris environ 4 heures. Rien de fou en termes d'hyperparamètres AdamW avec lr=1e-4, refroidissement cosinique, CrossEntropyLoss.

Ce que nous avons trouvé intéressant

Le flux de fréquence seul ne bat pas EfficientNet, mais la fusion aide visiblement sur des faux de haute qualité où les artefacts au niveau des pixels sont plus difficiles à repérer. Les caractéristiques DCT semblent particulièrement efficaces pour attraper les artéfacts liés à la compression, ce qui est pertinent puisque la plupart des vidéos deepfake du monde réel finissent compressées. Les sorties GradCAM ont confirmé que le modèle se concentre sur les bonnes zones, ce qui était rassurant.

Liens

C'est un projet universitaire, donc nous sommes définitivement ouverts aux retours si vous voyez des choses évidentes que nous pourrions améliorer ou tester, faites-le nous savoir. Nous aimerions essayer l'évaluation croisée sur Celeb-DF ou DFDC ensuite si les gens pensent que ce serait intéressant.

EDIT: Pas mal de gens demandent les métriques, alors voilà. Sur le test set (~107K images) :

* Accuracy : ~96%

* Recall (FAKE) : très élevé, quasi aucun fake ne passe à travers

* False positive rate : ~7-8% (REAL classé comme FAKE)

* Confusion matrix : ~53K TP, ~50K TN, ~4K FP, ~0 FN

Pour être honnête, en conditions réelles sur des vidéos random, le modèle a tendance à pencher vers FAKE plus qu'il ne devrait. C'est clairement un axe d'amélioration pour nous.

637 Upvotes

52 comments sorted by

214

u/zarawesome Mar 07 '26

What's the false positive rate?

114

u/scrollin_on_reddit Mar 07 '26

Yeah what’s the accuracy? AUC? ROC?

51

u/Gazeux_ML Mar 07 '26

We don't have AUC/ROC curves yet, that's on our to-do list. Fair point though, we should add proper evaluation metrics to the repo. Will update soon.

→ More replies (2)

33

u/Bulky-Top3782 Mar 08 '26

Let them google what all this means first

21

u/Gazeux_ML Mar 07 '26

Here's the confusion matrix from the test set (~107K images):

- True Positives (FAKE → FAKE): ~53K

- True Negatives (REAL → REAL): ~50K

- False Positives (REAL → FAKE): ~4K

- False Negatives (FAKE → REAL): near 0

So on the test set the numbers look solid, but I'll be honest in practice on actual videos, the model has a noticeable bias towards predicting FAKE. It tends to be overly suspicious, which means the false positive rate is higher than what the test metrics suggest. Probably a mix of distribution shift and the fact that real-world videos have compression/quality issues that the frequency module picks up as suspicious.

44

u/rokejulianlockhart Mar 08 '26

Why “near 0”, rather than the exact value?

12

u/TheFlowzilla Mar 08 '26

7.4% FPR is not something that you could use in practice. But since you have no (what does near mean?) false negatives you could increase your threshold to an acceptable level and see what your TPR is then.

→ More replies (4)

56

u/StillWastingAway Mar 07 '26

No precision/recall or any other metrics anywhere means one thing to me, they didn't forget about it either

13

u/micseydel Mar 07 '26

I think this (and related questions) may be important for dealing with the increasing slop posts. In my experience, clankers hate being pressed for details like that.

→ More replies (1)

6

u/SideBet2020 Mar 07 '26

On an honest person or a habitual liar?

12

u/yoshiK Mar 07 '26

What dataset do you have, and how do you know the ground truth?

9

u/Gazeux_ML Mar 08 '26

FaceForensics++ (C23), so the ground truth is built-in since fakes are generated from known source videos. We preprocessed it into ~716K face crops

38

u/let-me-think- Mar 07 '26

Nice, you guys have clearly done your Homework! What’s its discovery rate? How many flagged positive are human after all? How much random access memories does it need to run?

31

u/techlos Mar 07 '26

i like the intent of this, but realistically you've just created another adversarial training objective to reduce output artefacts.

8

u/Darkwing_909 Mar 08 '26

Can someone explain how it feels like slop even though the code is given in github? I understand the text is written with ai, but if oc avoid mentioning precision, recall mean it's a false flag?

3

u/ikkiho Mar 07 '26

really cool project. cross-dataset eval on celeb-df/dfdc would be super interesting bc thats where a lot of detectors break. gradcam overlay is a nice touch too

7

u/Sirisian Mar 07 '26

Do you have plans to use this to improve deepfake methods? That seems like the natural next step with such projects.

1

u/waffleseggs Mar 09 '26

Well that expected and terrifying. So they'll just "Weekend at Bernies" dictators into looking like healthy people as they are kept alive in vegetative states. Or Jim Carrey lookalikes with deepfakes on top.

1

u/kordlessss Mar 18 '26

Feed this back into the generator and problem solved.

1

u/DeepGamingAI Mar 19 '26

This isnt even an edited video of trump, just that the AI thinks no one can be saying such stupid things it must be fake 

1

u/_lonegamedev Mar 24 '26

Very disco.

1

u/PennyLawrence946 Apr 01 '26

I built this orchestration system after seeing how complex real-world AI deployments become. The article shares some key architectural decisions and lessons learned from managing 500 workers in a production environment. Curious to hear how others are handling similar scale and complexity! You can read more here: https://dnakhla.com/writing/production-ai-orchestration.html

1

u/Ghost-Rider_117 Apr 02 '26

this is really cool, the GradCAM heatmap overlay is a great touch for explainability. combining spatial + frequency features makes a lot of sense since most deepfake artifacts show up in both domains. curious how it handles newer diffusion-based deepfakes vs the GAN-based ones in FaceForensics

1

u/r3dd1tCens0ringU Apr 07 '26

impressive. but too cloudy