<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>NeurIPS | Hao Yan</title><link>https://hyan46.github.io/tag/neurips/</link><atom:link href="https://hyan46.github.io/tag/neurips/index.xml" rel="self" type="application/rss+xml"/><description>NeurIPS</description><generator>Wowchemy (https://wowchemy.com)</generator><language>en-US</language><copyright>© 2026 Hao Yan</copyright><lastBuildDate>Tue, 01 Sep 2026 00:00:00 +0000</lastBuildDate><image><url>https://hyan46.github.io/media/icon_hudffdcafa99c609c7e4dfde01dba38f93_35970_512x512_fill_lanczos_center_3.png</url><title>NeurIPS</title><link>https://hyan46.github.io/tag/neurips/</link></image><item><title>Flow Mismatching: Unsupervised Anomaly Detection via Velocity Discrepancies in Flow Matching Models</title><link>https://hyan46.github.io/yan-flow-mismatching-neurips-2026/</link><pubDate>Tue, 01 Sep 2026 00:00:00 +0000</pubDate><guid>https://hyan46.github.io/yan-flow-mismatching-neurips-2026/</guid><description>
&lt;figure id="figure-figure-1-velocity-mismatch-in-the-xt-plane-light-arrows-show-the-learned-flow-v_θxt-from-noise-to-normal-data-affine-paths-from-the-same-starting-noise-x_0-target-either-a-normal-sample-green-or-an-anomalous-sample-red-at-selected-times-the-predicted-velocity-blue-aligns-with-the-geometric-velocity-toward-normal-targets-but-disagrees-for-anomalous-targets--that-disagreement-is-the-anomaly-signal-flow-mismatching-detects">
&lt;div class="d-flex justify-content-center">
&lt;div class="w-100" style="width: 100%; ">&lt;img alt="Velocity mismatch in the (x,t) plane: affine paths toward a normal target stay aligned with the learned flow, while paths toward an anomalous target visibly diverge from it." srcset="
/yan-flow-mismatching-neurips-2026/figures/teaser_huadfd432ad1c1a5ea51f81768112daec8_130372_0ed2a06a2e9b3fa576fe0ec57d18d201.webp 400w,
/yan-flow-mismatching-neurips-2026/figures/teaser_huadfd432ad1c1a5ea51f81768112daec8_130372_eca01febffa96b5a4ba5fb967115fcd3.webp 760w,
/yan-flow-mismatching-neurips-2026/figures/teaser_huadfd432ad1c1a5ea51f81768112daec8_130372_1200x1200_fit_q75_h2_lanczos_3.webp 1200w"
src="https://hyan46.github.io/yan-flow-mismatching-neurips-2026/figures/teaser_huadfd432ad1c1a5ea51f81768112daec8_130372_0ed2a06a2e9b3fa576fe0ec57d18d201.webp"
loading="lazy"
style="width: 90%; height: auto; display: block;" />&lt;/div>
&lt;/div>&lt;figcaption>
&lt;span class="figure-number">Figure 1: &lt;/span>&lt;strong>Velocity mismatch in the $(x,t)$ plane.&lt;/strong> Light arrows show the learned flow $v_θ(x,t)$ from noise to normal data. Affine paths from the same starting noise $x_0$ target either a normal sample (green) or an anomalous sample (red). At selected times, the predicted velocity (blue) aligns with the geometric velocity toward normal targets but disagrees for anomalous targets — that disagreement is the anomaly signal Flow Mismatching detects.
&lt;/figcaption>&lt;/figure>
&lt;h2 id="overview">Overview&lt;/h2>
&lt;p>&lt;strong>Flow Mismatching&lt;/strong> is an &lt;strong>unsupervised anomaly detection&lt;/strong> method that does not rely on reconstruction. A &lt;strong>flow matching&lt;/strong> model is trained only on normal images. For a test image, we compare the model&amp;rsquo;s learned velocity field with the direct geometric velocity toward that image along paths from noise. Where the two disagree, the image is anomalous; aggregating these &lt;strong>velocity mismatches&lt;/strong> across time steps and paths gives pixel-wise anomaly heatmaps and image-level scores.&lt;/p>
&lt;p>We also provide a theoretical decomposition of the mismatch, and report results on MVTec-AD and VisA that outperform reconstruction-based and other flow matching-based methods.&lt;/p>
&lt;p>Accepted to &lt;strong>NeurIPS 2026&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="toy-examples">Toy-Example Demonstrations&lt;/h2>
&lt;p>A live interactive demo illustrates the velocity-mismatch
mechanism on 2D toy data — a flow-matching model trained only on normal data,
run toward a real data point and an off-manifold point from the same starting
noise draws. Solid arrows show the model&amp;rsquo;s predicted velocity; dashed lines
show the true heading. On the normal target they track each other; on the
off-manifold target they visibly diverge, and that growing disagreement is
the anomaly signal.&lt;/p>
&lt;p>&lt;strong>Try it yourself&lt;/strong> — drag the time slider (or press play). The demo shows the
paper&amp;rsquo;s actual toy setup (Appendix B.1): an upper semicircle manifold, scored on
the paper&amp;rsquo;s own grid and aggregation rule, with a near-manifold anomaly placed
closer to the boundary than a simple off-manifold gap — a harder, more subtle
detection case.&lt;/p>
&lt;div style="max-width:980px;margin:1.25rem auto;border-radius:10px;overflow:hidden;box-shadow:0 1px 6px rgba(0,0,0,0.12);">
&lt;iframe
id="fm-toy-frame"
src="https://hyan46.github.io/demo/flow-mismatching/index.html"
title="Flow Mismatching interactive demo"
style="width:100%;height:900px;border:none;display:block;"
scrolling="no"
loading="lazy">
&lt;/iframe>
&lt;/div>
&lt;h3 id="bias-variance">Bias-variance trade-off across ODE time&lt;/h3>
&lt;p>Flow Mismatching aggregates the velocity mismatch across many ODE times $t$
rather than reading it off a single $t$, because the mismatch signal itself
trades bias for variance as $t$ varies. The figure below reproduces the
paper&amp;rsquo;s own semicircle toy analysis (Appendix B.1): at small $t$,
interpolated states are dominated by source noise, so the low-mismatch
region is a broad blob covering the manifold&amp;rsquo;s interior — biased and poorly
localized. At large $t$, the low-mismatch region localizes tightly to the
manifold but becomes visibly speckled — high variance, since late-time states
are far more sensitive to the specific noise draw. The paper&amp;rsquo;s
$w(t) = t^2$-weighted combination over time balances the two regimes,
yielding a score map that is both sharp and smooth.&lt;/p>
&lt;p>&lt;strong>Drag the slider&lt;/strong> to compare, side by side, the per-$t$ landscape (left) against the
running $w(t)=t^2$-weighted combination up to that point (right):&lt;/p>
&lt;div style="max-width:900px;margin:1.25rem auto;border-radius:10px;overflow:hidden;box-shadow:0 1px 6px rgba(0,0,0,0.12);">
&lt;iframe
id="fm-bv-frame"
src="https://hyan46.github.io/demo/bias-variance/index.html"
title="Bias-variance trade-off across ODE time, interactive demo"
style="width:100%;height:990px;border:none;display:block;"
scrolling="no"
loading="lazy">
&lt;/iframe>
&lt;/div>
&lt;h3 id="mvtec-example">Flow mismatching on a real image&lt;/h3>
&lt;p>The toy examples above use synthetic 2D data so the mechanism is easy to see;
the same method applies directly to real images. Below is the velocity-mismatch
heatmap computed on a real MVTec-AD test image — pick a category with the
selector above the demo (more categories are added as they become available) —
using the trained flow-mismatching model, no synthetic data, same per-$t$
computation and $w(t)=t^2$ time-weighting as the toy demos. The green outline
marks the ground-truth defect region.&lt;/p>
&lt;div style="max-width:980px;margin:1.25rem auto;border-radius:10px;overflow:hidden;box-shadow:0 1px 6px rgba(0,0,0,0.12);">
&lt;iframe
id="fm-mvtec-frame"
src="https://hyan46.github.io/demo/mvtec/index.html"
title="Flow Mismatching on a real MVTec-AD image, interactive demo"
style="width:100%;height:1500px;border:none;display:block;"
scrolling="no"
loading="lazy">
&lt;/iframe>
&lt;/div>
&lt;script>
(function(){
// the three demo iframes above each postMessage their real content height on load/
// resize (see each widget's own reportHeight script) -- a fixed CSS aspect-ratio
// can't track content height here since several layout elements have fixed px
// height while only some panels scale with width, so required height isn't linear
// in width. This sets each iframe's height to exactly what its content needs, so
// there is never an internal scrollbar.
// debounced: the very first message from a widget can report an inflated
// transient height (DOM not fully populated by its data-fetch yet) that
// self-corrects within ~200ms -- waiting for a short quiet period before
// applying avoids ever visibly flashing that transient size.
var pending = {};
window.addEventListener('message', function(ev){
if (!ev.data || ev.data.type !== 'fm-widget-resize') return;
var ids = ['fm-toy-frame', 'fm-bv-frame', 'fm-mvtec-frame'];
for (var i = 0; i &lt; ids.length; i++){
var id = ids[i];
var el = document.getElementById(id);
if (el &amp;&amp; el.contentWindow === ev.source){
var h = Math.ceil(ev.data.height);
if (pending[id]) clearTimeout(pending[id]);
pending[id] = setTimeout(function(elRef, hRef){
return function(){ elRef.style.height = hRef + 'px'; };
}(el, h), 150);
break;
}
}
});
})();
&lt;/script>
&lt;hr>
&lt;h2 id="resources">Resources&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Paper:&lt;/strong> &lt;a href="https://arxiv.org/abs/2605.23070" target="_blank" rel="noopener">arXiv:2605.23070&lt;/a>&lt;/li>
&lt;li>&lt;strong>Venue:&lt;/strong> NeurIPS 2026&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="bibtex">BibTeX&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-bibtex" data-lang="bibtex">&lt;span class="line">&lt;span class="cl">&lt;span class="nc">@inproceedings&lt;/span>&lt;span class="p">{&lt;/span>&lt;span class="nl">chen2026flowmismatching&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">title&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">{Flow Mismatching: Unsupervised Anomaly Detection via Velocity Discrepancies in Flow Matching Models}&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">author&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">{Chen, Shengzhe and Moradi, Mehrdad and Paynabar, Kamran and Yan, Hao}&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">booktitle&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">{Advances in Neural Information Processing Systems (NeurIPS)}&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">year&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">{2026}&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="na">note&lt;/span> &lt;span class="p">=&lt;/span> &lt;span class="s">{arXiv:2605.23070}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div></description></item></channel></rss>