Cómo reemplazamos el explorador deportivo con una red neuronal


Sí, de hecho, pudimos reemplazar la red neuronal del explorador deportivo y comenzamos a recopilar automáticamente datos sobre el juego. Y ahora sabemos más sobre el evento deportivo que el público presente y, a veces, el juez.

Nosotros ( Constanta ) nos especializamos en el desarrollo de productos informáticos de apuestas: aplicaciones móviles, sitios, y recientemente estamos desarrollando proyectos en el campo de la visión por computadora y el aprendizaje automático. Uno de ellos será discutido.

Mientras los atletas luchan por grandes y pequeñas victorias, el corredor de apuestas necesita saber el curso de los eventos en tiempo real para recalcular los coeficientes, según los cuales, de hecho, se aceptan apuestas. Para hacer esto, los exploradores deportivos directamente en los patios de recreo recolectan y transmiten una gran cantidad de datos usando una aplicación especial en un teléfono inteligente. Un explorador es la misma persona que todos nosotros, por lo que los riesgos asociados con el factor humano surgen naturalmente. Nuestro objetivo es minimizarlos, aumentando simultáneamente el volumen y la eficiencia de la recopilación y transmisión de datos, además de reducir el costo de todo este trabajo. Una pelota pequeña vuela sobre una mesa de tenis o una pelota en un campo de fútbol: el aspecto técnico de la implementación de un sistema de visión por computadora para recopilar datos no tiene diferencias conceptuales. Decidimos que era más interesante construir de inmediato un sistema para un juego con una gran cantidad de bolas interactivas, como en el billar.


Necesito las coordenadas y velocidades de todas tus bolas y tu taco.

Tenga en cuenta que en el análisis de muchos juegos deportivos para determinar correctamente el resultado, debe realizar un seguimiento preciso de la cadena de eventos. De ahí las altas exigencias en la fiabilidad de los componentes responsables de determinar estos eventos. Expliquemos con un ejemplo simple: si en promedio, los jugadores ruedan todas las bolas en los bolsillos por 20 golpes, entonces con la confiabilidad de determinar el resultado de un golpe del 99%, la probabilidad de determinar el ganador en el sorteo es solo del 82% (0.99 20 ≈0.817). El partido dura hasta cinco victorias de uno de los jugadores, es decir, de 5 a 9 empates en total, en promedio 7. Por lo tanto, en promedio, con tal confiabilidad en la determinación de eventos, se obtiene el resultado correcto del partido con una probabilidad de solo alrededor del 24% (0.817 7 ≈0, 24) ¡Pero inicialmente la probabilidad de error fue solo del 1%!

Nueve piscina


De toda la variedad de juegos de billar, considere el Grupo 9. El ganador es el jugador que ha bloqueado la pelota con el número 9 en el bolsillo. Inicialmente, el "nueve" se encuentra en el centro de un rombo de bolas de colores. La bola que apunta sobre la cual la bola blanca debe golpear es la bola con el número más bajo en la mesa. Si un jugador no pudo anotar una bola o falta de un solo color, por ejemplo, no golpeó la bola que apuntaba o anotó una bola blanca en el hoyo, el movimiento va al oponente. Para anotar correctamente un punto, es necesario determinar el golpe de las bolas en los bolsillos y todos los eventos que conducen a un cambio de jugador.

Visión por computadora


Primero, hablemos sobre cómo una red neuronal recibe datos. Flujo de información de entrada: transmisión de video desde una cámara ubicada sobre la mesa y disparo a una frecuencia de 60 cuadros por segundo.


Un ejemplo de un cuadro de una transmisión de video procesada por el sistema.

Una etapa clave en el procesamiento de una transmisión de video por una red neuronal es la segmentación semántica. Esta es una tarea clásica de la visión por computadora, que consiste en el hecho de que el algoritmo debe asignar píxeles de imagen a una o más clases. En pocas palabras, en los cuadros de video debe determinar qué es qué. La red neuronal produce "máscaras", resaltando píxeles relacionados, por ejemplo, con una pelota o jugador. Después de pasar por una serie de algoritmos de posprocesamiento, la "máscara" de las bolas se convierte en coordenadas. Según ellos, después de alisar con un filtro, para cada bola se determina la velocidad y la trayectoria del movimiento. En esta etapa, se rastrean eventos de bajo nivel o intermedios, como colisiones de bolas entre sí y con los lados de la mesa. Los datos recibidos se envían al módulo de procesamiento de reglas, que implementa toda la lógica del juego. Al final, se lo da al consumidor final, es decir. corredor de apuestas, eventos de alto nivel: llevar bolas a los bolsillos, faltas, transiciones de movimientos y, de hecho, el resultado del juego.


El esquema general del sistema.

Para resolver el problema, en primer lugar, es necesario encontrar la ubicación de la mesa en el marco y todas las bolas en él. Otro participante importante en la acción es el taco, es él quien determina la dirección del golpe y, en consecuencia, el camino de la bola blanca. Los jugadores se inclinan sobre la mesa, cubriéndola parcialmente de la cámara. Desde el punto de vista del análisis del juego, son "objetos extraños", como un soporte para pelotas, así como teléfonos móviles, guantes, servilletas y otras cosas que, por voluntad de los jugadores, aparecen a los lados de la mesa. Por lo tanto, se obtienen varias clases objetivo para la segmentación semántica de imágenes: una tabla, sus lados, bolsillos, una señal, objetos extraños y, por supuesto, bolas. Además, cada bola está representada por una clase separada, dependiendo de su color.

Para la segmentación semántica, se utiliza una red neuronal totalmente convolucional con arquitectura LinkNet-34 . Funciona relativamente rápido y se ha demostrado en varias tareas de "combate" de las competiciones de visión por computadora. Para determinar el conjunto de clases anterior, solo se usa una red neuronal, que resuelve todos los problemas de la visión por computadora.


Arquitectura de red LinkNet-34 (ver arXiv ).

Se ingresan imágenes y se obtiene una pila de "máscaras" de todas las clases requeridas en la salida. Las "máscaras de predicción" son matrices bidimensionales de números con valores del 0 al 1. El valor de cada elemento de la "máscara" corresponde a la confianza de la red de que el píxel correspondiente pertenece a la clase de esta "máscara". Para la clasificación final de píxeles, las predicciones obtenidas se binarizan mediante un filtro de umbral.

Puede entrenar una red neuronal para clasificar píxeles en una gran cantidad de ejemplos con las correspondientes "máscaras". Para hacer esto, recopilamos muchos videos, divididos en cuadros, y el departamento de marcado preparó manualmente "máscaras" para ellos. En casos difíciles, se requerían conjuntos de datos adicionales. Por ejemplo, cuando una pelota "se zambulle" en un bolsillo o se para cerca del lado de la mesa, una sombra cae sobre ella, por lo que los colores se ven diferentes. O, cuando un jugador rompe un rombo, las bolas vuelan rápidamente a lo largo de caminos complejos, por lo que sus imágenes se ven borrosas. Si la red neuronal ha "visto" algunos de estos ejemplos, la clasificación correcta será difícil.


Un ejemplo de una imagen y su marcado correspondiente. La tarea de la red neuronal es obtener tales "máscaras" de la imagen de entrada.

Rápido, más rápido, incluso más rápido ...


El usuario final de datos necesita información en tiempo real (o incluso mejor, más rápido que en tiempo real). Se utilizaron varias técnicas para acelerar la red neuronal, como combinar la normalización de paquetes con convolución 2D (BatchNorm Fusion), que le permite obtener una red equivalente sin varias capas. La preparación y carga de un nuevo marco en paralelo con el procesamiento del anterior en la tarjeta de video también da un buen resultado. Además, parte de las operaciones preparatorias con personal y el procesamiento posterior de las "máscaras" se realizan en gpu. Incluso la idea simple ayudó a reducir el tiempo de procesamiento total para cada cuadro: transferir el resultado de la red desde la tarjeta de video a la RAM después de la binarización en forma de uint8 en lugar del recibido desde la red float32.

Como resultado, la segmentación semántica de una trama con todo el procesamiento previo y posterior requerido toma un promedio de solo 17 ms. Y para el funcionamiento del sistema, solo una tarjeta de video para juegos es suficiente.

¿Hubo un choque?


Determinamos las coordenadas de las bolas mediante "máscaras", pero primero debemos excluir lo que solo se parece a una pelota, por ejemplo, rayas redondas en las camisetas de los jugadores. Aquí entran en juego las heurísticas: la forma y el tamaño de las bolas, su posición con respecto al pasado, es bien conocida. Además, si todo está en orden con la "máscara", su centroide se toma para su procesamiento.


Jugador de billar en los terribles sueños de los desarrolladores.

Es extraño a primera vista, pero el hecho es que el resultado de determinar la posición de las bolas puede diferir entre cuadros incluso con bolas inmóviles. La explicación es simple: el "ruido" de un video real, artefactos de compresión de transmisión de video, que, junto con un error en la determinación de la posición de las imágenes borrosas de las bolas en movimiento, necesita suavizar los resultados.

Basado en las coordenadas de las bolas recibidas de la red y determinadas en los cuadros anteriores, la velocidad se estima como una derivada numérica. El número de puntos tomados en cuenta y el intervalo entre ellos se seleccionan de forma adaptativa durante la operación del sistema, dependiendo de la disponibilidad de datos y eventos como colisiones. Luego, la información sobre la posición y la velocidad de las bolas se envía al filtro de punto sigma de Kalman . Le permite suavizar datos ruidosos, lo cual es especialmente importante para determinar la velocidad y su dirección. Además, el resultado del modelo dinámico de este puede usarse para predecir el futuro cercano.


Demostración de suavizar la determinación de la posición y la velocidad de las bolas por el filtro Kalman.
Izquierda: sin formato: el resultado de la medición directa, los vectores de las bolas corresponden a la velocidad, los números indican una estimación de la velocidad; UKF: resultado del filtro.
Derecha: un ejemplo de suavizar la dirección de la velocidad de una pelota con un filtro Kalman. El color azul muestra los resultados de la medición, rojo: el resultado del filtrado. Saltos repentinos en dirección corresponden a colisiones de pelota.

Los datos sobre el estado y la trayectoria de las bolas permiten determinar la ocurrencia del llamado evento de bajo nivel, incluso cuando cayó "entre cuadros".



Las bolas se mueven tan rápido durante un golpe que a menudo no hay un cuadro que muestre directamente un evento, por ejemplo, una colisión de bolas. Por lo tanto, para todo tipo de interacciones (colisión de bolas entre sí, con el tablero o caer en el hoyo), primero se construye una lista de posibles eventos. Hay dos criterios. Primero, el arreglo mutuo críticamente cercano de las bolas. Cuando se mueve lentamente, hay un gran error relativo al determinar la velocidad y la trayectoria, por lo tanto, la distancia entre los objetos que interactúan es importante. En segundo lugar, a una alta velocidad de movimiento de las bolas, los posibles eventos están determinados por la intersección de las trayectorias obtenidas del modelo dinámico. Este enfoque ofrece una bonificación muy buena: la capacidad de predecir con un poco de anticipación el probable golpe de la pelota en el bolsillo.


Fotogramas secuenciales de la transmisión de video durante la ruptura inicial de un rombo de las bolas. Sin un modelo que describa las trayectorias de las bolas, es difícil determinar a qué bola se enfrentó la bola blanca.

Un cambio en la dirección y magnitud del vector de velocidad nos permite juzgar que ha ocurrido un evento, es decir, una colisión. En el caso de que la pelota ruede en un bolsillo, "desaparece". Pero hay un punto importante: es necesario usar datos sobre su trayectoria y verificar que la pelota fue golpeada con precisión y que no desapareció del campo de visión de la cámara debido al hecho de que la mano de un jugador u otro objeto estaba accidentalmente por encima de ella.

¿Y si algo salió mal? Digamos que algunos de los eventos cayeron debido a una pérdida de cuadros o la figura de un jugador colgando sobre la mesa. Tales omisiones son críticas para la lógica del juego. Guarda un sistema de autocorrección heurístico que aumenta la estabilidad del sistema. Por ejemplo, si se detecta un golpe en la bola blanca y la bola objetivo cae dentro del agujero, pero no se detectan colisiones de bola blanca y otras bolas permanecen inmóviles, es lógico agregar una colisión de bola blanca con la bola objetivo.

Entonces, ¿estamos jugando o no?


Las bolas ruedan, chocan, caen en los bolsillos ... ¿Pero el juego realmente va en ese momento? O, por el contrario, todo en la mesa parece inquebrantable ... ¿Entonces el juego se detuvo? La respuesta correcta a estas preguntas es probablemente tan importante como la definición de colisiones. Cuando un jugador se prepara para un golpe, lo reflexiona, apunta, no hay movimiento. Pero sucede, y viceversa, en los momentos que no son del juego, la vida en la mesa puede ser muy dinámica: las bolas obstruidas se mueven de un bolsillo a otro, la bola blanca puede rodar alrededor de la mesa cuando se instala después de una falta, y esto se hace incluyendo la punta de la señal (¡muy similar a un golpe! ) Si el final del golpe actual se puede determinar fácilmente: después de un golpe correcto, todas las bolas dejan de moverse, entonces, al principio, todo no está tan claro. Por supuesto, puede entrenar a la red neuronal para detectar eventos en el video, incluidos golpes reales en la bola blanca. Y puede hacer un conjunto de heurísticas que analizan la posición y el ángulo del taco, la trayectoria y la velocidad de sus extremos y la trayectoria de la bola blanca después del supuesto impacto. Fuimos por el segundo camino, y el resultado fue un algoritmo muy rápido y confiable que determina el estado actual del juego.


El sistema está tratando de entender si el juego comenzó o no.

¿Y quién ganó finalmente?


Todos los datos sobre eventos de bajo nivel (un golpe en la bola blanca, la posición y la colisión de las bolas, cayendo en los bolsillos) se envían al módulo, que, según su secuencia, determina que se ha producido una falta o que la bola ha caído correctamente en el hoyo, el movimiento ha pasado o el juego termina. El módulo imparcial puntúa y anuncia al ganador. Su peculiaridad es que funciona sin autocorrecciones ni heurísticas, simplemente aplicando formalmente las reglas del juego. El bloque de reglas se puede reemplazar por completo, lo que le permite adaptarlo a las reglas locales del torneo sin una intervención significativa en el sistema o usarlo para procesar otros tipos de juegos de billar.
Como los vehículos no tripulados aún no se han librado por completo del ingeniero de pruebas en la cabina, que controla la seguridad, nuestro módulo de reglas permite el control manual externo a través de la interfaz web. Se puede requerir intervención si el sistema automático falla. Además, debe ingresar manualmente los datos que no están en la transmisión de video: sobre un jugador novato, éxitos especiales que se anuncian durante el juego por voz, etc. Una persona puede monitorear múltiples juegos a la vez.

Como funciona


Después de un exitoso lanzamiento y configuración del sistema, no solo comenzamos a recibir los datos requeridos, sino que también descubrimos muchas cosas interesantes. Entonces, a veces el juez, al estar en la mesa, no puede determinar con certeza si la bola blanca golpeó la bola que apunta u otra que está cerca. Si bien la visión objetiva de nuestro sistema nos permite ver cómo se desarrolló realmente la situación. Además, el sistema recopila una gran cantidad de información útil para su posterior análisis, que una persona simplemente no puede determinar y transmitir en tiempo real: la posición y la velocidad de las bolas, los parámetros de los golpes de cada jugador.


Actualmente, el sistema funciona y es utilizado por la casa de apuestas. En el futuro, se planea mejorar el sistema, incluida la adición de identificación automática de jugadores, la determinación automática de los resultados del primer golpe.


Visualización técnica de cómo funciona el sistema. La bola al lado de la "bola blanca" indica a qué primera bola se enfrentó la bola blanca; "Estado" - el estado del sistema: puede ser "esperar" - hasta que el jugador haya golpeado, y "jugar" - mientras las bolas están en movimiento; "Jugador" - jugador actual; Los números alrededor de las bolas indican la velocidad estimada en cm / s.

Source: https://habr.com/ru/post/es430030/


All Articles