File size: 6,670 Bytes
51d3119
 
 
 
 
 
 
 
 
 
 
 
 
 
9f3f073
 
 
51d3119
c0b3703
9f3f073
c0b3703
 
ddcfb7d
9f3f073
ddcfb7d
 
51d3119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2a2e29
51d3119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2a2e29
 
51d3119
 
 
 
 
6f32ee8
 
 
 
 
 
 
 
 
 
9f3f073
6f32ee8
 
 
 
 
 
 
51d3119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a21bcba
 
51d3119
0d8aa44
 
 
51d3119
 
 
 
 
 
 
 
 
 
 
 
9f3f073
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a2a2e29
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
---
language:
- en
library_name: pytorch
pipeline_tag: image-classification
tags:
- ltf
- ai-generated-image-detection
- clip
- multiple-instance-learning
metrics:
- accuracy
---

# LTF — AI-generated image detection

[Paper](https://arxiv.org/abs/2611.04529) · [Project page](https://huiguanlab.github.io/LTF/) · [Code](https://github.com/HuiGuanLab/LTF)

**[Try the online demo](https://huggingface.co/spaces/MuskAI/LTF-Demo)** — upload
an original image and click Run Analysis. The demo uses the Fusion branch at threshold
0.5 by default.

The demo also shows exact tile boundaries, L1 per-head tile attention, L2 view
weights, top-four attention crops, within-tile MIL patch attention and read-only parameters.
Attention shows relative model focus and is not a pixel-level forgery probability.

This repository contains the **epoch 20 checkpoint** used in the historical
GenImage evaluation `20260326_012209_ViT-L-14_genimage_v3_v3_3`.

LTF uses a frozen **CLIP ViT-L/14** backbone, two-level multiple-instance
learning (MIL), cross-shuffle during training, and pool-logit gated fusion.
The repository includes the custom PyTorch runtime and the frozen backbone.
It does not require conversion to a Transformers architecture.

## Historical results

Fixed threshold **0.5**, 8 GenImage subsets, **100,000 images**. Accuracy is the
unweighted mean across subsets, as recorded in the original rounded logs:

| Branch | Accuracy |
| --- | ---: |
| L1 | 95.26% |
| L2 | 97.39% |
| Fusion | **98.39%** |

Per-subset metrics are in `results/genimage8_logged_metrics.csv`.
These are historical logged results; uploading this repository did not rerun
the complete benchmark. SD1.4 official validation images were used during
training validation, so that subset overlaps model validation. These results
do not represent eight entirely held-out generators.

## Download and run

Use **Python 3.11**. The commands below use this model repository.

```bash
python -m pip install -U huggingface_hub
hf download MuskAI/LTF-v3.3 --local-dir ./LTF-v3.3
cd LTF-v3.3
python -m pip install -r requirements.txt
python inference.py --input /path/to/image.jpg --device cpu
```

For GPU inference, use `--device cuda:0`. For larger images, lower the CLIP
forward chunk size without removing tiles:

```bash
python inference.py --input /path/to/image.jpg --device cuda:0 --chunk-size 8
```

## Python API

Run from the downloaded repository directory:

```python
from ltf_final import LTFDetector

detector = LTFDetector(device="auto", chunk_size=8)
result = detector.predict("image.jpg", branch="fusion", threshold=0.5)
print(result["prediction"], result["score_fake"])
print(result["probabilities"])
```

The image is decoded as RGB. Non-overlapping full 224×224 local blocks, with right/bottom boundary completion,
plus a global view use CLIP preprocessing. Input files are not
recompressed. Test tiling depends on image size. Labels are **0=real, 1=fake**.
The API returns L1/L2/fusion scores, the selected label and the view count.
Loading the model does not download external weights after this repository
has been downloaded. It uses `backbones/ViT-L-14.pt`.

## Run the web demo locally

The tested Gradio UI is included in `demo/`. From the downloaded model directory:

```bash
python -m pip install -r demo/requirements.txt
LTF_MODEL_DIR="$PWD" python demo/app.py
```

Open `http://localhost:7860`. For a remote server, forward port 7860 over SSH.
Upload an original file, click **Run Analysis**, and inspect fusion, L1 and L2 scores.
The preview is for display only; inference uses the original file's bytes.

The demo also supports deployment as a separate Gradio Space. Set
`LTF_MODEL_REPO` to this model ID and `LTF_MODEL_REVISION` to a commit SHA.
Creating the online compute Space requires an eligible Hugging Face account.
Publishing the model repository alone does not start a hosted inference service.

## Checkpoint identity and provenance

`weights/epoch_20.pth` is the original core state_dict (not `best.pth`):

```text
SHA256 32e9fa2e38e04d6d0221c844d650f0d45f7235bbf898b5ad665543d8be580031
```

Frozen CLIP backbone:

```text
SHA256 b8cca3fd41ae0c99ba7e8951adf17d267cdb84cd88be6f7c2e0eca1737a03836
```

`release_manifest.json` records checksums of every runtime file. The original
training and evaluation directories did not save training-day source snapshots.
The released core was recovered from git commit
`65c18ee5868ced87a27d048261e237632ad5d704`, with network naming adjusted to LTF.
This verifies checkpoint identity and runtime compatibility, not bit-for-bit
reproduction of the original training process. This Hub adaptation adds
tensor-only checkpoint loading, preserves the model root in symlink-based Hub
caches, and removes a machine-specific dataset path.

Source comments and docstrings are in English. This documentation update preserves
the executable AST and checkpoint parameter files.

## Limitations

Scores are not calibrated authenticity probabilities. Predictions can change
with image content, generator, editing and compression. This model is a
research detector; an individual score does not prove image provenance.

The public demo uses configurable image-size limits for its available compute;
oversized uploads are rejected, not silently resized. CPU inference can be slow
for images containing many local tiles.

## License and citation

The official [source repository](https://github.com/HuiGuanLab/LTF) is released
under the [MIT license](https://github.com/HuiGuanLab/LTF/blob/main/LICENSE).
Example images retain the terms of their original datasets and rightsholders.
Bundled CLIP components retain the upstream
[OpenAI CLIP license](https://github.com/openai/CLIP/blob/main/LICENSE).

Please cite the LTF paper:

```bibtex
@inproceedings{chen2026ltf,
  title={Learning to Falsify: Hierarchical Multiple Instance Learning for High Resolution AI-Generated Image Detection},
  author={Chen, Haoran and Gao, Daiqi and Li, Xinyuan and Wang, Yongwei and Zhu, Lei and Cai, Rui and Dong, Jianfeng},
  booktitle={Proceedings of the 34th ACM International Conference on Multimedia},
  year={2026},
  doi={10.1145/3767308.3836365},
  eprint={2611.04529},
  archivePrefix={arXiv}
}
```

## Tiling policy

Full 224×224 blocks are taken without overlap. If pixels remain at the right
or bottom, a final block is aligned to that boundary; only boundary blocks
may overlap. For width 500, horizontal starts are 0, 224, 276. The global view
is separate. This corrects earlier uniformly overlapping tiling; weights are
unchanged, but predictions can change. Historical benchmark results have not
been recomputed with this preprocessing.