|
Download README.md from MuskAI/LTF-Demo: direct link, hf CLI and curl.
- Browser
- Download file 5.58 kB
-
https://huggingface.co/spaces/MuskAI/LTF-Demo/resolve/main/README.md
- Command line
-
hf download hf://spaces/MuskAI/LTF-Demo/README.md
-
curl -L -o README.md https://huggingface.co/spaces/MuskAI/LTF-Demo/resolve/main/README.md
5.58 kB
| title: LTF Image Detector | |
| emoji: 🔎 | |
| colorFrom: blue | |
| colorTo: indigo | |
| sdk: gradio | |
| language: en | |
| sdk_version: 6.31.0 | |
| python_version: '3.11' | |
| app_file: app.py | |
| pinned: false | |
| short_description: Test LTF on your original image files | |
| # LTF online demo | |
| Upload an original image file to obtain real / AI-generated scores. The model | |
| uses the original RGB image and its full set of 224-pixel tiles; it does not | |
| resize the entire input to a fixed resolution before inference. The preview | |
| is reduced for display only. Fusion at threshold 0.5 is the default. | |
| This custom PyTorch model uses frozen CLIP ViT-L/14, two-level MIL, cross-shuffle | |
| during training, and gated fusion. The published checkpoint is epoch 20 from | |
| the historical GenImage run, whose logged macro accuracy is 98.39%. | |
| These are historical results, not an accuracy guarantee for uploaded images. | |
| Scores are model outputs and are not calibrated authenticity probabilities. | |
| ## Configuration | |
| Space variables (Settings → Variables and secrets): | |
| | Variable | Meaning | Default | | |
| | --- | --- | --- | | |
| | `LTF_MODEL_REPO` | Model repository containing runtime and weights | Required on Hub | | |
| | `LTF_MODEL_REVISION` | Model commit SHA | `main`; deployment pins a commit | | |
| | `LTF_MODEL_DIR` | Local model folder, for offline testing | Unset | | |
| | `LTF_DEVICE` | `auto`, `cpu`, or `cuda:0` | `auto` | | |
| | `LTF_CHUNK_SIZE` | Number of CLIP views per forward chunk | `8` | | |
| | `LTF_CPU_THREADS` | PyTorch CPU threads | `2` | | |
| | `LTF_MAX_PIXELS` | Largest accepted image, in pixels | `16000000` | | |
| | `LTF_MAX_VIEWS` | Largest accepted count of local tiles + global view | `400` | | |
| Oversized images are rejected explicitly; their pixels or tiles are not silently | |
| removed. Gradio queues one inference at a time. Original image paths and tokens | |
| are not returned in prediction JSON. Uploaded files use Gradio temporary storage | |
| with periodic cleanup; they are not added to either repository. | |
| The runtime downloads the model at the configured revision, verifies its asset | |
| and source hashes, and then loads it once. No training runs on the Space. | |
| For a private model repository, set an appropriately scoped **read** token as | |
| the Space secret `HF_TOKEN`. Do not put tokens in app.py or README.md. | |
| ## Local run | |
| Use Python 3.11 and install `requirements.txt`. From this directory: | |
| ```bash | |
| LTF_MODEL_DIR=../model_repo python app.py | |
| ``` | |
| The web UI and its `predict` API both call the same original-file inference path. | |
| ## Attention and tile inspection | |
| The Analyze button additionally requests the model's existing `return_viz` | |
| outputs during the same forward pass. Temporary observation hooks collect the | |
| eight L1 across-tile aggregation heads. No model parameters are changed. | |
| - Exact, numbered local crop boxes, including edge-aligned overlap and small-image padding. | |
| - L1 tile-attention overlay: mean or any of the eight aggregation heads. | |
| - L2 local-view overlay with the global-view attention weight listed separately. | |
| - Four ranked local crop cards; clicking a card selects its patch inspector. | |
| - Side-by-side original crop, patch overlay and interactive 16×16 weight matrix. | |
| - Large score card and branch comparison, plus per-view attention ranking charts. | |
| - Responsive desktop/mobile layout; replacing an image clears previous analysis. | |
| - A tile selector for inspecting any local tile without rerunning inference. | |
| - Exact view-weight table, embedding fusion gate and read-only model/inference parameters. | |
| - Historical training settings from the original saved configuration, explicitly labeled Training only. | |
| Colors use a fixed log2 scale relative to uniform attention (`weight × N`): | |
| 0.25×, 0.5×, 1×, 2× and 4×. Neutral gray represents the uniform reference; | |
| blue is below and orange-red above that reference. Small differences are not | |
| stretched into strong colors. L2 uses the count of all views, including Global, | |
| for its reference. Overlap uses mean tile weight. Raw weights are available in | |
| the ranking charts, weight table and prediction JSON. A displayed percentage is | |
| an attention share, not a calibrated class probability. | |
| These are model attention values, not pixel-level forgery probabilities or | |
| causal explanations. The eight selectable heads belong to the L1 across-tile | |
| aggregator; L1 patch pooling and L2 view pooling use gated MIL attention. | |
| The original five-output `predict` API is preserved. The new `explain` API | |
| returns prediction results plus visualization images, tables and attention metadata. | |
| Changing a head or inspected tile uses per-session cached data, retained for up | |
| to an hour. Changing the decision branch or threshold updates the result from | |
| the cached scores. Uploading a new image clears previous results. The unchanged | |
| checkpoint is used for both endpoints. | |
| ## Clickable GenImage examples | |
| The gallery includes four real and four generated validation images. Click an | |
| image to run the same prediction and attention analysis as an uploaded file. | |
| Captions show dataset labels, separately from model predictions. Original files, | |
| source paths and checksums are recorded in `examples/manifest.json`; attribution | |
| is in `examples/SOURCE.md`. | |
| ## 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. | |