Instructions to use adarshcod30/openforensics-ensemble with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Keras
How to use adarshcod30/openforensics-ensemble with Keras:
# Available backend options are: "jax", "torch", "tensorflow". import os os.environ["KERAS_BACKEND"] = "jax" import keras model = keras.saving.load_model("hf://adarshcod30/openforensics-ensemble") - Notebooks
- Google Colab
- Kaggle
State the scope limit: face swaps, not AI-generated images
Browse files
README.md
CHANGED
|
@@ -11,6 +11,19 @@ A multi-backbone CNN ensemble that classifies face crops as **Real** or
|
|
| 11 |
**Fake**. Backbones: resnet50, vgg16, efficientnetv2b0. Their pooled embeddings are
|
| 12 |
concatenated and read by a shared classifier head.
|
| 13 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
## Output
|
| 15 |
|
| 16 |
A single sigmoid: **P(Real)**. Fake is `1 - p`.
|
|
@@ -80,11 +93,15 @@ Accuracy with a single degradation family applied to the whole test set, one at
|
|
| 80 |
|
| 81 |
## Limitations
|
| 82 |
|
|
|
|
|
|
|
|
|
|
| 83 |
- Trained on **face crops**. Behaviour on full scenes or non-face images is
|
| 84 |
undefined.
|
| 85 |
- A score near the threshold is not evidence. Treat the margin as part of
|
| 86 |
the output.
|
| 87 |
-
- Performance degrades on manipulation methods absent from OpenForensics
|
|
|
|
| 88 |
- Research and educational use. Not a forensic authority.
|
| 89 |
- **Validation tracks test closely.** Recall on genuine images at threshold 0.5 is 0.986 on validation and 0.961 on test — a gap of 0.025. The 10th percentile of scores on genuine images is 0.977 and 0.830 respectively, so the operating point fitted on validation transfers. This is a property of the corruption-matched augmentation, not of the benchmark.
|
| 90 |
|
|
|
|
| 11 |
**Fake**. Backbones: resnet50, vgg16, efficientnetv2b0. Their pooled embeddings are
|
| 12 |
concatenated and read by a shared classifier head.
|
| 13 |
|
| 14 |
+
> ### ⚠️ Scope: face swaps, not AI-generated images
|
| 15 |
+
>
|
| 16 |
+
> Trained on OpenForensics, where a fake is a GAN face **Poisson-blended into
|
| 17 |
+
> a real photograph**. The model therefore looks for the *seam* left by that
|
| 18 |
+
> compositing. An image generated whole by a diffusion model — ChatGPT,
|
| 19 |
+
> Gemini, Midjourney, Stable Diffusion — has no seam, and this model calls it
|
| 20 |
+
> genuine: measured on ChatGPT and Gemini output, **10 of 10 were classified
|
| 21 |
+
> as Real, most scoring above 0.999**.
|
| 22 |
+
>
|
| 23 |
+
> **A high `probability_real` is not evidence that an image is not
|
| 24 |
+
> AI-generated.** For that you need a synthetic-image detector, which is a
|
| 25 |
+
> different problem with different features.
|
| 26 |
+
|
| 27 |
## Output
|
| 28 |
|
| 29 |
A single sigmoid: **P(Real)**. Fake is `1 - p`.
|
|
|
|
| 93 |
|
| 94 |
## Limitations
|
| 95 |
|
| 96 |
+
- **Face swaps only.** See the scope notice above: fully AI-generated images
|
| 97 |
+
are outside what this model can detect, and it reports them as genuine with
|
| 98 |
+
high confidence.
|
| 99 |
- Trained on **face crops**. Behaviour on full scenes or non-face images is
|
| 100 |
undefined.
|
| 101 |
- A score near the threshold is not evidence. Treat the margin as part of
|
| 102 |
the output.
|
| 103 |
+
- Performance degrades on manipulation methods absent from OpenForensics,
|
| 104 |
+
which was released in 2021 and predates current diffusion generators.
|
| 105 |
- Research and educational use. Not a forensic authority.
|
| 106 |
- **Validation tracks test closely.** Recall on genuine images at threshold 0.5 is 0.986 on validation and 0.961 on test — a gap of 0.025. The 10th percentile of scores on genuine images is 0.977 and 0.830 respectively, so the operating point fitted on validation transfers. This is a property of the corruption-matched augmentation, not of the benchmark.
|
| 107 |
|