Views
No views yet

BinLin203/Warmup-IBQ ships ibq-with-gan.pt, a IBQ-16 tokenizer (16384-entry codebook). This is the warm-up tokenizer: a short reconstruction fine-tune that only recovers the GAN discriminator the public weights omit. It is the baseline that both LlamaGen-REPA and GEAR start from.huggingface-cli download BinLin203/Warmup-IBQ --local-dir ckpts/Warmup-IBQargmax (a
straight-through estimator collapses), so GEAR uses a dual read-out of the codebook
assignment: a hard one-hot branch trains the AR, while a differentiable soft
branch carries a REPA loss that flows back to update only the tokenizer. The result
is a tokenizer whose tokens are far easier for an AR to predict.| Quantizer | Warm-up (baseline) | GEAR (end-to-end) |
|---|---|---|
| VQ-16 | Warmup-VQ · vq-with-gan.pt | GEAR-VQ · gear-vq.pt |
| LFQ-16 | Warmup-LFQ · lfq-with-gan.pt | GEAR-LFQ · gear-lfq.pt |
| IBQ-16 | Warmup-IBQ · ibq-with-gan.pt | GEAR-IBQ · gear-ibq.pt |
| Quantizer | Setting | rFID↓ | PSNR↑ | SSIM↑ |
|---|---|---|---|---|
| VQ-16 | Original | 2.19 | 20.79 | 0.55 |
| Warm-up | 1.72 | 21.06 | 0.57 | |
| GEAR | 1.64 | 20.78 | 0.56 | |
| LFQ-16 | Original | 2.82 | 21.47 | 0.58 |
| Warm-up | 2.42 | 20.97 | 0.56 | |
| GEAR | 2.13 | 20.48 | 0.55 | |
| IBQ-16 | Original | 2.23 | 21.23 | 0.58 |
| Warm-up | 1.97 | 21.18 | 0.58 | |
| GEAR | 1.72 | 20.92 | 0.57 |
All rows use bicubic resize for an apples-to-apples comparison. The choice of interpolation matters (the official LFQ / IBQ numbers use bilinear, which differs); see the paper appendix for the full bilinear vs. bicubic table.
models/), then encode → decode
to reconstruct an image:1import torch, torchvision.transforms as T
2from PIL import Image
3from models import Tokenizers
4from src.utils import load_pretrained_tokenizer_state_dict
5
6vq = Tokenizers["IBQ-16"](codebook_size=16384, codebook_embed_dim=256)
7vq.load_state_dict(load_pretrained_tokenizer_state_dict("ckpts/Warmup-IBQ/ibq-with-gan.pt"), strict=False)
8vq = vq.eval().cuda()
9
10x = T.ToTensor()(Image.open("input.jpg").convert("RGB").resize((256, 256)))
11x = (x * 2 - 1).unsqueeze(0).cuda() # to [-1, 1]
12with torch.no_grad():
13 recon, _ = vq(x) # encode -> quantize -> decode
14out = (recon[0].clamp(-1, 1) + 1) / 2
15T.ToPILImage()(out.cpu()).save("recon.png")1@misc{lin2026gearguidedendtoendautoregression,
2 title = {GEAR: Guided End-to-End AutoRegression for Image Synthesis},
3 author = {Bin Lin and Zheyuan Liu and Chenguo Lin and Sixiang Chen and Yunyang Ge and Yunlong Lin and Jianwei Zhang and Miles Yang and Zhao Zhong and Liefeng Bo and Li Yuan},
4 year = {2026},
5 eprint = {2606.32039},
6 archivePrefix = {arXiv},
7 primaryClass = {cs.CV},
8 url = {https://arxiv.org/abs/2606.32039}
9}
10
11@article{ifsq_llamagenrepa,
12 title = {iFSQ: Improving FSQ for Image Generation with 1 Line of Code},
13 author = {Lin, Bin and Li, Zongjian and Niu, Yuwei and Gong, Kaixiong and
14 Ge, Yunyang and Lin, Yunlong and Zheng, Mingzhe and Zhang, JianWei and
15 Yang, Miles and Zhong, Zhao and others},
16 journal = {arXiv preprint arXiv:2601.17124},
17 year = {2026}
18}