Investigación

Construyendo OsuGAI: beatmaps de osu! standard generados con IA

Cómo OsuGAI v1 crea mapas de osu! standard: pulsaciones y cursor, 118.000 mapas con replays de Auto de osu!lazer, cuatro rondas de entrenamiento y los límites de la beta.

OsuGAI es el primer modelo de DanceGAI para osu! standard, el modo original de osu!: círculos, sliders y spinners repartidos por el playfield. Hoy se lanzó como beta, junto a ManiaGAI para osu! mania. Este informe explica cómo representa un mapa, de qué aprendió, cómo se entrenó, qué medimos y, con la misma claridad, en qué sigue fallando.

Por qué osu! standard es más difícil que osu! mania

Un chart de osu! mania son notas en columnas: un generador decide cuándo llega una nota y en cuál de 4 a 9 columnas cae. En osu! standard cada objeto tiene además un lugar en un playfield de 512 × 384, y el jugador tiene que moverse hasta él. Eso añade tres problemas que mania no tiene:

  • Movimiento en dos dimensiones. El espaciado, los ángulos de los saltos y el flow entre objetos son la mayor parte de lo que hace que un mapa de standard se sienta bien o mal, y son continuos, no una elección entre unas pocas columnas.
  • Geometría de los sliders. Un slider es una curva con una longitud, una velocidad y a veces repeticiones; tiene que encajar con la música y con los objetos que lo rodean.
  • Legibilidad. Los objetos aparecen antes de que los golpees, se solapan y se apilan. Un mapa puede tener un timing perfecto y aun así ser imposible de leer.

La representación: primero el gameplay, después los objetos del editor

La forma obvia de enseñar osu! standard a un modelo es darle los objetos del editor: “círculo en (x, y)”, “slider con estos puntos de control”. Primero probamos esa familia de enfoques. OsuGAI v1, en cambio, describe un mapa tal como se juega, y después lo vuelve a convertir en objetos. Cada beat son cinco tokens:

  • Un token de interacción: el estado del botón a lo largo del beat, muestreado en 48 celdas por beat: pulsado o soltado, nada más. Un toque es una pulsación corta; un slider o un spinner, una larga. El token es uno de los 4096 patrones de 48 celdas más frecuentes en los charts de entrenamiento, que cubren el 99,87 % de los beats de entrenamiento y el 99,69 % de los beats reservados.
  • Cuatro tokens espaciales: dónde está el cursor en hasta cuatro momentos del beat: cada pulsación, cada liberación y, después, las pulsaciones mantenidas más largas divididas a partes iguales. Las posiciones están en una cuadrícula de 4 píxeles (128 × 96 celdas), así que el mayor error de redondeo es de 2,83 píxeles; una ranura sin usar queda vacía.

Eso son cinco ranuras por beat y un único vocabulario de 16.385 tokens (4096 patrones de botón más 12.289 posiciones). Los momentos que describen los tokens espaciales se derivan solo del patrón de botón, así que el modelo nunca tiene que aprender tipos de objeto.

¿Por qué separar el gameplay que se pretende de la representación del editor? Por dos razones, ambas medidas con replays humanos antes de entrenar nada. Primero, las decisiones del editor son en gran parte invisibles al jugar: solo con el cursor, un slider corto se podía distinguir de un círculo apenas el 43–45 % de las veces; así que los detalles a nivel de objeto son decisiones que puede tomar el decodificador, no algo que el modelo tenga que adivinar. Segundo, la descripción del gameplay no pierde casi nada de lo que importa: los mapas reconstruidos a partir de un estado de botón idealizado más la trayectoria de cursor de una persona fueron acertados por los replays de otros jugadores con la misma frecuencia que los mapas reconstruidos a partir de una descripción que conoce los objetos (97,9 % frente a 98,0 %). Usar en su lugar los estados reales del botón de los jugadores lo hizo caer al 78,5 %: las pulsaciones reales tienen demasiado ruido para aprender de ellas, y por eso el token de botón está idealizado.

Los datos de entrenamiento

Datos de entrenamiento de OsuGAI v1
Valor
Charts procesados117.918
Canciones25.928
Ventanas de entrenamiento11,85 millones
Charts de entrenamiento / validación / reserva117.474 / 362 / 82
Star rating, percentil 10 / 50 / 901,98 / 3,69 / 5,86

El corpus son mapas de osu! standard ranked, approved y loved: 117.918 de 117.920 charts se convirtieron correctamente. Los conjuntos de validación y de reserva están separados por canción: ninguna de sus canciones aparece en el entrenamiento. Como con ManiaGAI, el timing de cada chart se trasladó primero a la cuadrícula de nuestro propio detector de timing, para que el modelo se entrene con el mismo tipo de cuadrícula que recibe al generar. No se descartó ningún chart por ser difícil.

De dónde salen las posiciones del cursor: el replay de Auto de osu!lazer

Un archivo de mapa dice dónde están los objetos, no cómo se mueve el cursor entre ellos. Derivamos los tokens espaciales del replay de Auto de osu!lazer, el jugador perfecto integrado. Portamos su lógica de cursor a Python y la comprobamos contra el juego real en 20 mapas: 264.716 frames, el mismo número de frames, cero discrepancias de botón o de apilado y una diferencia media de 0,014 píxeles. Los mapas decodificados a partir de las trayectorias de cursor de Auto fueron acertados por replays humanos de otros jugadores el 99,7 % de las veces en un benchmark de 91 mapas.

Una advertencia honesta: Auto no es un humano. Sigue la trayectoria exacta de cada slider, así que su cursor se acerca a “la geometría original del slider escrita como posiciones”: el 72 % de las trayectorias originales de los sliders se pueden recuperar a partir de Auto con un margen de 4 píxeles, frente al 1 % a partir de un solo replay humano. Por tanto, OsuGAI v1 aprende dónde coloca las cosas un mapper, no cómo se mueve realmente la gente.

La arquitectura

  1. Música
  2. Cuadrícula de timing
  3. Planner
  4. Noter
  5. Decodificador
  6. .osu / .osz

OsuGAI funciona con el mismo motor que ManiaGAI (descrito en Planner y Noter), con las partes específicas del modo cambiadas:

  • Planner (reutilizado). Un pequeño modelo de difusión, sin cambios respecto a nuestro trabajo anterior en osu! standard, planifica cada parte de la canción antes de que exista ningún objeto: su nivel de estrellas y una descripción del estilo (proporción de sliders, carácter de los ángulos, irregularidad del espaciado, espaciado de streams y ritmo).
  • Noter (nuevo). Un transformer de estilo MaskGIT de unos 64,1 millones de parámetros rellena los cinco tokens de cada beat, siguiendo el plan, el audio y los ajustes de dificultad (circle size, approach rate, overall difficulty y slider velocity). Además de la precisión en la posición exacta, su entrenamiento da crédito parcial a una posición que cae a menos de 16 píxeles del objetivo.
  • Decodificador (basado en reglas, con soporte para repeticiones). Vuelve a convertir el gameplay en objetos: una pulsación se convierte en un círculo; una pulsación larga se convierte en un spinner cuando el cursor gira alrededor del centro durante al menos 1,5 beats y, si no, en un slider: la línea, el arco o la curva más simple que mantiene la bola del slider cerca de la trayectoria prevista. Los retrocesos claros y con un timing regular se convierten en un slider de repetición. Los nuevos combos siguen una regla fija.

Entrenamiento: cuatro rondas

El Noter partió de nuestro modelo anterior de osu! standard y se entrenó en cuatro rondas de cuatro epochs con tiempo limitado (unos 46 minutos cada una): unas 14 horas en total en una sola RTX 4070 Ti SUPER (16 GB), con un pico de unos 6 GB de memoria de GPU. Tras cada ronda generamos un conjunto de evaluación: 8 canciones reservadas × 22 configuraciones = 176 mapas.

Rondas de entrenamiento de OsuGAI v1
RondaPérdida de validaciónMapas válidos★ medidas para objetivos de 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 (publicada)2,9570176/1762,40 / 4,62 / 7,22
  • La pérdida de validación bajó de 3,1389 a 2,9570 a lo largo de las cuatro rondas.
  • Validez estructural: los 176 mapas de evaluación fueron mapas válidos de osu! standard en todas las rondas: objetos legales, sin violaciones de ranura.
  • La dificultad y el estilo responden: el star rating medido subió con el objetivo en 8 de 8 canciones, y cada uno de los cuatro ejes de estilo movió el mapa en la dirección correcta en 8 de 8 canciones, aunque seguir el plan sección por sección todavía es un punto débil.
  • Determinista: la misma canción con la misma semilla da archivos .osu idénticos byte a byte.

Velocidad. En esa GPU de desarrollo, ocho dificultades de Flower Dance (4:22) tardaron unos 16–18 segundos en las etapas cronometradas: preparación del audio, timing, características del audio, planificación y unos 11–12 segundos de generación de notas; decodificar y escribir los archivos añade de media unos 0,6 segundos por mapa, en la CPU. Es un benchmark local: en producción se ejecuta en otra GPU, en la nube, y todavía no hemos medido la latencia de OsuGAI en producción.

Limitaciones

Un mapa válido no es lo mismo que un mapa divertido, y ninguna de las cifras anteriores dice que los mapas de OsuGAI sean buenos para jugar de forma competitiva. Lo que sabemos que falla:

  • Dificultad que se pasa del objetivo. Los mapas salen más difíciles que el objetivo, y mucho más difíciles en lo más alto: en Flower Dance, objetivos de 7,43, 8,71 y 10 midieron 9,28, 13,49 y 13,99 estrellas. Por eso la web solo ofrece objetivos de ★1 a ★6 y siempre muestra el star rating medido.
  • Sliders que se cruzan a sí mismos. El 3,3 % de los sliders generados en la ronda final se autointersecan (2,4 % tras la primera ronda), frente al 0,1 % en los mapas originales.
  • Artefactos en la geometría de los sliders. Algunos sliders chocan con el límite de velocidad (2,8 % en la ronda final), y los sliders de repetición son más raros que en los mapas humanos (6,1 % de los sliders frente al 21 %).
  • Supervisión con Auto. Las trayectorias del cursor son las de Auto, no las de personas: el modelo aprende la colocación de objetos, no el movimiento humano.
  • Desbordamiento y sustitución en el vocabulario. El 0,58 % de los beats de entrenamiento necesita más de cuatro posiciones; solo se conservan las cuatro primeras. El 0,13 % de los beats queda fuera de los 4096 patrones de botón y usa el más cercano. Los mapas muy densos son los más afectados.
  • Todavía no hay un testeo amplio por personas. Todas las comprobaciones hasta ahora son automáticas o se basan en replays grabados. La beta es donde eso empieza.

Lo que viene

  • Mejor calibración de la dificultad: objetivos en los que puedas confiar, y el rango completo de estrellas de vuelta.
  • Geometría de sliders más limpia: menos autocruces y velocidades limitadas, y repeticiones más naturales.
  • Datos de gameplay humano: aprender cómo se mueve la gente, no solo dónde están los objetos.
  • Control de estilo más fuerte: barras que el mapa siga sección por sección, no solo de media.
  • Más modos de osu!: osu! taiko y osu! catch son los siguientes en la hoja de ruta.

¿Nuevo en el modo? ¿Qué es osu! standard? explica el juego en sí; la página de tecnología trata el motor que OsuGAI comparte con ManiaGAI.