deepguard 0.2.1__tar.gz → 0.2.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {deepguard-0.2.1/deepguard.egg-info → deepguard-0.2.2}/PKG-INFO +185 -21
- deepguard-0.2.1/PKG-INFO → deepguard-0.2.2/README.md +174 -36
- deepguard-0.2.1/README.md → deepguard-0.2.2/deepguard.egg-info/PKG-INFO +200 -7
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard.egg-info/SOURCES.txt +28 -1
- deepguard-0.2.2/deepguard.egg-info/requires.txt +5 -0
- deepguard-0.2.2/deepguard.egg-info/top_level.txt +3 -0
- deepguard-0.2.2/explainability/__init__.py +13 -0
- deepguard-0.2.2/explainability/cam_evaluator.py +48 -0
- deepguard-0.2.2/explainability/explainer/base_explainer.py +194 -0
- deepguard-0.2.2/explainability/explainer/cam_explainer.py +319 -0
- deepguard-0.2.2/explainability/explainer/eigenvalue_explainer.py +35 -0
- deepguard-0.2.2/explainability/explainer/gradient_explainer.py +47 -0
- deepguard-0.2.2/explainability/explainer/misc_explainer.py +13 -0
- deepguard-0.2.2/explainability/explainer/perturbation_explainer.py +24 -0
- deepguard-0.2.2/explainability/metrics/cam_mult_image.py +37 -0
- deepguard-0.2.2/explainability/metrics/perturbation_confidence.py +109 -0
- deepguard-0.2.2/explainability/metrics/road.py +154 -0
- deepguard-0.2.2/explainability/utils/image.py +86 -0
- deepguard-0.2.2/explainability/utils/model_targets.py +16 -0
- deepguard-0.2.2/explainability/utils/reshape_transforms.py +11 -0
- deepguard-0.2.2/inference/image_predictor.py +114 -0
- deepguard-0.2.2/inference/image_predictor_prt.py +132 -0
- deepguard-0.2.2/inference/predict_video.py +154 -0
- deepguard-0.2.2/inference/utils.py +4 -0
- deepguard-0.2.2/inference/video_predictor.py +195 -0
- deepguard-0.2.2/inference/video_predictor_prt.py +258 -0
- deepguard-0.2.2/preprocess/celeb_df_v2/split_data.py +0 -0
- deepguard-0.2.2/preprocess/face_detector.py +199 -0
- deepguard-0.2.2/preprocess/ff++/__init__.py +0 -0
- deepguard-0.2.2/preprocess/frame_extractor.py +196 -0
- deepguard-0.2.2/preprocess/kodf/__init__.py +0 -0
- deepguard-0.2.2/preprocess/landmark_detector.py +96 -0
- deepguard-0.2.2/pyproject.toml +44 -0
- deepguard-0.2.1/deepguard.egg-info/top_level.txt +0 -2
- deepguard-0.2.1/setup.py +0 -30
- {deepguard-0.2.1 → deepguard-0.2.2}/LICENSE +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/dataset.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/dataset_cutmix.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/dataset_cutout.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/dataset_mixup.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/handle_imbalance.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/split_data.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/data/transforms.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/attention.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/drop.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/featextractor.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/global_query.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/mlp.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/patch.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/reducesize.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/se.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/transformer.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/weight_init.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/layers/window.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/models/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/models/ms_eff_gcvit.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/models/ms_eff_vit.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/optimizer/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/optimizer/build_optimizer.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/scheduler/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/scheduler/fetch_scheduler.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/utils/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/utils/build_metrics.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/utils/early_stopping.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/utils/meter.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard/utils/seed.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/deepguard.egg-info/dependency_links.txt +0 -0
- {deepguard-0.2.1/preprocess/celeb_df_v2 → deepguard-0.2.2/explainability/metrics}/__init__.py +0 -0
- {deepguard-0.2.1/preprocess/ff++ → deepguard-0.2.2/inference}/__init__.py +0 -0
- {deepguard-0.2.1/preprocess/kodf → deepguard-0.2.2/preprocess}/__init__.py +0 -0
- /deepguard-0.2.1/preprocess/celeb_df_v2/split_data.py → /deepguard-0.2.2/preprocess/celeb_df_v2/__init__.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/celeb_df_v2/crop_face.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/celeb_df_v2/detect_original_face.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/celeb_df_v2/utils.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/ff++/crop_face.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/ff++/detect_original_face.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/ff++/split_data.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/ff++/utils.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/kodf/crop_face.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/kodf/detect_original_face.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/kodf/generate_metadata.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/kodf/split_data.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/preprocess/kodf/utils.py +0 -0
- {deepguard-0.2.1 → deepguard-0.2.2}/setup.cfg +0 -0
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: deepguard
|
|
3
|
-
Version: 0.2.
|
|
4
|
-
Summary: Multi-Scale Efficient Vision Transformer for Robust Deepfake Detection
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
Version: 0.2.2
|
|
4
|
+
Summary: Multi-Scale Efficient Global Context Vision Transformer for Robust Deepfake Detection
|
|
5
|
+
Author-email: seoyunje <seoyunje2001@gmail.com>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/HanMoonSub/DeepGuard
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/HanMoonSub/DeepGuard/issues
|
|
9
9
|
Project-URL: Source Code, https://github.com/HanMoonSub/DeepGuard
|
|
10
|
+
Project-URL: Hugging Face, https://huggingface.co/KoreaPeter/ms-eff-gcvit-deepfake
|
|
10
11
|
Classifier: Programming Language :: Python :: 3
|
|
11
12
|
Classifier: Programming Language :: Python :: 3.10
|
|
12
13
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -16,28 +17,27 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
16
17
|
Requires-Python: >=3.10
|
|
17
18
|
Description-Content-Type: text/markdown
|
|
18
19
|
License-File: LICENSE
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
Dynamic: home-page
|
|
20
|
+
Requires-Dist: torchmetrics>=1.6.1
|
|
21
|
+
Requires-Dist: ultralytics>=8.4.41
|
|
22
|
+
Requires-Dist: grad-cam>=1.5.5
|
|
23
|
+
Requires-Dist: timm>=1.0.12
|
|
24
|
+
Requires-Dist: torch>=2.10.0
|
|
25
25
|
Dynamic: license-file
|
|
26
|
-
Dynamic: project-url
|
|
27
|
-
Dynamic: requires-python
|
|
28
|
-
Dynamic: summary
|
|
29
26
|
|
|
30
27
|
# Deepfakes Detection
|
|
31
28
|
|
|
32
|
-
<p align="center">
|
|
33
|
-
<img src="https://raw.githubusercontent.com/HanMoonSub/DeepGuard/main/Images/deepfake2.png" alt="DeepGuard Banner" width="800" height="400">
|
|
34
|
-
</p>
|
|
35
|
-
|
|
36
29
|
<p align="center">
|
|
37
30
|
<img src="https://img.shields.io/github/license/HanMoonSub/DeepGuard?style=flat-square&color=555555&logo=github&logoColor=white" alt="License">
|
|
38
31
|
<img src="https://img.shields.io/github/stars/HanMoonSub/DeepGuard?style=flat-square&color=FFD700&logo=github&logoColor=white" alt="Stars">
|
|
32
|
+
<img src="https://img.shields.io/github/downloads/HanMoonSub/DeepGuard/total?style=flat-square&color=brightgreen&logo=github&logoColor=white" alt="Downloads">
|
|
33
|
+
<img src="https://img.shields.io/github/last-commit/HanMoonSub/DeepGuard?style=flat-square&color=lightgrey&logo=github&logoColor=white" alt="Last Commit">
|
|
39
34
|
<img src="https://img.shields.io/badge/Status-Active-brightgreen?style=flat-square" alt="Status">
|
|
40
35
|
<img src="https://img.shields.io/badge/Release-v0.2.0-orange?style=flat-square&logo=github&logoColor=white" alt="Release">
|
|
36
|
+
<img src="https://img.shields.io/github/repo-size/HanMoonSub/DeepGuard?style=flat-square&color=blueviolet" alt="Repo Size">
|
|
37
|
+
</p>
|
|
38
|
+
|
|
39
|
+
<p align="center">
|
|
40
|
+
<img src="docs/samples/deepfake_thumbnails.png" alt="DeepGuard Banner" width="800" height="400">
|
|
41
41
|
</p>
|
|
42
42
|
|
|
43
43
|
<p align="center">
|
|
@@ -56,6 +56,7 @@ Dynamic: summary
|
|
|
56
56
|
|
|
57
57
|
<p align="center">
|
|
58
58
|
<a href="README_KR.md"><b>🇰🇷 한국어 버전</b></a> |
|
|
59
|
+
<a href="README_JP.md"><b>🇯🇵 日本語版</b></a> |
|
|
59
60
|
<a href="#-model-evaluation"><b>📈 Model Evaluation</b></a> |
|
|
60
61
|
<a href="#-predict-image--video"><b>🔮 Try Demo</b></a>
|
|
61
62
|
</p>
|
|
@@ -72,6 +73,7 @@ Dynamic: summary
|
|
|
72
73
|
- [📈 Model Evaluation](#-model-evaluation) - Benchmarking results
|
|
73
74
|
- [💻 Model Usage](#-model-usage) - How to integrate DeepGuard models into your own Python code or via timm
|
|
74
75
|
- [🔮 Predict Image & Video](#-predict-image--video) - Simple Inference examples for detecting deepfakes in image and video
|
|
76
|
+
- [🎨 DeepFake AI Explainability](#-deepfake-ai-explainability) - Visualizing model focus using Grad-CAM and attention maps
|
|
75
77
|
- [📬 Authors](#-authors)
|
|
76
78
|
- [📝 Reference](#-reference)
|
|
77
79
|
- [⚖️ License](#-license)
|
|
@@ -167,7 +169,7 @@ Multi Scale Efficient Global Context Vision Transformer is an optimized multi-sc
|
|
|
167
169
|
|
|
168
170
|
|
|
169
171
|
<p align="center">
|
|
170
|
-
<img src="
|
|
172
|
+
<img src="docs/architectures/ms_eff_gcvit.JPG" width="100%" height="700">
|
|
171
173
|
</p>
|
|
172
174
|
|
|
173
175
|
We utilizes two distinct types of self-attention to capture both long-range and short-range information across feature maps.
|
|
@@ -178,7 +180,7 @@ We utilizes two distinct types of self-attention to capture both long-range and
|
|
|
178
180
|
|
|
179
181
|
|
|
180
182
|
<p align="center">
|
|
181
|
-
<img src=
|
|
183
|
+
<img src=docs/architectures/window_attention.JPG width="100%" height="300">
|
|
182
184
|
</p>
|
|
183
185
|
|
|
184
186
|
## 🧬 Model Zoo
|
|
@@ -255,7 +257,8 @@ You can load the models directly via the `DeepGuard` package or through the `tim
|
|
|
255
257
|
**Installation**
|
|
256
258
|
|
|
257
259
|
```bash
|
|
258
|
-
pip install -U git+https://github.com/HanMoonSub/DeepGuard.git
|
|
260
|
+
# pip install -U git+https://github.com/HanMoonSub/DeepGuard.git
|
|
261
|
+
pip install deepguard
|
|
259
262
|
```
|
|
260
263
|
|
|
261
264
|
|
|
@@ -278,6 +281,21 @@ model = timm.create_model("ms_eff_gcvit_b0", pretrained=True, dataset="ff++")
|
|
|
278
281
|
model = timm.create_model("ms_eff_gcvit_b5", pretrained=True, dataset="kodf")
|
|
279
282
|
```
|
|
280
283
|
|
|
284
|
+
**Option C: Hugging Face Hub**
|
|
285
|
+
|
|
286
|
+
```python
|
|
287
|
+
import torch
|
|
288
|
+
from huggingface_hub import hf_hub_download
|
|
289
|
+
from deepguard import ms_eff_gcvit_b0 # or ms_eff_gcvit_b5
|
|
290
|
+
|
|
291
|
+
REPO_ID = "KoreaPeter/ms-eff-gcvit-deepfake"
|
|
292
|
+
|
|
293
|
+
ckpt = hf_hub_download(REPO_ID, "ms_eff_gcvit_b0_kodf.bin") # celeb_df_v2 | ff++ | kodf
|
|
294
|
+
model = ms_eff_gcvit_b0(pretrained=False)
|
|
295
|
+
model.load_state_dict(torch.load(ckpt, map_location="cpu"))
|
|
296
|
+
model.eval()
|
|
297
|
+
```
|
|
298
|
+
|
|
281
299
|
## 🔮 Predict Image & Video
|
|
282
300
|
|
|
283
301
|
#### Predict DeepFake Image
|
|
@@ -331,6 +349,151 @@ print(f"Deepfake Probability: {result:.4f}")
|
|
|
331
349
|
|
|
332
350
|
```
|
|
333
351
|
|
|
352
|
+
## 🎨 DeepFake AI Explainability
|
|
353
|
+
|
|
354
|
+
Deepfake detection is only as trustworthy as its explanations. DeepGuard integrates a production-ready XAI Toolkit that visualizes where and why the model flags a face as manipulated — turning a black-box score into actionable forensic evidence.
|
|
355
|
+
|
|
356
|
+
⭐ Validated on hybrid CNN-ViT architectures, specifically `MS-EffViT` and `MS-EffGCViT`.
|
|
357
|
+
⭐ Dual-Branch Analysis: Dual-branch design mirrors the model's own multi-scale reasoning
|
|
358
|
+
|
|
359
|
+
### 🧠 How Dual-Branch XAI Works
|
|
360
|
+
|
|
361
|
+
<p align="center">
|
|
362
|
+
<img src="docs/architectures/dual_branch.gif" width="70%" height="300">
|
|
363
|
+
</p>
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
| Branch | Feature Map | Focus | Best For |
|
|
367
|
+
| ------ | ----------- | ----- | -------- |
|
|
368
|
+
|  | High Resolution | Local Forgery artifacts | Skin texture, boundary blending, compression traces |
|
|
369
|
+
|  | Low Resolution | Global Semantic Structure | Lighting inconsistency, facial geometry, Shadow artifacts |
|
|
370
|
+
|
|
371
|
+
### 📐 XAI Methods
|
|
372
|
+
|
|
373
|
+
Each method is assigned to the branch where it performs best empirically.
|
|
374
|
+
|
|
375
|
+
| Branch | Method | 🎯 Core Idea |
|
|
376
|
+
| :--- | :--- | :--- |
|
|
377
|
+
| **`low level`** | **HiResCAM** | Like GradCAM but element-wise multiply the activations with the gradients; provably guaranteed faithfulness for certain models |
|
|
378
|
+
| **`low level`** | **GradCAMElementWise** | Like GradCAM but element-wise multiply the activations with the gradients then apply a ReLU operation before summing |
|
|
379
|
+
| **`low level`** | **LayerCAM** | Spatially weight the activations by positive gradients. Works better especially in lower layers |
|
|
380
|
+
| --- | --- | --- | --- |
|
|
381
|
+
| **`high level`** | **EigenGradCAM** | Like EigenCAM but with class discrimination: First principle component of Activations*Grad. Looks like GradCAM, but cleaner |
|
|
382
|
+
| **`high level`** | **GradCAM++** | Like GradCAM but uses second order gradients |
|
|
383
|
+
| **`high level`** | **XGradCAM** | Like GradCAM but scale the gradients by the normalized activations |
|
|
384
|
+
|
|
385
|
+
- **`aug_smooth`** applies TTA (horizontal flips) before averaging CAMs → smoother, more object-aligned maps
|
|
386
|
+
- **`eigen_smooth`** applies PCA noise reduction → retains dominant forgery pattern only
|
|
387
|
+
|
|
388
|
+
### 💡 DeepFake XAI Usage
|
|
389
|
+
|
|
390
|
+
**Low-Level Branch — Local Artifact Detection**
|
|
391
|
+
|
|
392
|
+
```python
|
|
393
|
+
from explainability import HiResCAMExplainer, GradCAMElementWiseExplainer, LayerCAMExplainer
|
|
394
|
+
|
|
395
|
+
explainer = HiResCAMExplainer(
|
|
396
|
+
model_name = "ms_eff_gcvit_b0", # or ms_eff_vit_b0, ms_eff_gcvit_b5, ms_eff_vit_b5
|
|
397
|
+
dataset = "celeb_df_v2", # or ff++, kodf
|
|
398
|
+
branch_level = "low",
|
|
399
|
+
)
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
**High-Level Branch — Global Semantic Detection**
|
|
403
|
+
```python
|
|
404
|
+
from explainability import EigenGradCAMExplainer, GradCAMPlusPlusExplainer, XGradCAMExplainer
|
|
405
|
+
|
|
406
|
+
explainer = EigenGradCAMExplainer(
|
|
407
|
+
model_name = "ms_eff_gcvit_b0",
|
|
408
|
+
dataset = "celeb_df_v2",
|
|
409
|
+
branch_level = "high",
|
|
410
|
+
)
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
### 🎨 Visualization Modes
|
|
414
|
+
|
|
415
|
+
<p align="center">
|
|
416
|
+
<img src="docs/xai-results/xai_demo.gif" width="80%" height=300>
|
|
417
|
+
</p>
|
|
418
|
+
|
|
419
|
+
**1. Heatmap — Continuous activation distribution**
|
|
420
|
+
|
|
421
|
+
```python
|
|
422
|
+
result = explainer.display_heatmap_on_image(
|
|
423
|
+
img_path = "path/to/image.jpg",
|
|
424
|
+
category = 1, # 0: Real, 1: Fake
|
|
425
|
+
threshold = 0.5, # binarization cutoff (0.5~1.0), or "auto" for Otsu
|
|
426
|
+
image_weight = 0.5, # 0.0: heatmap only ← → 1.0: original only
|
|
427
|
+
aug_smooth = False, # TTA smoothing (not supported on 'pro' models)
|
|
428
|
+
eigen_smooth = False, # PCA noise reduction
|
|
429
|
+
)
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
**2. Bounding Box — Discrete forgery region localization**
|
|
433
|
+
|
|
434
|
+
```python
|
|
435
|
+
result = explainer.display_bbox_on_image(
|
|
436
|
+
img_path = "path/to/image.jpg",
|
|
437
|
+
category = 1,
|
|
438
|
+
threshold = 0.5,
|
|
439
|
+
thickness = 1,
|
|
440
|
+
aug_smooth = False,
|
|
441
|
+
eigen_smooth = False,
|
|
442
|
+
)
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
**3. Heatmap + BBox — Full overlay (recommended for reporting)**
|
|
446
|
+
```python
|
|
447
|
+
result = explainer.display_heatmap_bbox_on_image(
|
|
448
|
+
img_path = "path/to/image.jpg",
|
|
449
|
+
category = 1,
|
|
450
|
+
threshold = 0.5,
|
|
451
|
+
image_weight = 0.5,
|
|
452
|
+
aug_smooth = False,
|
|
453
|
+
eigen_smooth = False,
|
|
454
|
+
)
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
### 📊 Visual Results
|
|
458
|
+
|
|
459
|
+
<p align="center">
|
|
460
|
+
<table>
|
|
461
|
+
<tr>
|
|
462
|
+
<td><img src="docs/architectures/low_branch.gif" width="100%"></td>
|
|
463
|
+
<td width="20%"></td>
|
|
464
|
+
<td><img src="docs/architectures/high_branch.gif" width="100%"></td>
|
|
465
|
+
</tr>
|
|
466
|
+
</table>
|
|
467
|
+
</p>
|
|
468
|
+
|
|
469
|
+
#### MS-EFF-VIT — Low-Level Branch
|
|
470
|
+
|
|
471
|
+
| Model | Branch-Level | Image | HiresCam | GradCamElementwise | LayerCam |
|
|
472
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
473
|
+
| **⚡ ms-eff-vit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_low_layercam.JPG" width="100"> |
|
|
474
|
+
| **🔥 ms-eff-vit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_low_layercam.JPG" width="100"> |
|
|
475
|
+
|
|
476
|
+
#### MS-Eff-ViT — High-Level Branch
|
|
477
|
+
|
|
478
|
+
| Model | Branch-Level | Image | EigenGradCam | GradCamPlusPlus | XGradCam |
|
|
479
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
480
|
+
| **⚡ ms-eff-vit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_high_xgradcam.JPG" width="100"> |
|
|
481
|
+
| **🔥 ms-eff-vit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_high_xgradcam.JPG" width="100"> |
|
|
482
|
+
|
|
483
|
+
#### MS-EFF-GCVIT — Low-Level Branch
|
|
484
|
+
|
|
485
|
+
| Model | Branch-Level | Image | HiresCam | GradCamElementwise | LayerCam |
|
|
486
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
487
|
+
| **⚡ ms-eff-gcvit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_low_layercam.JPG" width="100"> |
|
|
488
|
+
| **🔥 ms-eff-gcvit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_low_layercam.JPG" width="100"> |
|
|
489
|
+
|
|
490
|
+
#### MS-Eff-GCViT — High-Level Branch
|
|
491
|
+
|
|
492
|
+
| Model | Branch-Level | Image | EigenGradCam | GradCamPlusPlus | XGradCam |
|
|
493
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
494
|
+
| **⚡ ms-eff-gcvit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_high_xgradcam.JPG" width="100"> |
|
|
495
|
+
| **🔥 ms-eff-gcvit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_high_xgradcam.JPG" width="100"> |
|
|
496
|
+
|
|
334
497
|
|
|
335
498
|
## 📬 Authors
|
|
336
499
|
|
|
@@ -351,6 +514,7 @@ _**This project was developed as a Senior Graduation Project by the Department o
|
|
|
351
514
|
6. [`deepfake-detection-project-v4`](https://github.com/ameencaslam/deepfake-detection-project-v4) - _Multiple Deep Learning Models by Ameen Caslam_
|
|
352
515
|
7. [`Awesome-Deepfake-Detection`](https://github.com/Daisy-Zhang/Awesome-Deepfakes-Detection
|
|
353
516
|
) - _A curated list of tools, papers and code by Daisy Zhang_
|
|
517
|
+
8. [`Pytorch-Grad-Cam`](https://github.com/jacobgil/pytorch-grad-cam) - _Advanced Visual Explanations for PyTorch Models_
|
|
354
518
|
|
|
355
519
|
## ⚖️ License
|
|
356
520
|
|
|
@@ -1,43 +1,17 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: deepguard
|
|
3
|
-
Version: 0.2.1
|
|
4
|
-
Summary: Multi-Scale Efficient Vision Transformer for Robust Deepfake Detection
|
|
5
|
-
Home-page: https://github.com/HanMoonSub/DeepGuard
|
|
6
|
-
Author: seoyunje
|
|
7
|
-
Author-email: seoyunje2001@gmail.com
|
|
8
|
-
Project-URL: Bug Tracker, https://github.com/HanMoonSub/DeepGuard/issues
|
|
9
|
-
Project-URL: Source Code, https://github.com/HanMoonSub/DeepGuard
|
|
10
|
-
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
-
Classifier: Operating System :: OS Independent
|
|
15
|
-
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
16
|
-
Requires-Python: >=3.10
|
|
17
|
-
Description-Content-Type: text/markdown
|
|
18
|
-
License-File: LICENSE
|
|
19
|
-
Dynamic: author
|
|
20
|
-
Dynamic: author-email
|
|
21
|
-
Dynamic: classifier
|
|
22
|
-
Dynamic: description
|
|
23
|
-
Dynamic: description-content-type
|
|
24
|
-
Dynamic: home-page
|
|
25
|
-
Dynamic: license-file
|
|
26
|
-
Dynamic: project-url
|
|
27
|
-
Dynamic: requires-python
|
|
28
|
-
Dynamic: summary
|
|
29
|
-
|
|
30
1
|
# Deepfakes Detection
|
|
31
2
|
|
|
32
|
-
<p align="center">
|
|
33
|
-
<img src="https://raw.githubusercontent.com/HanMoonSub/DeepGuard/main/Images/deepfake2.png" alt="DeepGuard Banner" width="800" height="400">
|
|
34
|
-
</p>
|
|
35
|
-
|
|
36
3
|
<p align="center">
|
|
37
4
|
<img src="https://img.shields.io/github/license/HanMoonSub/DeepGuard?style=flat-square&color=555555&logo=github&logoColor=white" alt="License">
|
|
38
5
|
<img src="https://img.shields.io/github/stars/HanMoonSub/DeepGuard?style=flat-square&color=FFD700&logo=github&logoColor=white" alt="Stars">
|
|
6
|
+
<img src="https://img.shields.io/github/downloads/HanMoonSub/DeepGuard/total?style=flat-square&color=brightgreen&logo=github&logoColor=white" alt="Downloads">
|
|
7
|
+
<img src="https://img.shields.io/github/last-commit/HanMoonSub/DeepGuard?style=flat-square&color=lightgrey&logo=github&logoColor=white" alt="Last Commit">
|
|
39
8
|
<img src="https://img.shields.io/badge/Status-Active-brightgreen?style=flat-square" alt="Status">
|
|
40
9
|
<img src="https://img.shields.io/badge/Release-v0.2.0-orange?style=flat-square&logo=github&logoColor=white" alt="Release">
|
|
10
|
+
<img src="https://img.shields.io/github/repo-size/HanMoonSub/DeepGuard?style=flat-square&color=blueviolet" alt="Repo Size">
|
|
11
|
+
</p>
|
|
12
|
+
|
|
13
|
+
<p align="center">
|
|
14
|
+
<img src="docs/samples/deepfake_thumbnails.png" alt="DeepGuard Banner" width="800" height="400">
|
|
41
15
|
</p>
|
|
42
16
|
|
|
43
17
|
<p align="center">
|
|
@@ -56,6 +30,7 @@ Dynamic: summary
|
|
|
56
30
|
|
|
57
31
|
<p align="center">
|
|
58
32
|
<a href="README_KR.md"><b>🇰🇷 한국어 버전</b></a> |
|
|
33
|
+
<a href="README_JP.md"><b>🇯🇵 日本語版</b></a> |
|
|
59
34
|
<a href="#-model-evaluation"><b>📈 Model Evaluation</b></a> |
|
|
60
35
|
<a href="#-predict-image--video"><b>🔮 Try Demo</b></a>
|
|
61
36
|
</p>
|
|
@@ -72,6 +47,7 @@ Dynamic: summary
|
|
|
72
47
|
- [📈 Model Evaluation](#-model-evaluation) - Benchmarking results
|
|
73
48
|
- [💻 Model Usage](#-model-usage) - How to integrate DeepGuard models into your own Python code or via timm
|
|
74
49
|
- [🔮 Predict Image & Video](#-predict-image--video) - Simple Inference examples for detecting deepfakes in image and video
|
|
50
|
+
- [🎨 DeepFake AI Explainability](#-deepfake-ai-explainability) - Visualizing model focus using Grad-CAM and attention maps
|
|
75
51
|
- [📬 Authors](#-authors)
|
|
76
52
|
- [📝 Reference](#-reference)
|
|
77
53
|
- [⚖️ License](#-license)
|
|
@@ -167,7 +143,7 @@ Multi Scale Efficient Global Context Vision Transformer is an optimized multi-sc
|
|
|
167
143
|
|
|
168
144
|
|
|
169
145
|
<p align="center">
|
|
170
|
-
<img src="
|
|
146
|
+
<img src="docs/architectures/ms_eff_gcvit.JPG" width="100%" height="700">
|
|
171
147
|
</p>
|
|
172
148
|
|
|
173
149
|
We utilizes two distinct types of self-attention to capture both long-range and short-range information across feature maps.
|
|
@@ -178,7 +154,7 @@ We utilizes two distinct types of self-attention to capture both long-range and
|
|
|
178
154
|
|
|
179
155
|
|
|
180
156
|
<p align="center">
|
|
181
|
-
<img src=
|
|
157
|
+
<img src=docs/architectures/window_attention.JPG width="100%" height="300">
|
|
182
158
|
</p>
|
|
183
159
|
|
|
184
160
|
## 🧬 Model Zoo
|
|
@@ -255,7 +231,8 @@ You can load the models directly via the `DeepGuard` package or through the `tim
|
|
|
255
231
|
**Installation**
|
|
256
232
|
|
|
257
233
|
```bash
|
|
258
|
-
pip install -U git+https://github.com/HanMoonSub/DeepGuard.git
|
|
234
|
+
# pip install -U git+https://github.com/HanMoonSub/DeepGuard.git
|
|
235
|
+
pip install deepguard
|
|
259
236
|
```
|
|
260
237
|
|
|
261
238
|
|
|
@@ -278,6 +255,21 @@ model = timm.create_model("ms_eff_gcvit_b0", pretrained=True, dataset="ff++")
|
|
|
278
255
|
model = timm.create_model("ms_eff_gcvit_b5", pretrained=True, dataset="kodf")
|
|
279
256
|
```
|
|
280
257
|
|
|
258
|
+
**Option C: Hugging Face Hub**
|
|
259
|
+
|
|
260
|
+
```python
|
|
261
|
+
import torch
|
|
262
|
+
from huggingface_hub import hf_hub_download
|
|
263
|
+
from deepguard import ms_eff_gcvit_b0 # or ms_eff_gcvit_b5
|
|
264
|
+
|
|
265
|
+
REPO_ID = "KoreaPeter/ms-eff-gcvit-deepfake"
|
|
266
|
+
|
|
267
|
+
ckpt = hf_hub_download(REPO_ID, "ms_eff_gcvit_b0_kodf.bin") # celeb_df_v2 | ff++ | kodf
|
|
268
|
+
model = ms_eff_gcvit_b0(pretrained=False)
|
|
269
|
+
model.load_state_dict(torch.load(ckpt, map_location="cpu"))
|
|
270
|
+
model.eval()
|
|
271
|
+
```
|
|
272
|
+
|
|
281
273
|
## 🔮 Predict Image & Video
|
|
282
274
|
|
|
283
275
|
#### Predict DeepFake Image
|
|
@@ -331,6 +323,151 @@ print(f"Deepfake Probability: {result:.4f}")
|
|
|
331
323
|
|
|
332
324
|
```
|
|
333
325
|
|
|
326
|
+
## 🎨 DeepFake AI Explainability
|
|
327
|
+
|
|
328
|
+
Deepfake detection is only as trustworthy as its explanations. DeepGuard integrates a production-ready XAI Toolkit that visualizes where and why the model flags a face as manipulated — turning a black-box score into actionable forensic evidence.
|
|
329
|
+
|
|
330
|
+
⭐ Validated on hybrid CNN-ViT architectures, specifically `MS-EffViT` and `MS-EffGCViT`.
|
|
331
|
+
⭐ Dual-Branch Analysis: Dual-branch design mirrors the model's own multi-scale reasoning
|
|
332
|
+
|
|
333
|
+
### 🧠 How Dual-Branch XAI Works
|
|
334
|
+
|
|
335
|
+
<p align="center">
|
|
336
|
+
<img src="docs/architectures/dual_branch.gif" width="70%" height="300">
|
|
337
|
+
</p>
|
|
338
|
+
|
|
339
|
+
|
|
340
|
+
| Branch | Feature Map | Focus | Best For |
|
|
341
|
+
| ------ | ----------- | ----- | -------- |
|
|
342
|
+
|  | High Resolution | Local Forgery artifacts | Skin texture, boundary blending, compression traces |
|
|
343
|
+
|  | Low Resolution | Global Semantic Structure | Lighting inconsistency, facial geometry, Shadow artifacts |
|
|
344
|
+
|
|
345
|
+
### 📐 XAI Methods
|
|
346
|
+
|
|
347
|
+
Each method is assigned to the branch where it performs best empirically.
|
|
348
|
+
|
|
349
|
+
| Branch | Method | 🎯 Core Idea |
|
|
350
|
+
| :--- | :--- | :--- |
|
|
351
|
+
| **`low level`** | **HiResCAM** | Like GradCAM but element-wise multiply the activations with the gradients; provably guaranteed faithfulness for certain models |
|
|
352
|
+
| **`low level`** | **GradCAMElementWise** | Like GradCAM but element-wise multiply the activations with the gradients then apply a ReLU operation before summing |
|
|
353
|
+
| **`low level`** | **LayerCAM** | Spatially weight the activations by positive gradients. Works better especially in lower layers |
|
|
354
|
+
| --- | --- | --- | --- |
|
|
355
|
+
| **`high level`** | **EigenGradCAM** | Like EigenCAM but with class discrimination: First principle component of Activations*Grad. Looks like GradCAM, but cleaner |
|
|
356
|
+
| **`high level`** | **GradCAM++** | Like GradCAM but uses second order gradients |
|
|
357
|
+
| **`high level`** | **XGradCAM** | Like GradCAM but scale the gradients by the normalized activations |
|
|
358
|
+
|
|
359
|
+
- **`aug_smooth`** applies TTA (horizontal flips) before averaging CAMs → smoother, more object-aligned maps
|
|
360
|
+
- **`eigen_smooth`** applies PCA noise reduction → retains dominant forgery pattern only
|
|
361
|
+
|
|
362
|
+
### 💡 DeepFake XAI Usage
|
|
363
|
+
|
|
364
|
+
**Low-Level Branch — Local Artifact Detection**
|
|
365
|
+
|
|
366
|
+
```python
|
|
367
|
+
from explainability import HiResCAMExplainer, GradCAMElementWiseExplainer, LayerCAMExplainer
|
|
368
|
+
|
|
369
|
+
explainer = HiResCAMExplainer(
|
|
370
|
+
model_name = "ms_eff_gcvit_b0", # or ms_eff_vit_b0, ms_eff_gcvit_b5, ms_eff_vit_b5
|
|
371
|
+
dataset = "celeb_df_v2", # or ff++, kodf
|
|
372
|
+
branch_level = "low",
|
|
373
|
+
)
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**High-Level Branch — Global Semantic Detection**
|
|
377
|
+
```python
|
|
378
|
+
from explainability import EigenGradCAMExplainer, GradCAMPlusPlusExplainer, XGradCAMExplainer
|
|
379
|
+
|
|
380
|
+
explainer = EigenGradCAMExplainer(
|
|
381
|
+
model_name = "ms_eff_gcvit_b0",
|
|
382
|
+
dataset = "celeb_df_v2",
|
|
383
|
+
branch_level = "high",
|
|
384
|
+
)
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
### 🎨 Visualization Modes
|
|
388
|
+
|
|
389
|
+
<p align="center">
|
|
390
|
+
<img src="docs/xai-results/xai_demo.gif" width="80%" height=300>
|
|
391
|
+
</p>
|
|
392
|
+
|
|
393
|
+
**1. Heatmap — Continuous activation distribution**
|
|
394
|
+
|
|
395
|
+
```python
|
|
396
|
+
result = explainer.display_heatmap_on_image(
|
|
397
|
+
img_path = "path/to/image.jpg",
|
|
398
|
+
category = 1, # 0: Real, 1: Fake
|
|
399
|
+
threshold = 0.5, # binarization cutoff (0.5~1.0), or "auto" for Otsu
|
|
400
|
+
image_weight = 0.5, # 0.0: heatmap only ← → 1.0: original only
|
|
401
|
+
aug_smooth = False, # TTA smoothing (not supported on 'pro' models)
|
|
402
|
+
eigen_smooth = False, # PCA noise reduction
|
|
403
|
+
)
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
**2. Bounding Box — Discrete forgery region localization**
|
|
407
|
+
|
|
408
|
+
```python
|
|
409
|
+
result = explainer.display_bbox_on_image(
|
|
410
|
+
img_path = "path/to/image.jpg",
|
|
411
|
+
category = 1,
|
|
412
|
+
threshold = 0.5,
|
|
413
|
+
thickness = 1,
|
|
414
|
+
aug_smooth = False,
|
|
415
|
+
eigen_smooth = False,
|
|
416
|
+
)
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**3. Heatmap + BBox — Full overlay (recommended for reporting)**
|
|
420
|
+
```python
|
|
421
|
+
result = explainer.display_heatmap_bbox_on_image(
|
|
422
|
+
img_path = "path/to/image.jpg",
|
|
423
|
+
category = 1,
|
|
424
|
+
threshold = 0.5,
|
|
425
|
+
image_weight = 0.5,
|
|
426
|
+
aug_smooth = False,
|
|
427
|
+
eigen_smooth = False,
|
|
428
|
+
)
|
|
429
|
+
```
|
|
430
|
+
|
|
431
|
+
### 📊 Visual Results
|
|
432
|
+
|
|
433
|
+
<p align="center">
|
|
434
|
+
<table>
|
|
435
|
+
<tr>
|
|
436
|
+
<td><img src="docs/architectures/low_branch.gif" width="100%"></td>
|
|
437
|
+
<td width="20%"></td>
|
|
438
|
+
<td><img src="docs/architectures/high_branch.gif" width="100%"></td>
|
|
439
|
+
</tr>
|
|
440
|
+
</table>
|
|
441
|
+
</p>
|
|
442
|
+
|
|
443
|
+
#### MS-EFF-VIT — Low-Level Branch
|
|
444
|
+
|
|
445
|
+
| Model | Branch-Level | Image | HiresCam | GradCamElementwise | LayerCam |
|
|
446
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
447
|
+
| **⚡ ms-eff-vit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_low_layercam.JPG" width="100"> |
|
|
448
|
+
| **🔥 ms-eff-vit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_low_layercam.JPG" width="100"> |
|
|
449
|
+
|
|
450
|
+
#### MS-Eff-ViT — High-Level Branch
|
|
451
|
+
|
|
452
|
+
| Model | Branch-Level | Image | EigenGradCam | GradCamPlusPlus | XGradCam |
|
|
453
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
454
|
+
| **⚡ ms-eff-vit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b0_high_xgradcam.JPG" width="100"> |
|
|
455
|
+
| **🔥 ms-eff-vit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_vit_b5_high_xgradcam.JPG" width="100"> |
|
|
456
|
+
|
|
457
|
+
#### MS-EFF-GCVIT — Low-Level Branch
|
|
458
|
+
|
|
459
|
+
| Model | Branch-Level | Image | HiresCam | GradCamElementwise | LayerCam |
|
|
460
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
461
|
+
| **⚡ ms-eff-gcvit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_low_layercam.JPG" width="100"> |
|
|
462
|
+
| **🔥 ms-eff-gcvit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_low_hirescam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_low_gradcamelementwise.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_low_layercam.JPG" width="100"> |
|
|
463
|
+
|
|
464
|
+
#### MS-Eff-GCViT — High-Level Branch
|
|
465
|
+
|
|
466
|
+
| Model | Branch-Level | Image | EigenGradCam | GradCamPlusPlus | XGradCam |
|
|
467
|
+
| :--- | :---: | :---: | :---: | :---: | :---: |
|
|
468
|
+
| **⚡ ms-eff-gcvit-b0** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b0_high_xgradcam.JPG" width="100"> |
|
|
469
|
+
| **🔥 ms-eff-gcvit-b5** |  | <img src="docs/samples/images/western/western_fake_1.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_high_eigengradcam.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_high_gradcamplusplus.JPG" width="100"> | <img src="docs/xai-results/ms_eff_gcvit_b5_high_xgradcam.JPG" width="100"> |
|
|
470
|
+
|
|
334
471
|
|
|
335
472
|
## 📬 Authors
|
|
336
473
|
|
|
@@ -351,6 +488,7 @@ _**This project was developed as a Senior Graduation Project by the Department o
|
|
|
351
488
|
6. [`deepfake-detection-project-v4`](https://github.com/ameencaslam/deepfake-detection-project-v4) - _Multiple Deep Learning Models by Ameen Caslam_
|
|
352
489
|
7. [`Awesome-Deepfake-Detection`](https://github.com/Daisy-Zhang/Awesome-Deepfakes-Detection
|
|
353
490
|
) - _A curated list of tools, papers and code by Daisy Zhang_
|
|
491
|
+
8. [`Pytorch-Grad-Cam`](https://github.com/jacobgil/pytorch-grad-cam) - _Advanced Visual Explanations for PyTorch Models_
|
|
354
492
|
|
|
355
493
|
## ⚖️ License
|
|
356
494
|
|