Papers
arxiv:2608.04349

Poly-OPD: Heterogeneous Multi-Teacher On-Policy Distillation for Capability-Selectable Flow Models

Published on Aug 5
· Submitted by
fu
on Aug 6
Authors:
,
,
,
,
,
,
,
,
,
,
,

Abstract

Poly-OPD distills complementary strengths from heterogeneous text-to-image teachers into a compact flow-matching student via pixel-bridged on-policy distillation, cross-model DINOv2 supervision, and adaptive adapter organization with gap-aware curriculum.

Leading open text-to-image models often carry complementary strengths: one may lead on preference-aligned aesthetics while another follows compositional instructions more faithfully. However, differences in their autoencoders and noise schedules make it difficult to transfer these strengths across models. In this paper, we present Poly-OPD, a framework that can consolidate complementary strengths of heterogeneous teachers into a single compact flow-matching student. To bridge the incompatible latent spaces of different teachers, Poly-OPD performs on-policy distillation through a pixel bridge. Each student-generated image is re-encoded by a selected teacher's encoder and refined from a noise level matched by magnitude under the teacher's noise schedule. The resulting target is further matched to the student in frozen DINOv2 space, enabling supervision across incompatible latent spaces. To retain complementary capabilities without cross-teacher interference, Poly-OPD uses a gradient compatibility diagnostic to organize its adapters: attention LoRA modules are shared across teachers, whereas feed-forward adapters remain teacher-specific. During distillation, a gap-aware curriculum devotes more training to compositional categories where the student still falls short of the teacher. As each gap narrows, training shifts toward categories with larger remaining gaps. By distilling FLUX.1-dev and Z-Image into a 2.5B SD3.5-Medium student, Poly-OPD improves GenEval from 67.3 to 73.3, surpassing both larger teachers, and raises DrawBench HPSv3 from 9.34 to 11.35, consolidating both strengths within a switchable model.

Community

Paper submitter

Leading open text-to-image models often carry complementary strengths: one may lead on preference-aligned aesthetics while another follows compositional instructions more faithfully. However, differences in their autoencoders and noise schedules make it difficult to transfer these strengths across models. In this paper, we present Poly-OPD, a framework that can consolidate complementary strengths of heterogeneous teachers into a single compact flow-matching student. To bridge the incompatible latent spaces of different teachers, Poly-OPD performs on-policy distillation through a pixel bridge. Each student-generated image is re-encoded by a selected teacher's encoder and refined from a noise level matched by magnitude under the teacher's noise schedule. The resulting target is further matched to the student in frozen DINOv2 space, enabling supervision across incompatible latent spaces. To retain complementary capabilities without cross-teacher interference, Poly-OPD uses a gradient compatibility diagnostic to organize its adapters: attention LoRA modules are shared across teachers, whereas feed-forward adapters remain teacher-specific. During distillation, a gap-aware curriculum devotes more training to compositional categories where the student still falls short of the teacher. As each gap narrows, training shifts toward categories with larger remaining gaps. By distilling FLUX.1-dev and Z-Image into a 2.5B SD3.5-Medium student, Poly-OPD improves GenEval from 67.3 to 73.3, surpassing both larger teachers, and raises DrawBench HPSv3 from 9.34 to 11.35, consolidating both strengths within a switchable model.

Really cool papers, congrats! I'm trying something similar and have a few questions!=)

  1. Actually my case isn't really "big teacher → small student" like in your papers — I'm adapting one model to a completely
    different VAE. The teacher is the original model with its native VAE, and the student is the same transformer being
    retrained to live in a new, much more compressed latent space. So there's no capacity gap in the transformer at all, only
    the latent space changes. Your framework seems to cover this by construction (incompatible latents is the whole point), but
    you never test this "VAE swap" setup — do you see any reason it wouldn't work, or anything you'd do differently for it?
  2. My student is a 6-step distilled model, not 20-40 steps like yours. Will the noise-level matching still work on such a
    coarse schedule, with gradients only flowing through the last 1-2 steps?
  3. My student's VAE has way stronger compression than f8 — it's f128 with 512 channels, so a 1024px image is only 64 tokens.
    I worry the teacher will paint in fine detail that the student's latent just can't hold. Did you ever hit this, and how
    would I even tell — does the OPD loss just plateau?
  4. Your depth ablation is about composition, where deep re-noising wins. What about the opposite case — I mostly want to fix
    textures and fine detail without touching the structure. Is shallow refinement (r around 1-5) worth trying, and how did you
    evaluate texture quality, since GenEval doesn't see it?
  5. What value of λ_WS did you use in stage 2? Couldn't find it in the paper.
  6. Why stop at 800 steps? Does it start overfitting to DINOv2 features (some kind of style drift) if you go longer?
  7. Backprop goes through the student's decoder, which for me is a big one. Did you keep it in bf16, use checkpointing
    through it? Any stability issues from that?
  8. The noise you add before the teacher's refinement pass — new random noise every iteration, or fixed? You showed
    stochastic rollouts hurt, so I wonder if this matters too.
  9. What CFG did the teacher (FLUX.1-dev) run during refinement? High guidance gives oversaturated images — doesn't the
    student inherit that?
  10. Does it work with batch size 1? At higher resolutions I can't fit more. And is the final model EMA weights or raw?
  11. Any plans to release the code? Would save me a lot of guessing :)

Thanks!

·

Thanks — I'll answer what we actually measured and be explicit about where we have no data, since several of your questions are about regimes we never ran.

0. VAE swap

We haven't tested it, so I won't guess at whether it works. What I can tell you is what the framework assumes, which may be the useful part: the teacher and student never exchange latents. The teacher only ever receives the student's decoded pixels, re-encodes them with its own encoder, refines, and decodes back to pixels; the comparison then happens in frozen DINOv2 feature space. Nothing in the pipeline reads the other model's latent coordinates.

Related evidence you may find relevant: in our perceptual-space ablation, replacing the DINOv2 feature comparison with a direct MSE in student latent coordinates collapses outright. Whatever else varies, the loss has to live in a shared, stable feature space rather than in either model's coordinates.

1. 6-step student

Not a regime we ran — our student uses a 20-step Euler sampler throughout and we never distilled into a few-step model, so I can't tell you how the noise-level matching behaves on a 6-step grid.

Our refinement-depth result is in (3), but note it separates by metric type rather than being uniformly "deeper is better", so I'd be careful extrapolating it to a coarse schedule.

2. Strongly compressed latent

We never hit this — both our VAEs are f8/16-channel, so we have no experience with a teacher painting detail the student's latent cannot hold, and no diagnostic to offer for spotting it.

Two facts that bear on it. Our loss is DINOv2 CLS cosine computed on images resized to 224px, so it is a semantic objective and largely blind to fine texture by construction; in our runs unreachable high-frequency detail never became visible in the loss. And, as above, the direct latent-space MSE variant collapsed, so we have no data on a loss that would be sensitive to latent capacity in the way you're worried about.

3. Shallow refinement and texture

This is the one place our ablation speaks fairly directly to your question, and it points the way you were hoping.

Varying the teacher refinement range with everything else fixed, preference metrics are largely insensitive: HPSv3 varies within 0.24 across the whole range, UR-Avg within 0.05, and UR-Avg is in fact marginally higher for the low-noise range [0,10] than for our main setting [15,20]. What moves sharply is composition — GenEval goes from 67.2 at [0,10] to 73.3 at [15,20]. Our reading is that compositional prompts need the teacher to intervene at high noise, where layout, counts and spatial relations can still be reorganized, whereas appearance quality is already served by a low-noise local polish. So if structure is explicitly what you don't want to touch, shallow refinement is not obviously the wrong regime in our data.

Caveat on what we measured: appearance was evaluated with ImageReward, HPSv3, PickScore and UnifiedReward, not with a texture-specific metric, and our objective is a 224px semantic loss. So "appearance metrics are insensitive to depth" is not the same claim as "texture is preserved at shallow depth", and we don't have the second one.

4. λ_WS

0.01.

5. Why 800 steps

For this paper it's a 500-step warm start followed by 800 OPD steps. The 800 is checkpoint selection on a plateau rather than a principled stopping rule.

On whether it's DINOv2 overfitting or style drift specifically: we did not run that experiment, so I have no evidence either way. Our ConvNeXt and SigLIP variants were run as perceptual-space ablations at fixed length — both stay competitive on preference metrics while costing about 7 GenEval points against DINOv2 — not as long-horizon drift tests, which is what your question would actually need.

6. Backprop through the decoder

The student VAE is kept in fp32 for the whole run even though training is otherwise fp16, and we force autocast off around every VAE call. We never attempted a bf16 decode backward, so I have no stability data on it.

The decode is gradient-checkpointed one image at a time — a loop over the batch with per-sample checkpointing, then concatenate — rather than checkpointing the batched decode. The teacher-side decode runs under no_grad.

One detail not in the paper: we clamp to [-1, 1] inside the checkpointed decode, so saturated pixels receive exactly zero gradient.

7. The teacher's noise

Fresh every iteration — new noise at each step, independent of the student's rollout noise, and the student's rollout also starts from fresh initial noise each step. We never tried fixing it, so I can't tell you what it costs.

Worth separating from the stochastic-rollout result you're referring to: that concerns noise injected into the student's own sampling trajectory during rollout, which is a different mechanism from the teacher's SDEdit noise. It doesn't carry over.

8. Teacher CFG

For FLUX.1-dev we pass guidance 3.5, but this is FLUX-dev's distilled guidance embedding — a single forward pass, no negative branch — so the usual classifier-free double-pass mechanism isn't in play. Our Z-Image teacher does use true CFG at 5.0.

On inheritance: against the SD3.5-Medium baseline, ImageReward rises from 0.922 to 1.168 and HPSv3 from 9.341 to 11.354, with PickScore essentially unchanged (0.869 vs. 0.866). So whatever the teachers' guidance imparts did not show up as a regression on preference metrics. We didn't run a teacher-guidance sweep, so that's an observation from the main runs rather than a controlled result.

9. Batch size 1, and EMA

Nothing in our loss uses batch statistics — the feature-space comparison is per-sample and then averaged — so there's no structural obstacle. We ran an effective batch of 28 (4 samples per GPU across 7 GPUs, no gradient accumulation) and never tried batch 1. One thing about our loop that would matter there: we draw a single refinement depth per step for the whole batch, and with no accumulation there is nothing averaging over that draw.

The reported model is EMA weights — checkpoints are saved with the EMA parameters swapped in, decay 0.999, updated every 8 optimizer steps.

10. Code release

Yes — the code is going through internal review at our company right now, and we'll open-source it as soon as that clears.

Hope this helps, and good luck with the VAE swap — I'd be curious to hear how the warm-start stage behaves in that setting.

This is an automated message from the Librarian Bot. I found the following papers similar to this paper.

The following papers were recommended by the Semantic Scholar API

Please give a thumbs up to this comment if you found it helpful!

If you want recommendations for any Paper on Hugging Face checkout this Space

You can directly ask Librarian Bot for paper recommendations by tagging it in a comment: @librarian-bot recommend

Sign up or log in to comment

Get this paper in your agent:

hf papers read 2608.04349
Don't have the latest CLI?
curl -LsSf https://hf.co/cli/install.sh | bash

Models citing this paper 0

No model linking this paper

Cite arxiv.org/abs/2608.04349 in a model README.md to link it from this page.

Datasets citing this paper 0

No dataset linking this paper

Cite arxiv.org/abs/2608.04349 in a dataset README.md to link it from this page.

Spaces citing this paper 0

No Space linking this paper

Cite arxiv.org/abs/2608.04349 in a Space README.md to link it from this page.

Collections including this paper 0

No Collection including this paper

Add this paper to a collection to link it from this page.