🌗 CuRe

Learning Continuous Source Responses for Generalizable AI-Generated Image Detection

Manni Cui1,2 · Ruiqi Liu3 · Zijian Yu1 · Hao Tan3 · Zibo Wei2 · Zian Wang4 · Ziheng Qin3 · Huijia Zhu1 · Weiqiang Wang1 · Jun Lan1,† · Shu Wu3,†

1Ant Group   2Huazhong University of Science and Technology   3Institute of Automation, Chinese Academy of Sciences   4Jilin University

† Corresponding authors

Project Page Paper HF Paper HF Model License Python PyTorch Stars

English · 简体中文

🌐 Project Page · 📄 Paper · 🤗 Hugging Face · 🧭 Method · 📊 Results · 🚀 Quick Start · 📚 Citation

Binary supervision versus continuous source change from real (alpha = 0) to generated (alpha = 1).

TL;DR. Instead of training a detector only on real/fake endpoints, CuRe teaches the backbone how much of an image is generated, by regressing the mixing ratio along a continuous real-to-generated path, and then classifies inside a compact source-response subspace. Trained only on GenImage SD v1.4, it reaches 89.7% average balanced accuracy across ten public benchmarks, +5.2 over the second-best method.

Existing AI-generated image detectors often perform well on in-domain data, but their robustness and cross-generator generalization remain limited, a weakness commonly attributed to overfitting to shortcut cues. Most methods that try to suppress shortcut learning still keep binary classification as the training task, without reconsidering how the task itself shapes the learned representation.

CuRe (learning Continuous Source Responses) revisits detection from the perspective of the training task. It reformulates backbone adaptation as regression of real–generated mixing ratios, which gives finer supervision than binary endpoint separation, and then selects a compact source-response subspace that suppresses nuisance variation and limits the final classifier's access to potential shortcut cues.


📰 News

  • 2026.10  Code and weights are also on 🤗 Hugging Face, with a paper page.
  • 2026.09  Paper released on arXiv.
  • 2026.09  Inference code and the trained CuRe adapter (25 MB) released.

✨ Highlights

🎯 A different training task Regress the real–generated mixing ratio $\alpha$ instead of fitting binary labels at the two endpoints
🧭 Source-response subspace 128 directions selected by their response to real→generated change relative to content and same-source mixing, not by total variance
🏆 Strong generalization 89.7% average B.Acc. over 10 public benchmarks, ahead of DDA (84.5%) by 5.2 points
🌍 In the wild 93.8% on Chameleon and 79.7% on RealChain, +10.9 and +11.8 over the second-best method
🧩 Backbone-agnostic Ratio supervision beats binary supervision in all 12 settings across CLIP, DINOv2, DINOv3 and PE Core (LoRA r = 16 / 32 / 64), with AUC gains of 2.7–9.3 points
🪶 Light release All trained parameters ship as a 25 MB adapter on top of the public PE Core L/14 backbone

🧭 How It Works

Overview of the CuRe framework: Stage 1 continuous source learning and Stage 2 source-response subspace.

Stage 1 · Continuous source learning. A real image $x_r$ and a generated image $x_g$, paired at random, are blended in pixel space with an independently sampled ratio:

xα=(1−α) xr+α xg,α∼U(0,1)x_\alpha = (1-\alpha)\,x_r + \alpha\,x_g, \qquad \alpha \sim \mathcal{U}(0,1)

The PE Core L/14 encoder stays frozen and is adapted with LoRA (rank 64 on the query and value projections of every attention layer). A sigmoid ratio head predicts $\alpha$ and is trained with binary cross-entropy against $\alpha$ as a soft target. The ratio head is then discarded.

Stage 2 · Interference-suppressed source-response subspace. With the adapted encoder frozen, CuRe traces real→generated (RF), real→real (RR) and generated→generated (FF) trajectories on the grid $\alpha \in \lbrace 0, 0.2, \dots, 1 \rbrace$ and summarizes each by its slope over $\alpha$. Three statistics follow: $C_F$ for RF responses, $C_M$ for same-source mixing responses, and $C_S$ for content variation across pairs. The subspace $W$ keeps the $k = 128$ directions with the strongest RF response relative to interference:

CF w=γ (λsCS+λmCM+ϵI) wC_F\,w = \gamma\,(\lambda_s C_S + \lambda_m C_M + \epsilon I)\,w

Stage 3 · Subspace-constrained classification. A single linear layer is trained on $W^\top(z-\mu)$ with cross-entropy, while the encoder, $\mu$ and $W$ stay frozen. The classifier's decision direction is therefore restricted to $\mathrm{span}(W)$.


📊 Results

Balanced accuracy (%) on ten public benchmarks. CuRe is trained only on the Stable Diffusion v1.4 subset of GenImage. Each benchmark score is the unweighted mean over its evaluated subsets. Numbers are from Table 1 of the paper.

Method AIGCDetect AIGIBench UnivFD EvalGEN SynthWildX WildRF BFree-On. RRDataset RealChain Chameleon Overall Avg.
NPR (CVPR'24) 63.5 63.9 53.5 86.3 47.4 51.9 46.7 49.3 50.7 54.9 56.8
UnivFD (CVPR'23) 67.4 74.7 50.8 94.5 61.6 57.3 64.9 61.2 66.1 62.1 66.1
FatFormer (CVPR'24) 61.3 63.4 52.6 65.1 52.6 57.7 60.7 50.3 50.0 50.6 56.4
C2P-CLIP (AAAI'25) 78.4 69.6 91.6 66.4 55.3 59.5 50.0 52.7 50.2 50.7 62.4
DRCT (ICML'24) 68.3 73.4 56.7 75.4 74.6 73.8 73.8 60.5 64.9 68.5 69.0
SAFE (KDD'25) 73.0 60.2 53.0 92.8 56.0 58.5 60.8 59.3 63.4 46.7 62.4
DDA (NeurIPS'25) 86.1 85.0 77.4 97.9 90.7 90.5 94.5 71.6 67.9 82.9 84.5
GAPL (CVPR'26) 96.2 91.3 95.2 97.5 86.4 85.6 67.3 75.1 62.8 69.1 82.6
DGS-Net (ICML'26) 77.2 60.1 78.6 53.0 50.3 53.6 50.2 50.0 50.0 50.2 57.3
CuRe (Ours) 89.3 92.8 82.0 98.1 92.7 95.8 90.9 81.5 79.7 93.8 89.7

Ablations on AIGIBench (mean ± std over five seeds; Tables 4 and 5 of the paper):

Stage 1 supervision B.Acc. AUC
Binary classification (baseline) 80.2 ± 0.6 89.2 ± 0.9
Stage-1 ratio prediction (direct) 89.8 ± 0.3 97.2 ± 0.4
Full CuRe 92.6 ± 0.4 97.5 ± 0.7
Stage 2 representation B.Acc. AUC
PCA-128 89.8 ± 0.9 91.1 ± 0.9
Full feature 89.7 ± 0.4 90.5 ± 0.2
$C_M + C_S$ directions 83.2 ± 1.1 85.8 ± 0.6
$C_F$ subspace (CuRe) 92.6 ± 0.4 97.5 ± 0.7

See the paper for subset-level results, cross-backbone comparisons and robustness to JPEG compression, resizing and blur.


🚀 Quick Start

1. Setup

Requires Python 3.10 or newer.

git clone https://github.com/manic-cui/CuRe.git
cd CuRe
pip install -r requirements.txt
shasum -a 256 -c weights/cure_adapter.pt.sha256

The same files are mirrored on Hugging Face, so you can also fetch them with hf download mannicui0/CuRe --local-dir CuRe instead of git clone.

weights/cure_adapter.pt (about 25 MB) ships with this repository and holds every trained parameter of CuRe: the Stage-1 LoRA updates, the Stage-2 source-response subspace (mu, W), and the linear classifier head.

The frozen backbone, Perception Encoder Core L/14 at 336 px, is not stored here. On first use it is downloaded automatically from the public Hugging Face repository facebook/PE-Core-L14-336 (file PE-Core-L14-336.pt, 2.7 GB, Apache-2.0) and cached by huggingface_hub. If the machine cannot reach Hugging Face, either set HF_ENDPOINT to a mirror or download the file once and pass --base-checkpoint /path/to/PE-Core-L14-336.pt.

2. Inference

python infer.py --input image.jpg
python infer.py --input images --recursive --batch-size 8
python infer.py --input image.jpg --base-checkpoint /path/to/PE-Core-L14-336.pt

Predictions are written to stdout as JSON lines. Use --output output.jsonl to save them and --checkpoint to select another adapter. Run python infer.py --help for all options. Each line has the form

{"image": "<path relative to --input>", "probability_fake": <float in [0, 1]>, "prediction": "real" | "fake"}

where prediction is fake when probability_fake is at least 0.5. Supported formats: .jpg, .jpeg, .jfif, .png, .webp, .bmp, .tif, .tiff.

Inference runs on the GPU by default (--device cuda, or --device cuda:N to pick a card) with fp16 automatic mixed precision, which is the setting used for all reported results. --device cpu is supported for machines without a GPU; it computes in fp32, so scores can differ from the reported ones in the third decimal place.

The backbone weights and the adapter are merged into one state dict and loaded with strict=True, so any missing or unexpected tensor is an error.


🗂️ Repository Layout

.
├── infer.py                  inference entry point
├── cure/
│   ├── backbone.py           PE Core L/14 vision tower with Q/V LoRA
│   ├── model.py              CuRe model: backbone + subspace + linear head
│   └── preprocess.py         image preprocessing
├── weights/
│   ├── cure_adapter.pt       all trained CuRe parameters (~25 MB)
│   └── cure_adapter.pt.sha256
├── assets/                   figures used in this README
├── requirements.txt
├── LICENSE
└── NOTICE

📚 Citation

If you find CuRe useful, please cite:

@article{cui2026cure,
  title   = {Learning Continuous Source Responses for Generalizable {AI}-Generated Image Detection},
  author  = {Cui, Manni and Liu, Ruiqi and Yu, Zijian and Tan, Hao and Wei, Zibo and Wang, Zian and Qin, Ziheng and Zhu, Huijia and Wang, Weiqiang and Lan, Jun and Wu, Shu},
  journal = {arXiv preprint arXiv:2609.14316},
  year    = {2026}
}

📬 Contact


⚖️ License

Code is released under the Apache License 2.0. The PE Core vision implementation is adapted from Meta's Perception Encoder (Apache-2.0); see NOTICE for attribution.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for mannicui0/CuRe

Adapter
(1)
this model

Paper for mannicui0/CuRe