Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <title>Improving Text-to-Music Generation with Human Preference Rewards</title> | |
| <meta name="description" content="Our entry to the ICME 2026 ATTM Grand Challenge (Efficiency Track): a 120M FluxAudio-S backbone conditioned on the TuneJury human-preference reward, refined with expert iteration and a short CRPO pass."> | |
| <style> | |
| :root{ | |
| --ink:#0d0d12; --paper:#fafafa; --muted:#6b6b76; --accent:#c41230; | |
| --card:#ffffff; --line:#e7e7ec; --dark-ink:#f2f2f5; --dark-muted:#9a9aa6; | |
| } | |
| *{margin:0;padding:0;box-sizing:border-box} | |
| html{scroll-behavior:smooth} | |
| body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif; | |
| color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;line-height:1.5} | |
| header{position:fixed;top:0;left:0;right:0;z-index:50;display:flex;align-items:center; | |
| justify-content:space-between;padding:.65rem clamp(1rem,4vw,2.5rem); | |
| background:rgba(250,250,250,.82);backdrop-filter:saturate(180%) blur(14px);border-bottom:1px solid var(--line)} | |
| .brand{display:flex;align-items:center;gap:.55rem;font-weight:700;letter-spacing:-.01em;font-size:1.02rem} | |
| .brand .dot{width:20px;height:20px;border-radius:6px;background:linear-gradient(135deg,var(--accent),#e07385)} | |
| nav{display:flex;gap:.5rem;flex-wrap:wrap} | |
| .navbtn{font-size:.84rem;font-weight:600;text-decoration:none;color:var(--ink); | |
| padding:.42rem .85rem;border-radius:999px;border:1px solid var(--line);background:var(--card); | |
| transition:transform .15s ease, box-shadow .15s ease} | |
| .navbtn:hover{transform:translateY(-1px);box-shadow:0 4px 14px rgba(0,0,0,.08)} | |
| .navbtn.primary{background:var(--ink);color:var(--paper);border-color:var(--ink)} | |
| section{padding:clamp(4rem,10vh,7rem) clamp(1.25rem,6vw,3rem)} | |
| .wrap{max-width:1060px;margin:0 auto} | |
| .kicker{font-size:.82rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)} | |
| h1{font-size:clamp(2rem,5vw,3.4rem);font-weight:800;letter-spacing:-.035em;line-height:1.06} | |
| h2{font-size:clamp(1.8rem,5vw,2.9rem);font-weight:800;letter-spacing:-.03em;line-height:1.12;margin:.6rem 0 1rem} | |
| .lede{font-size:clamp(1.05rem,2.4vw,1.28rem);color:var(--muted);text-wrap:balance} | |
| .reveal{opacity:0;transform:translateY(26px);transition:opacity .8s cubic-bezier(.2,.6,.2,1),transform .8s cubic-bezier(.2,.6,.2,1)} | |
| .reveal.in{opacity:1;transform:none} | |
| .d1{transition-delay:.08s}.d2{transition-delay:.16s}.d3{transition-delay:.24s} | |
| .hero{min-height:90vh;display:flex;align-items:center;text-align:center; | |
| background:radial-gradient(1200px 520px at 50% -8%, #fbe9ec 0%, var(--paper) 58%)} | |
| .hero .wrap{display:flex;flex-direction:column;align-items:center;gap:1rem} | |
| .hero .lede{max-width:54ch;margin:0 auto} | |
| .authors{font-size:clamp(1rem,2.2vw,1.18rem);font-weight:650;color:var(--ink);margin-top:.2rem;line-height:1.5} | |
| .authors sup{font-weight:700;color:var(--accent)} | |
| .authors a{color:inherit;text-decoration:none;border-bottom:1.5px solid var(--line);transition:color .15s,border-color .15s} | |
| .authors a:hover{color:var(--accent);border-color:var(--accent)} | |
| .affils{font-size:.85rem;color:var(--muted);margin-top:.15rem} | |
| .affils sup{color:var(--accent);font-weight:700} | |
| .venue{font-size:.95rem;color:var(--muted)} | |
| .cta-row{display:flex;flex-wrap:wrap;gap:.6rem;justify-content:center;margin-top:.8rem} | |
| .cta{font-size:.95rem;font-weight:650;text-decoration:none;padding:.7rem 1.25rem;border-radius:999px; | |
| transition:transform .15s ease, box-shadow .15s ease} | |
| .cta:hover{transform:translateY(-2px);box-shadow:0 8px 22px rgba(0,0,0,.12)} | |
| .cta.fill{background:var(--ink);color:var(--paper)} | |
| .cta.line{border:1.5px solid var(--ink);color:var(--ink)} | |
| .pipe{display:flex;align-items:center;justify-content:center;gap:.6rem;flex-wrap:wrap;margin-top:2.2rem} | |
| .node{padding:.7rem 1.05rem;border-radius:13px;font-weight:650;font-size:.92rem;background:var(--card); | |
| border:1.5px solid var(--line);box-shadow:0 3px 14px rgba(0,0,0,.05)} | |
| .node.frozen{background:#f0f2f7;border-color:#d8dce8;color:#3c3f4a} | |
| .node.head{background:var(--accent);border-color:var(--accent);color:#fff} | |
| .arrow{color:#b9bcc9;font-size:1.1rem} | |
| .cards{display:grid;grid-template-columns:repeat(3,1fr);gap:1.1rem;margin-top:2.2rem} | |
| .card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:1.4rem 1.3rem; | |
| box-shadow:0 4px 22px rgba(0,0,0,.05)} | |
| .card .tag{font-size:.74rem;font-weight:700;letter-spacing:.08em;color:var(--accent);text-transform:uppercase} | |
| .card h3{font-size:1.12rem;font-weight:750;letter-spacing:-.015em;margin:.4rem 0 .45rem} | |
| .card p{font-size:.9rem;color:var(--muted)} | |
| .card .eff{font-size:.82rem;color:#3c3f4a;margin-top:.55rem;font-variant-numeric:tabular-nums} | |
| .card .dgm{width:100%;height:64px;display:block;margin-top:1.1rem} | |
| .fig{margin-top:2.4rem;background:var(--card);border:1px solid var(--line);border-radius:18px;padding:1.5rem 1.4rem 1.2rem;box-shadow:0 4px 22px rgba(0,0,0,.05)} | |
| .fig svg{width:100%;height:auto;display:block;font-family:inherit} | |
| .fig .cap{font-size:.85rem;color:var(--muted);margin-top:1rem;line-height:1.55} | |
| .fig .cap b{color:var(--ink)} | |
| .multi{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-top:1.5rem} | |
| @media(max-width:680px){.multi{grid-template-columns:1fr}} | |
| .multi svg{width:100%;height:auto;display:block;font-family:inherit;background:#fcfcfd;border:1px solid var(--line);border-radius:12px} | |
| .xleg{font-size:.8rem;color:var(--muted);text-align:center;margin-top:.9rem} | |
| .xleg b{color:var(--ink);font-weight:650} | |
| .ladder{margin-top:1.8rem;border-top:1px solid var(--line);padding-top:1.4rem} | |
| .lad-h{font-size:1.02rem;font-weight:750;letter-spacing:-.01em;margin-bottom:.5rem} | |
| .lad-prompt{font-size:.86rem;font-style:italic;color:var(--muted);line-height:1.5;border-left:2.5px solid var(--accent);padding-left:.8rem;margin-bottom:.95rem} | |
| .lad-row{display:grid;grid-template-columns:repeat(5,1fr);gap:.7rem} | |
| @media(max-width:760px){.lad-row{grid-template-columns:1fr 1fr}} | |
| .lad{background:#fcfcfd;border:1px solid var(--line);border-radius:12px;padding:.7rem} | |
| .lad-top{display:flex;justify-content:space-between;align-items:baseline;gap:.4rem;margin-bottom:.45rem} | |
| .lad .lab{font-size:.78rem;font-weight:700;color:var(--accent)} | |
| .lad .rwd{font-size:.74rem;font-weight:800;font-variant-numeric:tabular-nums} | |
| .lad .rwd.pos{color:var(--accent)}.lad .rwd.neg{color:#9a9aa6} | |
| .lad audio{width:100%;height:34px;display:block} | |
| .darksec{background:var(--ink);color:var(--dark-ink)} | |
| .darksec .kicker{color:#ef9aa8}.darksec .lede{color:var(--dark-muted)} | |
| table.res{width:100%;border-collapse:collapse;margin-top:1.8rem;font-variant-numeric:tabular-nums} | |
| table.res th,table.res td{padding:.7rem .8rem;text-align:center;border-bottom:1px solid rgba(255,255,255,.12)} | |
| table.res th:first-child,table.res td:first-child{text-align:left} | |
| table.res th{font-size:.8rem;letter-spacing:.04em;text-transform:uppercase;color:#ef9aa8} | |
| table.res td b{color:#fff} | |
| table.res tr.base td{color:var(--dark-muted)} | |
| .resnote{margin-top:1rem;font-size:.85rem;color:var(--dark-muted)} | |
| footer{padding:3rem clamp(1.25rem,6vw,3rem);border-top:1px solid var(--line);text-align:center} | |
| .credits{font-size:.9rem;color:var(--muted);max-width:74ch;margin:.6rem auto 0;text-wrap:balance} | |
| .footgrid{display:flex;gap:.6rem;justify-content:center;flex-wrap:wrap;margin-top:.4rem} | |
| .refs{max-width:960px;margin:2rem auto 0;text-align:left;font-size:.8rem;color:var(--muted);line-height:1.65} | |
| .refs h4{font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink);margin-bottom:.55rem;text-align:center} | |
| .refs ol{padding-left:1.25rem;margin:0} | |
| .refs li{margin-bottom:.3rem} | |
| .refs a{color:var(--accent);text-decoration:none}.refs a:hover{text-decoration:underline} | |
| sup.cite{font-size:.6em;font-weight:700;line-height:0} | |
| sup.cite a{color:var(--accent);text-decoration:none;padding:0 .04em} | |
| .darksec sup.cite a{color:#ef9aa8} | |
| @media(max-width:760px){.cards{grid-template-columns:1fr}} | |
| .cases2{display:grid;gap:1.1rem;margin-top:2.2rem} | |
| .lcase{background:var(--card);border:1px solid var(--line);border-radius:16px;padding:1.2rem 1.3rem;box-shadow:0 4px 22px rgba(0,0,0,.05)} | |
| .lcase .pr{font-size:.95rem;color:var(--ink);margin-bottom:.95rem;line-height:1.5} | |
| .dchip{display:inline-block;font-size:.72rem;font-weight:700;background:var(--accent);color:#fff;padding:.16rem .55rem;border-radius:999px;margin-right:.55rem;vertical-align:middle;font-variant-numeric:tabular-nums} | |
| .ab{display:grid;grid-template-columns:1fr 1fr 1fr;gap:1rem} | |
| @media(max-width:640px){.ab{grid-template-columns:1fr}} | |
| .leg{display:flex;align-items:center;justify-content:space-between;margin-bottom:.45rem} | |
| .leg .nm{font-size:.82rem;font-weight:700;letter-spacing:.02em} | |
| .leg .nm.base{color:var(--muted)}.leg .nm.ours{color:var(--accent)} | |
| .badge{font-size:.74rem;font-weight:700;padding:.2rem .55rem;border-radius:999px;font-variant-numeric:tabular-nums} | |
| .badge.b{background:#f0f0f3;color:#6b6b76}.badge.s{background:#fbe9ec;color:var(--accent)} | |
| .lcase audio{width:100%;height:36px;display:block} | |
| </style> | |
| </head> | |
| <body> | |
| <header> | |
| <div class="brand"><span class="dot"></span>TTM-HumanPref</div> | |
| <nav> | |
| <a class="navbtn primary" href="https://yonghyunk1m.github.io/TTM-HumanPref/" target="_blank" rel="noopener">Listen</a> | |
| <a class="navbtn" href="https://arxiv.org/abs/2606.21670" target="_blank" rel="noopener">Paper</a> | |
| <a class="navbtn" href="https://github.com/yonghyunk1m/TTM-HumanPref" target="_blank" rel="noopener">Code</a> | |
| </nav> | |
| </header> | |
| <section class="hero"> | |
| <div class="wrap"> | |
| <p class="kicker reveal">ICME 2026 ATTM Grand Challenge · Efficiency Track<sup class="cite"><a href="#ref1">1</a></sup></p> | |
| <h1 class="reveal d1">Improving Text-to-Music Generation<br>with Human Preference Rewards</h1> | |
| <p class="authors reveal d2"><a href="https://yonghyunk1m.notion.site/" target="_blank" rel="noopener">Yonghyun Kim</a><sup>♭</sup>, <a href="https://jnwnlee.github.io/" target="_blank" rel="noopener">Junwon Lee</a><sup>♮</sup>, <a href="https://haiwen-xia.github.io/" target="_blank" rel="noopener">Haiwen Xia</a><sup>♯</sup>, <a href="https://nicolaus625.github.io/" target="_blank" rel="noopener">Yinghao Ma</a><sup>♭♭</sup>, <a href="https://chrisdonahue.com/" target="_blank" rel="noopener">Chris Donahue</a><sup>♮♮</sup></p> | |
| <p class="affils reveal d2"><sup>♭</sup>Georgia Tech · <sup>♮</sup>KAIST · <sup>♯</sup>Peking University · <sup>♭♭</sup>Queen Mary University of London · <sup>♮♮</sup>Carnegie Mellon University</p> | |
| <p class="lede reveal d2">A 120M parameter FluxAudio-S backbone<sup class="cite"><a href="#ref2">2</a></sup>, conditioned on a learned human-preference reward (<a href="https://huggingface.co/spaces/TuneJury/landing" target="_blank" rel="noopener" style="color:var(--accent);font-weight:700;text-decoration:none">TuneJury</a><sup class="cite"><a href="#ref3">3</a></sup>) and refined through expert iteration and a short CRPO pass. The whole pipeline fits in ~40 GPU-hours on one RTX A5000 and produces 10 s clips in under a second.</p> | |
| <div class="cta-row reveal d3"> | |
| <a class="cta fill" href="https://yonghyunk1m.github.io/TTM-HumanPref/" target="_blank" rel="noopener">🎧 Listen to samples</a> | |
| <a class="cta line" href="https://arxiv.org/abs/2606.21670" target="_blank" rel="noopener">📄 Paper (arXiv:2606.21670)</a> | |
| <a class="cta line" href="https://github.com/yonghyunk1m/TTM-HumanPref" target="_blank" rel="noopener">Code</a> | |
| </div> | |
| <div class="pipe reveal d3"> | |
| <span class="node frozen">FluxAudio-S (120M)</span><span class="arrow">→</span> | |
| <span class="node head">TuneJury reward</span><span class="arrow">→</span> | |
| <span class="node frozen">Expert iteration</span><span class="arrow">→</span> | |
| <span class="node frozen">CRPO</span><span class="arrow">→</span> | |
| <span class="node">Post-proc</span> | |
| </div> | |
| </div> | |
| </section> | |
| <section> | |
| <div class="wrap"> | |
| <p class="kicker reveal">What we built</p> | |
| <h2 class="reveal d1">Five engineering decisions</h2> | |
| <p class="lede reveal d2">Four at training time and one at inference, each measured by <span style="white-space:nowrap">per-stage</span> decomposition on 100 Song Describer Dataset prompts.</p> | |
| <div class="cards"> | |
| <div class="card reveal d1"><span class="tag">Training · 1</span><h3>Score-conditioned SFT</h3><p>Train the backbone with the TuneJury reward as a conditioning signal that doubles as an inference-time CFG axis<sup class="cite"><a href="#ref4">4</a></sup>. (One of five score-conditioning heads, swept here, won.)</p><div class="eff">FAD-CLAP improves by 0.025–0.040 at the SFT stage.</div><svg class="dgm" viewBox="0 0 170 64" aria-hidden="true"><defs><marker id="m1" viewBox="0 0 8 8" refX="6" refY="4" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0L8,4L0,8z" fill="var(--accent)" opacity=".6"/></marker></defs><rect x="4" y="24" width="44" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="26.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">reward s</text><path d="M48,32 L72,32" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m1)"/><rect x="74" y="24" width="48" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="98.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">backbone</text><path d="M122,32 L140,32" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m1)"/><polyline points="144,32 148,25 152,39 156,27 160,37 164,32" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".6"/></svg></div> | |
| <div class="card reveal d2"><span class="tag">Training · 2</span><h3>Expert iteration</h3><p>Fine-tune on the top decile by combined reward + CLAP-text score.<sup class="cite"><a href="#ref5">5</a>,<a href="#ref6">6</a></sup></p><div class="eff"><b>Dominant contributor:</b> FAD-CLAP −0.0362, paired-t significant.</div><svg class="dgm" viewBox="0 0 170 64" aria-hidden="true"><defs><marker id="m2" viewBox="0 0 8 8" refX="6" refY="4" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0L8,4L0,8z" fill="var(--accent)" opacity=".6"/></marker></defs><rect x="4" y="24" width="54" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="31.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">generate</text><rect x="112" y="4" width="54" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="139.0" y="15.5" font-size="9" fill="#3c3f4a" text-anchor="middle">keep top</text><rect x="112" y="44" width="54" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="139.0" y="55.5" font-size="9" fill="#3c3f4a" text-anchor="middle">retrain</text><path d="M60,27 C80,22 90,17 108,13" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m2)"/><path d="M139,22 L139,41" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m2)"/><path d="M108,51 C88,56 78,47 62,40" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m2)"/></svg></div> | |
| <div class="card reveal d3"><span class="tag">Training · 3</span><h3>Cross-load v2</h3><p>Load the v1-trained (GlobalAdaLN) weights into the v2 (InputAdd) forward to host the CRPO step. A bridge, not a booster.</p><div class="eff">Direction matters: v1→v2 stays within 0.02 FAD-CLAP; v2→v1 collapses.</div><svg class="dgm" viewBox="0 0 170 64" aria-hidden="true"><defs><marker id="m3" viewBox="0 0 8 8" refX="6" refY="4" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0L8,4L0,8z" fill="var(--accent)" opacity=".6"/></marker></defs><rect x="4" y="24" width="56" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="32.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">v1 head</text><path d="M60,32 L110,32" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m3)"/><text x="85" y="26" font-size="8" fill="#9a9aa6" text-anchor="middle">weights</text><rect x="110" y="24" width="56" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="138.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">v2 forward</text></svg></div> | |
| <div class="card reveal d1"><span class="tag">Training · 4</span><h3>CRPO<sup class="cite"><a href="#ref7">7</a></sup></h3><p>A short DPO-style<sup class="cite"><a href="#ref8">8</a></sup> preference-tuning pass for audio-caption alignment.</p><div class="eff">Within paired-t noise at this scale; kept because it is inexpensive.</div><svg class="dgm" viewBox="0 0 170 64" aria-hidden="true"><defs><marker id="m4" viewBox="0 0 8 8" refX="6" refY="4" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0L8,4L0,8z" fill="var(--accent)" opacity=".6"/></marker></defs><rect x="6" y="6" width="40" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="26.0" y="17.5" font-size="9" fill="#3c3f4a" text-anchor="middle">A ✓</text><rect x="6" y="42" width="40" height="16" rx="8" fill="var(--accent)" fill-opacity=".03" stroke="var(--accent)" stroke-opacity=".25"/><text x="26" y="53.5" font-size="9" fill="#9a9aa6" text-anchor="middle">B</text><path d="M46,14 C72,18 82,26 104,30" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m4)"/><path d="M46,50 C72,46 82,38 104,34" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m4)"/><rect x="106" y="24" width="58" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="135.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">update</text></svg></div> | |
| <div class="card reveal d2"><span class="tag">Inference · 5</span><h3>Post-processing</h3><p>Joint CFG on text and reward, 3×Demucs<sup class="cite"><a href="#ref9">9</a></sup> source separation, LUFS normalization to −16.5.</p><div class="eff">The score scalar is already saturated by this point in the chain.</div><svg class="dgm" viewBox="0 0 170 64" aria-hidden="true"><defs><marker id="m5" viewBox="0 0 8 8" refX="6" refY="4" markerWidth="5" markerHeight="5" orient="auto-start-reverse"><path d="M0,0L8,4L0,8z" fill="var(--accent)" opacity=".6"/></marker></defs><rect x="2" y="24" width="34" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="19.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">raw</text><path d="M36,32 L46,32" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m5)"/><rect x="46" y="24" width="64" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="78.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">3×Demucs</text><path d="M110,32 L120,32" fill="none" stroke="var(--accent)" stroke-width="1.4" stroke-opacity=".5" marker-end="url(#m5)"/><rect x="120" y="24" width="48" height="16" rx="8" fill="var(--accent)" fill-opacity=".07" stroke="var(--accent)" stroke-opacity=".35"/><text x="144.0" y="35.5" font-size="9" fill="#3c3f4a" text-anchor="middle">LUFS</text></svg></div> | |
| <div class="card reveal d3"><span class="tag">Finding</span><h3>What actually moves the needle</h3><p>Expert iteration is the dominant contributor. The inference-time score knob ends up saturated, and the CRPO pass adds only noise-level gain.</p></div> | |
| </div> | |
| <div class="fig reveal d2"> | |
| <div class="multi"> | |
| <svg viewBox="0 0 250 150" role="img" aria-label="TuneJury reward across pipeline stages"> | |
| <text x="125" y="14" text-anchor="middle" font-size="12" font-weight="700" fill="#0d0d12">TuneJury reward ↑</text> | |
| <line x1="30" y1="88.3" x2="238" y2="88.3" stroke="#cfcfd6" stroke-width="1" stroke-dasharray="3 3"/> | |
| <text x="236" y="85" text-anchor="end" font-size="9" fill="#b8b8c0">0</text> | |
| <polyline points="30,126.4 82,85.6 134,37.4 186,36.3 238,36.5" fill="none" stroke="#c41230" stroke-width="2.4" stroke-linejoin="round" stroke-linecap="round"/> | |
| <g fill="#c41230"><circle cx="30" cy="126.4" r="4"/><circle cx="82" cy="85.6" r="4"/><circle cx="134" cy="37.4" r="4"/><circle cx="186" cy="36.3" r="4"/><circle cx="238" cy="36.5" r="4"/></g> | |
| <g font-size="11" font-weight="700" fill="#0d0d12"><text x="30" y="142" text-anchor="start">−0.39</text><text x="238" y="28" text-anchor="end">+0.53</text></g> | |
| </svg> | |
| <svg viewBox="0 0 250 150" role="img" aria-label="FAD-CLAP across pipeline stages"> | |
| <text x="125" y="14" text-anchor="middle" font-size="12" font-weight="700" fill="#0d0d12">FAD-CLAP ↓</text> | |
| <polyline points="30,39.4 82,100.4 134,117.2 186,119.4 238,121.0" fill="none" stroke="#c41230" stroke-width="2.4" stroke-linejoin="round" stroke-linecap="round"/> | |
| <g fill="#c41230"><circle cx="30" cy="39.4" r="4"/><circle cx="82" cy="100.4" r="4"/><circle cx="134" cy="117.2" r="4"/><circle cx="186" cy="119.4" r="4"/><circle cx="238" cy="121.0" r="4"/></g> | |
| <g font-size="11" font-weight="700" fill="#0d0d12"><text x="30" y="31" text-anchor="start">0.60</text><text x="238" y="137" text-anchor="end">0.42</text></g> | |
| </svg> | |
| <svg viewBox="0 0 250 150" role="img" aria-label="CLAP score across pipeline stages"> | |
| <text x="125" y="14" text-anchor="middle" font-size="12" font-weight="700" fill="#0d0d12">CLAP score ↑</text> | |
| <polyline points="30,119.25 82,78.45 134,42.75 186,51.7 238,49.1" fill="none" stroke="#c41230" stroke-width="2.4" stroke-linejoin="round" stroke-linecap="round"/> | |
| <g fill="#c41230"><circle cx="30" cy="119.25" r="4"/><circle cx="82" cy="78.45" r="4"/><circle cx="134" cy="42.75" r="4"/><circle cx="186" cy="51.7" r="4"/><circle cx="238" cy="49.1" r="4"/></g> | |
| <g font-size="11" font-weight="700" fill="#0d0d12"><text x="30" y="135" text-anchor="start">0.230</text><text x="134" y="34" text-anchor="middle">0.290</text><text x="238" y="41" text-anchor="end">0.285</text></g> | |
| </svg> | |
| </div> | |
| <p class="xleg">Left → right in every panel: <b>Baseline</b> → <b>Score-cond. SFT</b> → <b>Expert iteration</b> → <b>Cross-load v2</b> → <b>CRPO</b><br>(the four training decisions 1–4 above, in pipeline order; post-processing is the 5th, applied to every clip)</p> | |
| <p class="cap">Each engineering decision moves all three challenge metrics the right way: <b>TuneJury reward</b> and <b>CLAP score</b> rise, <b>FAD-CLAP</b> falls (lower is better)<sup class="cite"><a href="#ref10">10</a></sup>. The two training lifts, score-conditioned SFT and expert iteration, do almost all the work. Cross-load and CRPO sit within paired-<i>t</i> noise. Values are cumulative on the 100-prompt SDD slice (Row 0→4 of the paper's decomposition table).</p> | |
| <div class="ladder"> | |
| <p class="lad-h">Hear one prompt, watch its reward climb</p> | |
| <p class="lad-prompt">"A vibrant dance track driven by energetic drums, enhanced with a pulsing synth bass and bright acoustic guitar, captures the lively, sun-soaked spirit of summer with a rhythmic, foot-tapping groove that pulses through the room."</p> | |
| <div class="lad-row"> | |
| <div class="lad"><div class="lad-top"><span class="lab">Baseline</span><span class="rwd neg">−1.10</span></div><audio controls preload="none" src="audio/stages/baseline.wav"></audio></div> | |
| <div class="lad"><div class="lad-top"><span class="lab">Score-cond. SFT</span><span class="rwd neg">−0.47</span></div><audio controls preload="none" src="audio/stages/sft.wav"></audio></div> | |
| <div class="lad"><div class="lad-top"><span class="lab">Expert iteration</span><span class="rwd pos">+0.47</span></div><audio controls preload="none" src="audio/stages/expert.wav"></audio></div> | |
| <div class="lad"><div class="lad-top"><span class="lab">Cross-load v2</span><span class="rwd pos">+0.71</span></div><audio controls preload="none" src="audio/stages/crossload.wav"></audio></div> | |
| <div class="lad"><div class="lad-top"><span class="lab">CRPO</span><span class="rwd pos">+0.84</span></div><audio controls preload="none" src="audio/stages/crpo.wav"></audio></div> | |
| </div> | |
| <p class="cap">Each badge is the TuneJury reward (the challenge MusicRankNet) this exact clip scores. It climbs from <b>−1.10 to +0.84</b> across the pipeline. Same prompt and seed (42) at every stage, identical inference (s=5.0, cfg=4.0, 25 steps, prefix, 3×mdx_extra, −16.5 LUFS), only the checkpoint changes. These are single clips, not the 100-prompt averages above, and reward is a learned preference signal that need not match what every listener hears.</p> | |
| </div> | |
| </div> | |
| </div> | |
| </section> | |
| <section> | |
| <div class="wrap"> | |
| <p class="kicker reveal">Listen</p> | |
| <h2 class="reveal d1">Hear the difference</h2> | |
| <p class="lede reveal d2">Three example prompts: challenge baseline vs our two submissions. Both use the same checkpoint and prompt, differing only in the inference seed that draws the initial latent noise (Sub. 1 = 42, Sub. 2 = 55). Across the full 100-prompt set Sub. 2 has the slightly higher average reward (table below).</p> | |
| <div class="cases2"> | |
| <div class="lcase reveal d1"> | |
| <p class="pr">A relaxed hiphop track featuring a subtle cymbal shimmer, smooth beat, and soft rhythmic flow, perfect as a background atmosphere. Enhanced with a warm electric piano and a light upright bass, the arrangement stays minimal and laid-back, offering a calm, ambient presence without overpowering the space.</p> | |
| <div class="ab"> | |
| <div><div class="leg"><span class="nm base">Baseline</span><span class="badge b">reward −1.67</span></div><audio controls preload="none" src="audio/baseline/4.wav"></audio></div> | |
| <div><div class="leg"><span class="nm ours">Sub. 1 (seed 42)</span><span class="badge s">reward +1.34</span></div><audio controls preload="none" src="audio/sub1/4.wav"></audio></div> | |
| <div><div class="leg"><span class="nm ours">Sub. 2 (seed 55)</span><span class="badge s">reward +1.26</span></div><audio controls preload="none" src="audio/sub2/4.wav"></audio></div> | |
| </div> | |
| </div> | |
| <div class="lcase reveal d1"> | |
| <p class="pr">A beautiful house track featuring a smooth electric guitar, lush synth pads, and a steady four-on-the-floor beat, creating a warm, inviting atmosphere with a gentle groove and flowing melodies.</p> | |
| <div class="ab"> | |
| <div><div class="leg"><span class="nm base">Baseline</span><span class="badge b">reward −0.24</span></div><audio controls preload="none" src="audio/baseline/20.wav"></audio></div> | |
| <div><div class="leg"><span class="nm ours">Sub. 1 (seed 42)</span><span class="badge s">reward +1.36</span></div><audio controls preload="none" src="audio/sub1/20.wav"></audio></div> | |
| <div><div class="leg"><span class="nm ours">Sub. 2 (seed 55)</span><span class="badge s">reward +2.07</span></div><audio controls preload="none" src="audio/sub2/20.wav"></audio></div> | |
| </div> | |
| </div> | |
| <div class="lcase reveal d1"> | |
| <p class="pr">A peaceful folk soundscape unfolds with gentle acousticguitar arpeggios, enriched by the warm tones of a mandolin and the subtle presence of a fiddle, creating a natural, immersive atmosphere that feels rooted in rural tradition and quiet beauty.</p> | |
| <div class="ab"> | |
| <div><div class="leg"><span class="nm base">Baseline</span><span class="badge b">reward −0.69</span></div><audio controls preload="none" src="audio/baseline/14.wav"></audio></div> | |
| <div><div class="leg"><span class="nm ours">Sub. 1 (seed 42)</span><span class="badge s">reward +0.58</span></div><audio controls preload="none" src="audio/sub1/14.wav"></audio></div> | |
| <div><div class="leg"><span class="nm ours">Sub. 2 (seed 55)</span><span class="badge s">reward +0.69</span></div><audio controls preload="none" src="audio/sub2/14.wav"></audio></div> | |
| </div> | |
| </div> | |
| </div> | |
| <p class="resnote reveal d3" style="color:var(--muted)">Reward is the mean output of the TuneJury preference model (higher is better). Clips are 10 s, post-processed (3×Demucs mdx_extra, −16.5 LUFS).</p> | |
| </div> | |
| </section> | |
| <section class="darksec"> | |
| <div class="wrap"> | |
| <p class="kicker reveal">Results</p> | |
| <h2 class="reveal d1">Two seed-varied submissions</h2> | |
| <p class="lede reveal d2">100 held-out Song Describer Dataset<sup class="cite"><a href="#ref11">11</a></sup> prompts, scored against SDD-706 with LAION-CLAP-Music<sup class="cite"><a href="#ref12">12</a></sup>.</p> | |
| <table class="res reveal d2"> | |
| <thead><tr><th>System</th><th>FAD-CLAP ↓</th><th>CLAP score ↑</th><th>TuneJury reward ↑</th></tr></thead> | |
| <tbody> | |
| <tr class="base"><td>FluxAudio-S (baseline)</td><td>0.5998</td><td>0.230</td><td>−0.392</td></tr> | |
| <tr><td>Sub. 1 (seed 42)</td><td><b>0.4238</b></td><td>0.285</td><td>+0.533</td></tr> | |
| <tr><td>Sub. 2 (seed 55)</td><td>0.4370</td><td><b>0.300</b></td><td><b>+0.550</b></td></tr> | |
| </tbody> | |
| </table> | |
| <p class="resnote reveal d3">SDD-706 is the challenge's reference set: a 706-track instrumental MTG-Jamendo subset of the Song Describer Dataset. On the challenge's hidden Jamendo reference set, our submission (e02) scored FAD 0.498, CLAP 0.270, CCS 0.763.</p> | |
| </div> | |
| </section> | |
| <section> | |
| <div class="wrap" style="text-align:center"> | |
| <p class="kicker reveal">The reward signal</p> | |
| <h2 class="reveal d1">Powered by TuneJury</h2> | |
| <p class="lede reveal d2" style="margin:0 auto;max-width:56ch;text-wrap:balance">TuneJury is an open, instance-level pairwise reward model for <span style="white-space:nowrap">text-to-music</span>, trained on human preference judgments from open datasets<sup class="cite"><a href="#ref13">13</a>,<a href="#ref14">14</a>,<a href="#ref15">15</a>,<a href="#ref16">16</a></sup>. Here it drives both training-time conditioning and sample selection.</p> | |
| <div class="cta-row reveal d3"> | |
| <a class="cta line" href="https://huggingface.co/spaces/TuneJury/landing" target="_blank" rel="noopener">🤗 TuneJury landing page</a> | |
| </div> | |
| </div> | |
| </section> | |
| <footer> | |
| <p style="font-weight:700;letter-spacing:-.01em">Improving Text-to-Music Generation with Human Preference Rewards</p> | |
| <p class="credits">Entry to the ICME 2026 Academic Text-to-Music (ATTM) Grand Challenge, <span style="white-space:nowrap">Efficiency Track</span>.<br>Paper: <a href="https://arxiv.org/abs/2606.21670" target="_blank" rel="noopener" style="color:inherit;font-weight:700">arXiv:2606.21670</a>, to appear in the ICME 2026 Grand Challenge proceedings.</p> | |
| <div class="footgrid"> | |
| <a class="navbtn" href="https://ntu-musicailab.github.io/ICME26-ATTM-Grand-Challenge/" target="_blank" rel="noopener">Grand Challenge</a> | |
| </div> | |
| <div class="refs"> | |
| <h4>References</h4> | |
| <ol> | |
| <li id="ref1">Fang-Chih Hsieh, Wei-Jaw Lee, Chun-Ping Wang, Hung-yi Lee, Hao-Wen Dong, and Yi-Hsuan Yang. "<a href="https://ntu-musicailab.github.io/ICME26-ATTM-Grand-Challenge/" target="_blank" rel="noopener">Academic Text-To-Music Grand Challenge: Datasets, Baselines, and Evaluation Methods</a>." IEEE International Conference on Multimedia and Expo (ICME), Grand Challenge Paper, 2026.</li> | |
| <li id="ref2">Xiquan Li, Junxi Liu, Yuzhe Liang, Zhikang Niu, Wenxi Chen, and Xie Chen. "<a href="https://arxiv.org/abs/2508.06098" target="_blank" rel="noopener">MeanAudio: Fast and Faithful Text-to-Audio Generation with Mean Flows</a>." arXiv:2508.06098, 2025. <em>(FluxAudio-S backbone.)</em></li> | |
| <li id="ref3">Yonghyun Kim, Junwon Lee, Haiwen Xia, Yinghao Ma, Junghyun Koo, Koichi Saito, Yuki Mitsufuji, and Chris Donahue. "<a href="https://arxiv.org/abs/2606.17006" target="_blank" rel="noopener">TuneJury: An Open Metric for Improving Music Generation Preference Alignment</a>." arXiv:2606.17006, 2026. <em>(The reward used here.)</em></li> | |
| <li id="ref4">Jonathan Ho and Tim Salimans. "<a href="https://arxiv.org/abs/2207.12598" target="_blank" rel="noopener">Classifier-Free Diffusion Guidance</a>." arXiv:2207.12598, 2022. <em>(Classifier-free guidance.)</em></li> | |
| <li id="ref5">Thomas Anthony, Zheng Tian, and David Barber. "<a href="https://arxiv.org/abs/1705.08439" target="_blank" rel="noopener">Thinking Fast and Slow with Deep Learning and Tree Search</a>." Proc. NeurIPS, 2017. <em>(Expert iteration.)</em></li> | |
| <li id="ref6">Caglar Gulcehre, Tom Le Paine, Srivatsan Srinivasan, Ksenia Konyushkova, Lotte Weerts, Abhishek Sharma, Aditya Siddhant, Alex Ahern, Miaosen Wang, Chenjie Gu, Wolfgang Macherey, Arnaud Doucet, Orhan Firat, and Nando de Freitas. "<a href="https://arxiv.org/abs/2308.08998" target="_blank" rel="noopener">Reinforced Self-Training (ReST) for Language Modeling</a>." arXiv:2308.08998, 2023. <em>(Self-training for expert iteration.)</em></li> | |
| <li id="ref7">Chia-Yu Hung, Navonil Majumder, Zhifeng Kong, Ambuj Mehrish, Amir Ali Bagherzadeh, Chuan Li, Rafael Valle, Bryan Catanzaro, and Soujanya Poria. "<a href="https://arxiv.org/abs/2412.21037" target="_blank" rel="noopener">TangoFlux: Super Fast and Faithful Text to Audio Generation with Flow Matching and Clap-Ranked Preference Optimization</a>." Proc. ICLR, 2026. <em>(CRPO.)</em></li> | |
| <li id="ref8">Rafael Rafailov, Archit Sharma, Eric Mitchell, Stefano Ermon, Christopher D. Manning, and Chelsea Finn. "<a href="https://arxiv.org/abs/2305.18290" target="_blank" rel="noopener">Direct Preference Optimization: Your Language Model is Secretly a Reward Model</a>." Proc. NeurIPS, 2023. <em>(DPO, the CRPO objective.)</em></li> | |
| <li id="ref9">Alexandre Défossez, Nicolas Usunier, Léon Bottou, and Francis Bach. "<a href="https://arxiv.org/abs/1911.13254" target="_blank" rel="noopener">Music Source Separation in the Waveform Domain</a>." arXiv:1911.13254, 2019. <em>(Demucs source separation.)</em></li> | |
| <li id="ref10">Kevin Kilgour, Mauricio Zuluaga, Dominik Roblek, and Matthew Sharifi. "<a href="https://arxiv.org/abs/1812.08466" target="_blank" rel="noopener">Fréchet Audio Distance: A Reference-Free Metric for Evaluating Music Enhancement Algorithms</a>." Proc. Interspeech, 2019. <em>(The FAD metric.)</em></li> | |
| <li id="ref11">Ilaria Manco, Benno Weck, Seungheon Doh, Minz Won, Yixiao Zhang, Dmitry Bogdanov, Yusong Wu, Ke Chen, Philip Tovstogan, Emmanouil Benetos, Elio Quinton, György Fazekas, and Juhan Nam. "<a href="https://arxiv.org/abs/2311.10057" target="_blank" rel="noopener">The Song Describer Dataset: a Corpus of Audio Captions for Music-and-Language Evaluation</a>." Machine Learning for Audio Workshop, NeurIPS, 2023. <em>(Evaluation prompts and the SDD-706 reference.)</em></li> | |
| <li id="ref12">Yusong Wu, Ke Chen, Tianyu Zhang, Yuchen Hui, Marianna Nezhurina, Taylor Berg-Kirkpatrick, and Shlomo Dubnov. "<a href="https://arxiv.org/abs/2211.06687" target="_blank" rel="noopener">Large-scale Contrastive Language-Audio Pretraining with Feature Fusion and Keyword-to-Caption Augmentation</a>." Proc. IEEE ICASSP, 2023. <em>(LAION-CLAP-Music, the FAD-CLAP / CLAP metric.)</em></li> | |
| <li id="ref13">Yonghyun Kim, Wayne Chi, Anastasios N. Angelopoulos, Wei-Lin Chiang, Koichi Saito, Shinji Watanabe, Yuki Mitsufuji, and Chris Donahue. "<a href="https://arxiv.org/abs/2507.20900" target="_blank" rel="noopener">Music Arena: Live Evaluation for Text-to-Music</a>." Proc. NeurIPS Creative AI Track, 2025.</li> | |
| <li id="ref14">Yichen Huang, Zachary Novack, Koichi Saito, Jiatong Shi, Shinji Watanabe, Yuki Mitsufuji, John Thickstun, and Chris Donahue. "<a href="https://arxiv.org/abs/2503.16669" target="_blank" rel="noopener">Aligning Text-to-Music Evaluation with Human Preferences</a>." Proc. ISMIR, 2025. <em>(MusicPrefs.)</em></li> | |
| <li id="ref15">Florian Grötschla, Ahmet Solak, Luca A. Lanzendörfer, and Roger Wattenhofer. "<a href="https://arxiv.org/abs/2506.19085" target="_blank" rel="noopener">Benchmarking Music Generation Models and Metrics via Human Preference Studies</a>." Proc. IEEE ICASSP, 2025. <em>(AIME.)</em></li> | |
| <li id="ref16">Jixun Yao, Guobin Ma, Huixin Xue, Huakang Chen, Chunbo Hao, Yuepeng Jiang, Haohe Liu, Ruibin Yuan, Jin Xu, Wei Xue, Hao Liu, and Lei Xie. "<a href="https://arxiv.org/abs/2505.10793" target="_blank" rel="noopener">SongEval: A Benchmark Dataset for Song Aesthetics Evaluation</a>." arXiv:2505.10793, 2025. <em>(SongEval.)</em></li> | |
| </ol> | |
| </div> | |
| </footer> | |
| <script> | |
| const io=new IntersectionObserver((es)=>{es.forEach(e=>{if(e.isIntersecting)e.target.classList.add('in')})},{threshold:.12}); | |
| document.querySelectorAll('.reveal').forEach(el=>io.observe(el)); | |
| </script> | |
| </body> | |
| </html> | |