Forschung
OsuGAI bauen: KI-generierte osu! standard-Beatmaps
Wie OsuGAI v1 osu! standard-Maps erstellt: Tasten- und Cursor-Tokens, 118.000 Trainings-Maps mit osu!lazer-Auto-Replays, vier Trainingsrunden, ehrliche Beta-Grenzen.
OsuGAI ist das erste Modell von DanceGAI für osu! standard, den ursprünglichen Modus von osu!: Hit Circles, Slider und Spinner, verteilt über das ganze Spielfeld. Es ist heute als Beta gestartet, neben ManiaGAI für osu! mania. Dieser Bericht erklärt, wie es eine Map darstellt, woraus es gelernt hat, wie es trainiert wurde, was wir gemessen haben – und ebenso offen, was es noch falsch macht.
Warum osu! standard schwieriger ist als osu! mania
Ein osu! mania-Chart besteht aus Noten in Spalten: Ein Generator entscheidet, wann eine Note kommt und in welcher von 4 bis 9 Spalten sie landet. In osu! standard hat jedes Objekt zusätzlich einen Platz auf einem 512 × 384 großen Spielfeld, und der Spieler muss sich dorthin bewegen. Dadurch kommen drei Probleme hinzu, die mania nicht hat:
- Zweidimensionale Bewegung. Spacing, Sprungwinkel und Flow zwischen den Objekten machen den Großteil dessen aus, was eine Standard-Map gut oder schlecht anfühlen lässt – und sie sind stufenlos, keine Wahl zwischen ein paar Spalten.
- Slider-Geometrie. Ein Slider ist eine Kurve mit einer Länge, einer Geschwindigkeit und manchmal Wiederholungen; er muss zur Musik und zu den Objekten um ihn herum passen.
- Lesbarkeit. Objekte erscheinen, bevor du sie triffst, überlappen sich und werden gestackt. Eine Map kann perfekt getimt und trotzdem unmöglich zu lesen sein.
Die Darstellung: zuerst Gameplay, dann Editor-Objekte
Der naheliegende Weg, einem Modell osu! standard beizubringen, ist, ihm die Objekte des Editors zu geben – „Circle bei (x, y)“, „Slider mit diesen Kontrollpunkten“. Diese Familie von Ansätzen haben wir zuerst ausprobiert. OsuGAI v1 beschreibt eine Map stattdessen so, wie sie gespielt wird, und macht daraus erst hinterher wieder Objekte. Jeder Beat besteht aus fünf Tokens:
- Ein Interaktions-Token: der Tastenzustand über den Beat, abgetastet mit 48 Zellen pro Beat – gedrückt oder losgelassen, sonst nichts. Ein Tap ist ein kurzer Druck; ein Slider oder Spinner ein langer. Das Token ist eines der 4.096 häufigsten 48-Zellen-Muster in den Trainings-Charts, die 99,87 % der Trainings-Beats und 99,69 % der zurückgehaltenen Beats abdecken.
- Vier räumliche Tokens: wo der Cursor zu bis zu vier Zeitpunkten im Beat ist – bei jedem Drücken, jedem Loslassen und dann gleichmäßig aufgeteilt über die längsten Holds. Positionen liegen auf einem 4-Pixel-Raster (128 × 96 Zellen), der größte Rundungsfehler beträgt also 2,83 Pixel; ein ungenutzter Slot bleibt leer.
Das sind fünf Slots pro Beat und ein einziges Vokabular von 16.385 Tokens (4.096 Tastenmuster plus 12.289 Positionen). Die Zeitpunkte, die die räumlichen Tokens beschreiben, werden allein aus dem Tastenmuster abgeleitet, sodass das Modell nie Objekttypen lernen muss.
Warum das beabsichtigte Gameplay von der Darstellung des Editors trennen? Aus zwei Gründen, beide an menschlichen Replays gemessen, bevor wir irgendetwas trainiert haben. Erstens sind die Entscheidungen des Editors im Spiel weitgehend unsichtbar: Allein anhand des Cursors ließ sich ein kurzer Slider nur in 43–45 % der Fälle von einem Circle unterscheiden – Details auf Objektebene sind also Entscheidungen, die der Decoder treffen kann, nicht etwas, das das Modell erraten muss. Zweitens verliert die Gameplay-Beschreibung fast nichts, was zählt: Maps, die aus einem idealisierten Tastenzustand plus einem menschlichen Cursor-Pfad rekonstruiert wurden, wurden von den Replays anderer Spieler genauso oft getroffen wie Maps, die aus einer objektbewussten Beschreibung rekonstruiert wurden (97,9 % vs. 98,0 %). Mit den tatsächlichen Tastenzuständen der Spieler fiel dieser Wert dagegen auf 78,5 % – echte Tastendrücke sind zu verrauscht, um daraus zu lernen, und deshalb ist das Tasten-Token idealisiert.
Die Trainingsdaten
| Wert | |
|---|---|
| Verarbeitete Charts | 117.918 |
| Songs | 25.928 |
| Trainingsfenster | 11,85 Millionen |
| Charts Training / Validierung / Holdout | 117.474 / 362 / 82 |
| Star Rating, 10. / 50. / 90. Perzentil | 1,98 / 3,69 / 5,86 |
Der Korpus besteht aus Ranked-, Approved- und Loved-Maps für osu! standard – 117.918 von 117.920 Charts wurden erfolgreich konvertiert. Validierung und Holdout sind songdisjunkt: Kein Song daraus kommt im Training vor. Wie bei ManiaGAI wurde das Timing jedes Charts zuerst auf das Raster unseres eigenen Timing-Detektors verschoben, sodass das Modell auf derselben Art von Raster trainiert, die es beim Generieren bekommt. Kein Chart wurde aussortiert, weil es schwer war.
Woher die Cursor-Positionen kommen: der Auto-Replay von osu!lazer
Eine Map-Datei sagt, wo Objekte liegen, nicht, wie sich der Cursor zwischen ihnen bewegt. Wir leiten die räumlichen Tokens aus dem Auto-Replay von osu!lazer ab – dem eingebauten perfekten Spieler. Wir haben seine Cursor-Logik nach Python portiert und auf 20 Maps mit dem echten Spiel abgeglichen: 264.716 Frames, dieselben Frame-Zahlen, null Abweichungen bei Tasten oder Stacking, 0,014 Pixel mittlere Differenz. Maps, die aus Auto-Cursor-Pfaden zurückdekodiert wurden, wurden auf einem Benchmark mit 91 Maps zu 99,7 % von den menschlichen Replays anderer Spieler getroffen.
Eine ehrliche Einschränkung: Auto ist kein Mensch. Es folgt dem exakten Pfad jedes Sliders, sein Cursor kommt also nah an „die ursprüngliche Slider-Geometrie, als Positionen geschrieben“ heran – 72 % der ursprünglichen Slider-Pfade lassen sich aus Auto auf 4 Pixel genau zurücklesen, gegenüber 1 % aus einem einzelnen menschlichen Replay. OsuGAI v1 lernt daher, wo ein Mapper Dinge hinsetzt, nicht, wie sich Menschen tatsächlich bewegen.
Die Architektur
- Musik
- Timing-Raster
- Planner
- Noter
- Decoder
- .osu / .osz
OsuGAI läuft auf derselben Engine wie ManiaGAI (beschrieben in Planner und Noter), wobei die modusspezifischen Teile ausgetauscht sind:
- Planner (wiederverwendet). Ein kleines Diffusionsmodell, unverändert aus unserer früheren Arbeit an osu! standard, plant jeden Teil des Songs, bevor es überhaupt ein Objekt gibt: sein Star-Niveau und eine Style-Beschreibung – Slider-Anteil, Winkelcharakter, Unregelmäßigkeit des Spacings, Stream-Abstand und Rhythmus.
- Noter (neu). Ein Transformer im MaskGIT-Stil mit etwa 64,1 Millionen Parametern füllt die fünf Tokens jedes Beats aus und folgt dabei dem Plan, dem Audio und den Schwierigkeitseinstellungen (Circle Size, Approach Rate, Overall Difficulty und Slider Velocity). Neben der Genauigkeit exakter Positionen gibt sein Training Teilpunkte für eine Position, die innerhalb von 16 Pixeln um das Ziel landet.
- Decoder (regelbasiert, Repeat-fähig). Macht aus Gameplay wieder Objekte: Ein Druck wird zu einem Hit Circle; ein langer Druck wird zu einem Spinner, wenn der Cursor mindestens 1,5 Beats lang um die Mitte kreist, sonst zu einem Slider – der einfachsten Linie, dem einfachsten Bogen oder der einfachsten Kurve, bei der der Sliderball nah am vorhergesagten Pfad bleibt. Klare, gleichmäßig getimte Richtungswechsel werden zu einem Repeat-Slider. New Combos folgen einer festen Regel.
Training: vier Runden
Der Noter wurde mit einem Warmstart aus unserem vorherigen osu! standard-Modell begonnen und in vier Runden mit je vier zeitlich begrenzten Epochen (jeweils etwa 46 Minuten) trainiert – insgesamt rund 14 Stunden auf einer einzelnen RTX 4070 Ti SUPER (16 GB), mit einem Spitzenwert von etwa 6 GB GPU-Speicher. Nach jeder Runde haben wir ein Evaluationsset generiert: 8 zurückgehaltene Songs × 22 Einstellungen = 176 Maps.
| Runde | Validierungs-Loss | Gültige Maps | Gemessene ★ bei Zielen 2 / 4 / 6 |
|---|---|---|---|
| 1 | 3,1389 | 176/176 | 2,39 / 4,76 / 7,38 |
| 2 | 3,0175 | 176/176 | 2,24 / 4,64 / 7,28 |
| 3 | 2,9842 | 176/176 | 2,32 / 4,64 / 7,04 |
| 4 (veröffentlicht) | 2,9570 | 176/176 | 2,40 / 4,62 / 7,22 |
- Der Validierungs-Loss sank über die vier Runden von 3,1389 auf 2,9570.
- Strukturelle Gültigkeit: Alle 176 Evaluations-Maps waren in jeder Runde gültige osu! standard-Maps – zulässige Objekte, keine Slot-Verstöße.
- Schwierigkeit und Style reagieren: Das gemessene Star Rating stieg bei 8 von 8 Songs mit dem Ziel, und jede der vier Style-Achsen bewegte die Map bei 8 von 8 Songs in die richtige Richtung – allerdings ist das abschnittsweise Folgen des Plans noch schwach.
- Deterministisch: Derselbe Song mit demselben Seed ergibt byteidentische .osu-Dateien.
Geschwindigkeit. Auf dieser Entwicklungs-GPU brauchten acht Schwierigkeiten von Flower Dance (4:22) etwa 16–18 Sekunden durch die gemessenen Phasen – Audiovorbereitung, Timing, Audio-Features, Planung und etwa 11–12 Sekunden Notengenerierung; Dekodieren und Schreiben der Dateien kommen im Schnitt mit etwa 0,6 Sekunden pro Map auf der CPU hinzu. Das ist ein lokaler Benchmark: Im Produktivbetrieb läuft es auf einer anderen, Cloud-GPU, und die Latenz von OsuGAI im Produktivbetrieb haben wir noch nicht gemessen.
Grenzen
Eine gültige Map ist nicht dasselbe wie eine Map, die Spaß macht, und keine der Zahlen oben sagt, dass sich die Maps von OsuGAI kompetitiv gut spielen. Was wir sicher wissen, dass es falsch ist:
- Überschießende Schwierigkeit. Maps fallen schwerer aus als das Ziel, und ganz oben viel schwerer: Bei Flower Dance maßen Ziele von 7,43, 8,71 und 10 Sternen 9,28, 13,49 und 13,99 Sterne. Die Website bietet deshalb nur Ziele von ★1–★6 an und zeigt immer das gemessene Rating.
- Slider, die sich selbst kreuzen. 3,3 % der generierten Slider in der letzten Runde schneiden sich selbst (2,4 % nach der ersten Runde), gegenüber 0,1 % in den Original-Maps.
- Artefakte in der Slider-Geometrie. Manche Slider stoßen an die Geschwindigkeitsbegrenzung (2,8 % in der letzten Runde), und Repeat-Slider sind seltener als in menschlichen Maps (6,1 % der Slider vs. 21 %).
- Auto als Lehrer. Die Cursor-Pfade stammen von Auto, nicht von Menschen: Das Modell lernt die Platzierung von Objekten, nicht menschliche Bewegung.
- Überlauf und Vokabular-Fallback. 0,58 % der Trainings-Beats brauchen mehr als vier Positionen; nur die ersten vier werden behalten. 0,13 % der Beats liegen außerhalb der 4.096 Tastenmuster und verwenden das nächstgelegene. Sehr dichte Maps sind am stärksten betroffen.
- Noch kein breites Playtesting durch Menschen. Jede Prüfung bisher ist automatisch oder basiert auf aufgezeichneten Replays. Mit der Beta fängt das an.
Wie es weitergeht
- Bessere Kalibrierung der Schwierigkeit – Ziele, denen du trauen kannst, und wieder der volle Star-Bereich.
- Sauberere Slider-Geometrie – weniger Selbstkreuzungen und begrenzte Geschwindigkeiten, natürlichere Repeats.
- Menschliche Gameplay-Daten – lernen, wie sich Menschen bewegen, nicht nur, wo Objekte liegen.
- Stärkere Style-Kontrolle – Regler, denen die Map Abschnitt für Abschnitt folgt, nicht nur im Durchschnitt.
- Mehr osu!-Modi – osu! taiko und osu! catch sind die nächsten auf der Roadmap.
Neu in diesem Modus? Was ist osu! standard? erklärt das Spiel selbst; die Technologie-Seite behandelt die Engine, die OsuGAI mit ManiaGAI teilt.