Riset

Membangun OsuGAI: Beatmap osu! standard Buatan AI

Cara OsuGAI v1 membuat map osu! standard: tekanan tombol + posisi kursor, 118.000 map training dengan replay Auto osu!lazer, empat putaran training, hasil, dan batasan jujur versi beta.

OsuGAI adalah model pertama DanceGAI untuk osu! standard, mode asli osu!: hit circle, slider, dan spinner yang tersebar di seluruh playfield. Hari ini ia diluncurkan sebagai beta, berdampingan dengan ManiaGAI untuk osu! mania. Laporan ini menjelaskan bagaimana ia merepresentasikan sebuah map, dari mana ia belajar, bagaimana ia dilatih, apa yang kami ukur — dan, dengan sama terus terangnya, apa yang masih salah.

Kenapa osu! standard lebih sulit daripada osu! mania

Chart osu! mania adalah note di dalam kolom: generator memutuskan kapan sebuah note datang dan di kolom mana dari 4 sampai 9 kolom ia jatuh. Di osu! standard setiap objek juga punya posisi di playfield berukuran 512 × 384, dan pemain harus bergerak ke sana. Itu menambah tiga masalah yang tidak ada di mania:

  • Gerakan dua dimensi. Spacing, sudut jump, dan flow antarobjek adalah sebagian besar hal yang membuat map standard terasa enak atau tidak — dan semuanya bersifat kontinu, bukan pilihan di antara beberapa kolom.
  • Geometri slider. Slider adalah kurva dengan panjang, kecepatan, dan kadang repeat; ia harus cocok dengan musik dan dengan objek di sekitarnya.
  • Keterbacaan. Objek muncul sebelum kamu menekannya, saling tumpang tindih, dan bertumpuk (stack). Sebuah map bisa punya timing sempurna tapi tetap mustahil dibaca.

Representasinya: gameplay dulu, objek editor kemudian

Cara yang paling jelas untuk mengajari model osu! standard adalah memberinya objek-objek editor — “circle di (x, y)”, “slider dengan titik kontrol ini”. Kami mencoba pendekatan semacam itu lebih dulu. OsuGAI v1 justru mendeskripsikan map sebagaimana map itu dimainkan, lalu mengubahnya kembali menjadi objek setelahnya. Setiap beat terdiri dari lima token:

  • Satu token interaksi: status tombol sepanjang beat, diambil sampelnya pada 48 sel per beat — ditekan atau dilepas, tidak ada yang lain. Tap adalah tekanan singkat; slider atau spinner adalah tekanan panjang. Token ini adalah salah satu dari 4.096 pola 48 sel yang paling sering muncul di chart training, yang mencakup 99,87% beat training dan 99,69% beat held-out.
  • Empat token spasial: di mana kursor berada pada hingga empat momen dalam beat — setiap tekanan, setiap pelepasan, lalu tahanan terpanjang yang dibagi rata. Posisi berada di grid 4 piksel (128 × 96 sel), jadi galat pembulatan terbesarnya 2,83 piksel; slot yang tidak terpakai dibiarkan kosong.

Jadi ada lima slot per beat dan satu vokabulari berisi 16.385 token (4.096 pola tombol ditambah 12.289 posisi). Momen-momen yang dideskripsikan token spasial diturunkan hanya dari pola tombol, sehingga model tidak pernah perlu mempelajari jenis objek.

Kenapa memisahkan gameplay yang dimaksud dari representasi editor? Dua alasan, keduanya diukur pada replay manusia sebelum kami melatih apa pun. Pertama, pilihan-pilihan editor sebagian besar tidak terlihat saat dimainkan: dari kursornya saja, slider pendek hanya bisa dibedakan dari circle 43–45% dari waktu — jadi detail tingkat objek adalah keputusan yang bisa diambil decoder, bukan sesuatu yang harus ditebak model. Kedua, deskripsi gameplay hampir tidak kehilangan apa pun yang penting: map yang dibangun ulang dari status tombol ideal ditambah jalur kursor manusia dikenai replay pemain lain sesering map yang dibangun ulang dari deskripsi yang sadar objek (97,9% vs 98,0%). Memakai status tombol pemain yang sebenarnya justru menurunkannya ke 78,5% — tekanan nyata terlalu berisik untuk dipelajari, itulah sebabnya token tombolnya diidealkan.

Data training

Data training OsuGAI v1
Nilai
Chart yang diproses117.918
Lagu25.928
Window training11,85 juta
Chart train / validasi / holdout117.474 / 362 / 82
Star rating, persentil ke-10 / ke-50 / ke-901,98 / 3,69 / 5,86

Korpusnya adalah map osu! standard berstatus ranked, approved, dan loved — 117.918 dari 117.920 chart berhasil dikonversi. Set validasi dan holdout bersifat song-disjoint: tidak ada lagu di dalamnya yang muncul di data training. Seperti pada ManiaGAI, timing setiap chart lebih dulu dipindahkan ke grid detektor timing kami sendiri, sehingga model berlatih dengan jenis grid yang sama dengan yang ia dapat saat generate. Tidak ada chart yang dibuang karena terlalu sulit.

Dari mana posisi kursor berasal: replay Auto di osu!lazer

File map menyebutkan di mana objek berada, bukan bagaimana kursor bergerak di antaranya. Kami menurunkan token spasial dari replay Auto di osu!lazer — pemain sempurna bawaan game. Kami mem-port logika kursornya ke Python dan mencocokkannya dengan game aslinya pada 20 map: 264.716 frame, jumlah frame yang sama, nol ketidakcocokan tombol maupun stacking, selisih rata-rata 0,014 piksel. Map yang di-decode kembali dari jalur kursor Auto dikenai replay manusia pemain lain 99,7% dari waktu pada benchmark 91 map.

Satu catatan jujur: Auto bukan manusia. Ia mengikuti jalur persis setiap slider, sehingga kursornya mendekati “geometri slider asli yang ditulis sebagai posisi” — 72% jalur slider asli bisa dibaca kembali dari Auto dalam selisih 4 piksel, dibandingkan 1% dari satu replay manusia. Karena itu OsuGAI v1 belajar di mana seorang mapper menaruh sesuatu, bukan bagaimana orang benar-benar bergerak.

Arsitekturnya

  1. Musik
  2. Grid timing
  3. Planner
  4. Noter
  5. Decoder
  6. .osu / .osz

OsuGAI berjalan di mesin yang sama dengan ManiaGAI (dijelaskan di Planner dan Noter), dengan bagian-bagian khusus mode yang diganti:

  • Planner (dipakai ulang). Model diffusion kecil, tidak berubah dari pekerjaan osu! standard kami sebelumnya, merencanakan setiap bagian lagu sebelum ada objek apa pun: level bintangnya, dan deskripsi gaya — porsi slider, karakter sudut, ketidakteraturan spacing, spacing stream, dan ritme.
  • Noter (baru). Transformer ala MaskGIT dengan sekitar 64,1 juta parameter mengisi lima token di setiap beat, mengikuti rencana, audio, dan pengaturan difficulty (circle size, approach rate, overall difficulty, dan slider velocity). Selain akurasi posisi yang persis, training-nya memberi nilai parsial untuk posisi yang jatuh dalam jarak 16 piksel dari target.
  • Decoder (berbasis aturan, sadar repeat). Mengubah gameplay kembali menjadi objek: tekanan menjadi hit circle; tekanan panjang menjadi spinner kalau kursor mengitari titik tengah selama setidaknya 1,5 beat, kalau tidak menjadi slider — garis, busur, atau kurva paling sederhana yang menjaga bola slider tetap dekat dengan jalur yang diprediksi. Pembalikan arah yang jelas dan ber-timing rata menjadi repeat slider. New combo mengikuti aturan tetap.

Training: empat putaran

Noter di-warm-start dari model osu! standard kami sebelumnya dan dilatih dalam empat putaran, masing-masing empat epoch dengan batas waktu (sekitar 46 menit per epoch) — kira-kira 14 jam total di satu RTX 4070 Ti SUPER (16 GB), dengan puncak pemakaian memori GPU sekitar 6 GB. Setelah setiap putaran kami membuat set evaluasi: 8 lagu held-out × 22 pengaturan = 176 map.

Putaran training OsuGAI v1
PutaranValidation lossMap valid★ terukur untuk target 2 / 4 / 6
13,1389176/1762,39 / 4,76 / 7,38
23,0175176/1762,24 / 4,64 / 7,28
32,9842176/1762,32 / 4,64 / 7,04
4 (dirilis)2,9570176/1762,40 / 4,62 / 7,22
  • Validation loss turun dari 3,1389 ke 2,9570 selama empat putaran.
  • Validitas struktural: ke-176 map evaluasi adalah map osu! standard yang valid di setiap putaran — objek yang sah, tanpa pelanggaran slot.
  • Difficulty dan gaya merespons: star rating terukur naik seiring target pada 8 dari 8 lagu, dan masing-masing dari empat sumbu gaya menggeser map ke arah yang benar pada 8 dari 8 lagu — meskipun kepatuhan terhadap rencana bagian demi bagian masih lemah.
  • Deterministik: lagu yang sama dengan seed yang sama menghasilkan file .osu yang identik byte demi byte.

Kecepatan. Di GPU pengembangan itu, delapan difficulty Flower Dance (4:22) butuh sekitar 16–18 detik untuk tahap-tahap yang diukur waktunya — persiapan audio, timing, fitur audio, perencanaan, dan sekitar 11–12 detik generate note; decoding dan penulisan file menambah rata-rata sekitar 0,6 detik per map, di CPU. Ini benchmark lokal: produksi berjalan di GPU cloud yang berbeda, dan kami belum mengukur latensi produksi OsuGAI.

Keterbatasan

Map yang valid tidak sama dengan map yang seru, dan tidak satu pun angka di atas menyatakan bahwa map OsuGAI bagus untuk dimainkan secara kompetitif. Yang kami tahu masih salah:

  • Difficulty kebablasan. Map keluar lebih sulit daripada targetnya, dan jauh lebih sulit di level teratas: pada Flower Dance, target 7,43, 8,71, dan 10 terukur 9,28, 13,49, dan 13,99 bintang. Karena itu situs web hanya menawarkan target ★1–★6 dan selalu menampilkan rating hasil pengukuran.
  • Slider yang memotong dirinya sendiri. 3,3% slider yang di-generate pada putaran terakhir berpotongan dengan dirinya sendiri (2,4% setelah putaran pertama), dibandingkan 0,1% di map aslinya.
  • Artefak geometri slider. Sebagian slider menyentuh batas kecepatan (2,8% pada putaran terakhir), dan repeat slider lebih jarang daripada di map buatan manusia (6,1% dari slider vs 21%).
  • Supervisi Auto. Jalur kursornya milik Auto, bukan manusia: model mempelajari penempatan objek, bukan gerakan manusia.
  • Overflow dan fallback vokabulari. 0,58% beat training butuh lebih dari empat posisi; hanya empat yang pertama yang disimpan. 0,13% beat berada di luar 4.096 pola tombol dan memakai pola terdekat. Map yang sangat padat paling terdampak.
  • Belum ada playtest luas oleh manusia. Semua pemeriksaan sejauh ini otomatis atau berdasarkan replay yang direkam. Beta inilah awalnya.

Selanjutnya

  • Kalibrasi difficulty yang lebih baik — target yang bisa kamu percaya, dan rentang bintang penuh kembali tersedia.
  • Geometri slider yang lebih rapi — lebih sedikit slider yang memotong dirinya sendiri dan kecepatan yang terbatas, repeat yang lebih alami.
  • Data gameplay manusia — belajar bagaimana orang bergerak, bukan hanya di mana objek berada.
  • Kontrol gaya yang lebih kuat — bar yang diikuti map bagian demi bagian, bukan hanya secara rata-rata.
  • Lebih banyak mode osu! — osu! taiko dan osu! catch berikutnya di roadmap.

Baru kenal mode ini? Apa itu osu! standard? menjelaskan game-nya sendiri; halaman teknologi membahas mesin yang dipakai bersama oleh OsuGAI dan ManiaGAI.