Badania
Jak powstał OsuGAI: beatmapy osu! standard generowane przez AI
Jak OsuGAI v1 tworzy mapy osu! standard: wciśnięcia i pozycje kursora, 118 000 map z replayami Auto z osu!lazer, cztery rundy treningu i uczciwe limity bety.
OsuGAI to pierwszy model DanceGAI dla osu! standard, oryginalnego trybu osu!: kółek, sliderów i spinnerów rozsianych po całym polu gry. Wystartował dziś jako beta, obok ManiaGAI dla osu! mania. Ten raport wyjaśnia, jak model reprezentuje mapę, na czym się uczył, jak był trenowany, co zmierzyliśmy — i równie otwarcie, co wciąż robi źle.
Dlaczego osu! standard jest trudniejsze niż osu! mania
Chart osu! mania to nuty w kolumnach: generator decyduje, kiedy pojawia się nuta i w której z 4 do 9 kolumn ląduje. W osu! standard każdy obiekt ma też miejsce na polu gry o wymiarach 512 × 384, a gracz musi do niego dotrzeć kursorem. To dodaje trzy problemy, których mania nie ma:
- Ruch w dwóch wymiarach. Odstępy, kąty skoków i flow między obiektami w dużej mierze decydują o tym, czy mapa standard gra się dobrze, czy źle — a są to wartości ciągłe, a nie wybór spośród kilku kolumn.
- Geometria sliderów. Slider to krzywa o określonej długości i prędkości, czasem z powtórzeniami; musi pasować do muzyki i do otaczających go obiektów.
- Czytelność. Obiekty pojawiają się, zanim w nie trafisz, nakładają się i tworzą stacki. Mapa może mieć idealny timing, a mimo to być nie do przeczytania.
Reprezentacja: najpierw rozgrywka, potem obiekty edytora
Najbardziej oczywisty sposób, by nauczyć model osu! standard, to dać mu obiekty z edytora — „kółko w (x, y)”, „slider z tymi punktami kontrolnymi”. Tę rodzinę podejść wypróbowaliśmy najpierw. OsuGAI v1 opisuje natomiast mapę tak, jak się ją gra, i dopiero potem zamienia ten opis z powrotem w obiekty. Każdy beat to pięć tokenów:
- Jeden token interakcji: stan przycisku w ciągu beatu, próbkowany w 48 komórkach na beat — wciśnięty albo puszczony, nic więcej. Tap to krótkie wciśnięcie; slider lub spinner to długie. Token jest jednym z 4096 najczęstszych 48-komórkowych wzorców w chartach treningowych, które pokrywają 99,87% beatów treningowych i 99,69% beatów z zestawu odłożonego.
- Cztery tokeny przestrzenne: gdzie jest kursor w maksymalnie czterech momentach beatu — przy każdym wciśnięciu, przy każdym puszczeniu, a potem najdłuższe przytrzymania podzielone po równo. Pozycje leżą na siatce co 4 piksele (128 × 96 komórek), więc największy błąd zaokrąglenia to 2,83 piksela; nieużyty slot jest pusty.
To daje pięć slotów na beat i jeden słownik liczący 16 385 tokenów (4096 wzorców przycisku plus 12 289 pozycji). Momenty opisywane przez tokeny przestrzenne wynikają wyłącznie z wzorca przycisku, więc model nigdy nie musi uczyć się typów obiektów.
Po co oddzielać zamierzoną rozgrywkę od reprezentacji edytora? Z dwóch powodów — oba zmierzyliśmy na replayach ludzi, zanim cokolwiek wytrenowaliśmy. Po pierwsze, wybory edytora są w grze w dużej mierze niewidoczne: na podstawie samego kursora krótki slider dało się odróżnić od kółka tylko w 43–45% przypadków — więc szczegóły na poziomie obiektów to decyzje, które może podjąć dekoder, a nie coś, co model musi zgadywać. Po drugie, opis rozgrywki nie gubi prawie niczego, co ma znaczenie: mapy odbudowane z wyidealizowanego stanu przycisku i ludzkiej ścieżki kursora były trafiane przez replaye innych graczy równie często jak mapy odbudowane z opisu uwzględniającego obiekty (97,9% wobec 98,0%). Użycie faktycznych stanów przycisku graczy obniżyło ten wynik do 78,5% — prawdziwe wciśnięcia są zbyt zaszumione, żeby się na nich uczyć, i dlatego token przycisku jest wyidealizowany.
Dane treningowe
| Wartość | |
|---|---|
| Przetworzone charty | 117 918 |
| Piosenki | 25 928 |
| Okna treningowe | 11,85 mln |
| Charty: trening / walidacja / zestaw odłożony | 117 474 / 362 / 82 |
| Star rating, 10. / 50. / 90. percentyl | 1,98 / 3,69 / 5,86 |
Korpus to mapy osu! standard o statusie ranked, approved i loved — udało się przekonwertować 117 918 z 117 920 chartów. Zestawy walidacyjny i odłożony są rozłączne pod względem piosenek: żadna piosenka z nich nie występuje w treningu. Tak jak w ManiaGAI, timing każdego chartu został najpierw przeniesiony na siatkę naszego własnego detektora timingu, więc model trenuje na tym samym rodzaju siatki, jaki dostaje podczas generowania. Żaden chart nie został odrzucony za to, że był trudny.
Skąd biorą się pozycje kursora: replay Auto z osu!lazer
Plik mapy mówi, gdzie są obiekty, a nie jak kursor porusza się między nimi. Tokeny przestrzenne wyprowadzamy z replaya Auto z osu!lazer — wbudowanego idealnego gracza. Przenieśliśmy jego logikę kursora do Pythona i porównaliśmy ją z prawdziwą grą na 20 mapach: 264 716 klatek, te same liczby klatek, zero niezgodności przycisków czy stackowania, średnia różnica 0,014 piksela. Mapy odtworzone ze ścieżek kursora Auto były trafiane przez replaye innych, ludzkich graczy w 99,7% przypadków w benchmarku obejmującym 91 map.
Jedno uczciwe zastrzeżenie: Auto to nie człowiek. Podąża dokładnie ścieżką każdego slidera, więc jego kursor jest bliski „oryginalnej geometrii slidera zapisanej jako pozycje” — 72% oryginalnych ścieżek sliderów da się odczytać z Auto z dokładnością do 4 pikseli, wobec 1% z pojedynczego replaya człowieka. OsuGAI v1 uczy się więc, gdzie mapper umieszcza obiekty, a nie tego, jak ludzie faktycznie się poruszają.
Architektura
- Muzyka
- Siatka timingu
- Planner
- Noter
- Dekoder
- .osu / .osz
OsuGAI działa na tym samym silniku co ManiaGAI (opisanym w artykule Planner i Noter), z wymienionymi częściami specyficznymi dla trybu:
- Planner (ponownie użyty). Mały model dyfuzyjny, niezmieniony od naszych wcześniejszych prac nad osu! standard, planuje każdy fragment piosenki, zanim powstanie jakikolwiek obiekt: jego poziom gwiazdkowy i opis stylu — udział sliderów, charakter kątów, nieregularność odstępów, odstępy w streamach i rytm.
- Noter (nowy). Transformer w stylu MaskGIT, liczący około 64,1 mln parametrów, wypełnia pięć tokenów każdego beatu, kierując się planem, audio i ustawieniami trudności (circle size, approach rate, overall difficulty i slider velocity). Oprócz trafności dokładnej pozycji trening przyznaje częściowe punkty za pozycję, która ląduje w promieniu 16 pikseli od celu.
- Dekoder (oparty na regułach, rozpoznający powtórzenia). Zamienia rozgrywkę z powrotem w obiekty: wciśnięcie staje się kółkiem; długie wciśnięcie staje się spinnerem, gdy kursor krąży wokół środka przez co najmniej 1,5 beatu, a w przeciwnym razie sliderem — najprostszą linią, łukiem lub krzywą, która utrzymuje kulkę slidera blisko przewidzianej ścieżki. Wyraźne, równomiernie rozłożone w czasie zawrócenia stają się sliderem z powtórzeniami. New combo idą według stałej reguły.
Trening: cztery rundy
Noter wystartował z wag naszego poprzedniego modelu osu! standard i był trenowany w czterech rundach po cztery epoki ograniczone czasowo (każda około 46 minut) — łącznie mniej więcej 14 godzin na jednej karcie RTX 4070 Ti SUPER (16 GB), przy szczytowym zużyciu około 6 GB pamięci GPU. Po każdej rundzie generowaliśmy zestaw ewaluacyjny: 8 odłożonych piosenek × 22 ustawienia = 176 map.
| Runda | Strata walidacyjna | Poprawne mapy | Zmierzone ★ dla celów 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 (wydana) | 2,9570 | 176/176 | 2,40 / 4,62 / 7,22 |
- Strata walidacyjna spadła z 3,1389 do 2,9570 w ciągu czterech rund.
- Poprawność strukturalna: wszystkie 176 map ewaluacyjnych było poprawnymi mapami osu! standard w każdej rundzie — dozwolone obiekty, żadnych naruszeń slotów.
- Trudność i styl reagują: zmierzony star rating rósł wraz z celem w 8 na 8 piosenek, a każda z czterech osi stylu zmieniała mapę we właściwym kierunku w 8 na 8 piosenek — choć podążanie za planem sekcja po sekcji jest wciąż słabe.
- Determinizm: ta sama piosenka z tym samym seedem daje identyczne co do bajtu pliki .osu.
Szybkość. Na tym deweloperskim GPU osiem poziomów trudności Flower Dance (4:22) zajęło około 16–18 sekund w mierzonych etapach — przygotowanie audio, timing, cechy audio, planowanie i około 11–12 sekund generowania nut; dekodowanie i zapis plików dodają średnio około 0,6 sekundy na mapę, na CPU. To benchmark lokalny: produkcja działa na innym, chmurowym GPU, a opóźnienia OsuGAI w produkcji jeszcze nie zmierzyliśmy.
Ograniczenia
Poprawna mapa to nie to samo co mapa, w którą gra się z przyjemnością, i żadna z powyższych liczb nie mówi, że mapy OsuGAI dobrze nadają się do gry na poważnie. Co wiemy, że jest nie tak:
- Przestrzelona trudność. Mapy wychodzą trudniejsze niż cel, a na górze skali znacznie trudniejsze: we Flower Dance cele 7,43, 8,71 i 10 zmierzyły 9,28, 13,49 i 13,99 gwiazdki. Dlatego strona oferuje tylko cele ★1–★6 i zawsze pokazuje zmierzoną ocenę.
- Slidery, które przecinają same siebie. 3,3% wygenerowanych sliderów w ostatniej rundzie przecina samo siebie (2,4% po pierwszej rundzie), wobec 0,1% w oryginalnych mapach.
- Artefakty geometrii sliderów. Niektóre slidery trafiają w ograniczenie prędkości (2,8% w ostatniej rundzie), a slidery z powtórzeniami są rzadsze niż w mapach ludzi (6,1% sliderów wobec 21%).
- Nadzór z Auto. Ścieżki kursora pochodzą od Auto, a nie od ludzi: model uczy się rozmieszczania obiektów, a nie ludzkiego ruchu.
- Przepełnienie i zastępowanie spoza słownika. 0,58% beatów treningowych wymaga więcej niż czterech pozycji; zachowywane są tylko pierwsze cztery. 0,13% beatów wypada poza 4096 wzorców przycisku i używa najbliższego. Najbardziej dotyczy to bardzo gęstych map.
- Brak szerokich playtestów z udziałem ludzi. Każde dotychczasowe sprawdzenie jest automatyczne albo oparte na nagranych replayach. To beta jest miejscem, gdzie to się zaczyna.
Co dalej
- Lepsza kalibracja trudności — cele, którym można ufać, i powrót pełnego zakresu gwiazdek.
- Czystsza geometria sliderów — mniej samoprzecięć i obciętych prędkości, bardziej naturalne powtórzenia.
- Dane z gry ludzi — nauka tego, jak ludzie się poruszają, a nie tylko tego, gdzie są obiekty.
- Silniejsza kontrola stylu — paski, za którymi mapa podąża sekcja po sekcji, a nie tylko średnio.
- Więcej trybów osu! — osu! taiko i osu! catch są następne w planach.
Nie znasz tego trybu? Artykuł Czym jest osu! standard? wyjaśnia samą grę, a strona technologii opisuje silnik, który OsuGAI dzieli z ManiaGAI.