Two roads out of noise — the transport race
Every modern image generator solves the same job: move a cloud of random noise onto the shape of real data. Diffusion ends up with a wiggly, detour-filled road it must crawl along in many small steps. Flow matching (rectified flow) trains on the straight line between each noise point and its data point. Same start, same destination — very different roads. Press play.
Conceptual simulation: the grey trajectories mimic a diffusion sampler's meandering probability-flow paths; the gold ones are exactly the straight interpolations flow matching trains on. Both particle clouds reach the identical target points.
Same budget, different bill — quality per sampling step
Samplers integrate a velocity field with Euler steps: “move in the current direction for 1/N of the trip, re-check, repeat.” On a curved road, few big steps means you overshoot every bend. On a straight road, the direction never changes — so one step is already exact. Drag the step budget down and watch who survives.
Green dot = landed within 0.10 of its true target, red = missed. The straight side assumes perfectly straight learned paths — EP 04 shows when that assumption breaks.
The straightness meter — measure the detour
Pick one particle and put it under the microscope. Straightness = displacement ÷ distance actually walked (1.00 is a perfect straight line). Scrub time and watch the curved path's velocity arrow point away from the destination — every degree of that angle is error a coarse sampler will pay for.
The arrow is the instantaneous velocity on the curved road; the faint gold arrow points straight at the destination. Green arrow = aligned (harmless), red = misaligned (a big Euler step here lands off-road).
The crossing problem — straight lines that collide learn to average
Here is the catch. Training pairs noise with data at random, so the straight training lines cross each other. The network can only learn ONE velocity per location — at a crossing it learns the average of the lines passing through. Generate with 1 step and every sample gets shoved into the compromise zone between the two data modes. Try it.
The field you are sampling is the kernel-averaged velocity of all training lines — exactly what a regression-trained network converges to. Give it more steps and the ODE can still bend around the ambiguity; give it 1 and it can't.
Reflow — untangle the pairs, then one step is enough
The fix is beautifully simple. Reflow: run the current model, see which data point each noise point actually flows to, and re-pair them that way — then retrain on the new couplings. Re-paired lines no longer cross, so the average velocity stops being a compromise. Compare both pairings at the same 1-step budget.
Run both buttons at 1 step and compare the hit rates above — same network capacity, same step budget, only the pairing changed.