Q-ReAlign — Mini (0.8B)
Lightweight, human-aligned multimodal quality judge built on a modern Qwen3.5 vision-language backbone.
Q-Align-level quality at 0.8B — the fast, tiny variant: 26.7 img/s on an RTX 4090, and still beats the original Q-Align on average.
GitHub ·
Method ·
Adapting guide ·
Mini (0.8B) · Lite (4B) · Pro (9B)
What this is
Q-ReAlign scores the perceptual quality / aesthetic appeal of an image or video the way Q-Align does: the model is asked to rate quality, and the probability mass it places on the discrete words excellent / good / fair / poor / bad is collapsed — via a fixed weighting [1.0, 0.75, 0.5, 0.25, 0.0] — into a single scalar in [0, 1].
Mini (0.8B) is the smallest of three sizes (Mini 0.8B · Lite 4B · Pro 9B) and the throughput champion. Despite its size it matches or beats the original Q-Align on average across the seven QA benchmarks — ideal for high-volume scoring, edge / consumer GPUs, and reward-model loops.
- Backbone: Qwen3.5-VL (
model_type: qwen3_5), hybrid linear/full attention text tower + SigLIP-style vision encoder
- Tasks: IQA (image quality) · IAA (image aesthetics) · VQA (video quality) — the unified ONE-ALIGN setting
- Training: full-parameter SFT in bf16 via ms-swift, vision tower + projector trainable
- Precision: bfloat16 · dtype
auto
Results
Per-dataset SRCC / PLCC on seven QA benchmarks. Mini (0.8B) reaches avg SRCC 0.879 vs. Q-Align's 0.869.
| Model | KonIQ | SPAQ | KADID | AGI | LIVE | AVA | LSVQ | Avg. |
|---|
| Q-Align | 0.942 / 0.944 | 0.932 / 0.933 | 0.912 / 0.920 | 0.738 / 0.781 | 0.897 / 0.870 | 0.798 / 0.796 | 0.867 / 0.866 | 0.869 / 0.873 |
| Mini (0.8B) | 0.935 / 0.938 | 0.931 / 0.933 | 0.903 / 0.907 | 0.811 / 0.848 | 0.907 / 0.873 | 0.797 / 0.794 | 0.869 / 0.869 | 0.879 / 0.880 |
Each cell is SRCC / PLCC, on the full evaluation sets (KonIQ, SPAQ, KADID, AGI, LIVE, AVA, LSVQ).
Speed
On the SPAQ dataset, Mini tops out at 26.7 img/s @ batch size 4 on a consumer
RTX 4090 and 61.1 img/s @ batch size 14 on an H200 141GB.
Quick start
1import torch
2from PIL import Image
3from transformers import AutoModelForImageTextToText, AutoProcessor
4# transformers >= 5.2.0 for Qwen3.5 support
5
6CKPT, IMAGE = "q-future/Q-ReAlign-Mini-0.8B", "photo.jpg"
7LEVELS = ["excellent", "good", "fair", "poor", "bad"]
8WEIGHTS = [1.0, 0.75, 0.5, 0.25, 0.0]
9
10device = "cuda" if torch.cuda.is_available() else "cpu"
11processor = AutoProcessor.from_pretrained(CKPT)
12model = AutoModelForImageTextToText.from_pretrained(CKPT, dtype="auto").to(device).eval()
13
14messages = [{"role": "user", "content": [
15 {"type": "image"},
16 {"type": "text", "text": "How would you rate the quality of this image?"},
17]}]
18text = processor.apply_chat_template(messages, add_generation_prompt=True) + "The quality of the image is"
19inputs = processor(text=[text], images=[Image.open(IMAGE).convert("RGB")], return_tensors="pt").to(device)
20
21ids = [processor.tokenizer(" " + w, add_special_tokens=False).input_ids[0] for w in LEVELS]
22probs = model(**inputs).logits[0, -1, ids].softmax(-1)
23score = (probs * torch.tensor(WEIGHTS, device=device)).sum().item()
24print(f"quality score: {score:.4f}") # 0 (worst) .. 1 (best)
The score is the expected value of the level weights under the model's next-token
distribution over the five level words — no sampling, one forward pass.
Aesthetics or video
Swap the prompt for the task:
- Aesthetics (IAA): "How would you rate the aesthetics of this image?" → stem "The aesthetics of the image is"
- Video (VQA): sample N frames (default 8) and pass them as the image sequence; prompt "How would you rate the quality of this video?" → stem "The quality of the video is"
Model details
| Mini (0.8B) |
|---|
| Architecture | Qwen3_5ForConditionalGeneration |
| Text hidden size | 1024 |
| Text layers | 24 (linear attention with full-attention every 4th layer) |
| Vision encoder depth | 12, hidden 768, patch 16, spatial merge 2 |
| Vocab | 248320 |
| Context length | up to 262144 |
| Tied embeddings | yes |
| Tensor dtype | bfloat16 |
| Weights | single safetensors (~2.2 GB) |
Scoring contract
- Level vocabulary:
excellent, good, fair, poor, bad
- Weights:
[1.0, 0.75, 0.5, 0.25, 0.0]
- Output: scalar in
[0, 1], higher = better
- The five level tokens are matched with a leading space (
" excellent", …); keep that when porting to other tokenizers.
Intended use & limitations
- Use: no-reference image/video quality assessment, aesthetic scoring, dataset
curation, ranking and filtering generated media, reward signals for generative
pipelines — especially where throughput matters.
- Out of scope: safety/content moderation, factual or identity judgments,
medical/forensic grading. Quality is perceptual and dataset-conditioned.
- Scores are calibrated to the training MOS distribution; absolute values are most
meaningful relative to one another. Re-calibrate before mixing with other scales.
Acknowledgements & citation
Built on the shoulders of
Q-Align (the
discrete text-defined-levels method and ONE-ALIGN),
ms-swift
(training/inference backbone), and
Qwen3.5-VL
(the vision-language backbone). If you use this model, please also cite the originals:
1@inproceedings{wu2024qalign,
2 title = {Q-Align: Teaching {LMM}s for Visual Scoring via Discrete Text-Defined Levels},
3 author = {Wu, Haoning and Zhang, Zicheng and Zhang, Weixia and Chen, Chaofeng and
4 Liao, Liang and Li, Chunyi and Gao, Yixuan and Wang, Annan and Zhang, Erli and
5 Sun, Wenxiu and Yan, Qiong and Min, Xiongkuo and Zhai, Guangtao and Lin, Weisi},
6 booktitle = {Proceedings of the 41st International Conference on Machine Learning (ICML)},
7 year = {2024}
8}
9
10@inproceedings{swift2025,
11 title = {{SWIFT}: A Scalable Lightweight Infrastructure for Fine-Tuning},
12 author = {ModelScope Team},
13 booktitle = {Proceedings of the AAAI Conference on Artificial Intelligence (AAAI)},
14 year = {2025},
15 note = {\url{https://github.com/modelscope/ms-swift}}
16}
17
18@misc{qwen3_5,
19 title = {Qwen3.5: Towards Native Multimodal Agents},
20 author = {Qwen Team},
21 year = {2025},
22 howpublished = {\url{https://github.com/QwenLM/Qwen3-VL}}
23}