
Sim, de fato, fomos capazes de substituir a rede neural dos olheiros e começamos a coletar dados automaticamente sobre o jogo. E agora sabemos mais sobre o evento esportivo do que o público presente e, às vezes, o juiz.
Nós (
Constanta ) nos especializamos no desenvolvimento de produtos de TI para apostas: aplicativos móveis, sites e, recentemente, estamos desenvolvendo projetos no campo da visão por computador e aprendizado de máquina. Um deles será discutido.
Enquanto os atletas lutam por grandes e pequenas vitórias, a casa de apostas precisa conhecer o curso dos eventos em tempo real, a fim de recalcular os coeficientes, segundo os quais, de fato, as apostas são aceitas. Para fazer isso, olheiros esportivos diretamente nos playgrounds coletam e transmitem uma grande quantidade de dados usando um aplicativo especial em um smartphone. Um batedor é a mesma pessoa que todos nós, então os riscos associados ao fator humano surgem naturalmente. Nosso objetivo é minimizá-los, aumentando simultaneamente o volume e a eficiência da coleta e transmissão de dados, além de - reduzir o custo de todo esse trabalho. Uma pequena bola voa sobre uma mesa de tênis ou uma bola em um campo de futebol - o lado técnico da implementação de um sistema de visão computacional para coleta de dados não apresenta diferenças conceituais. Decidimos que era mais interessante construir imediatamente um sistema para um jogo com um grande número de bolas em interação, como no bilhar.
Preciso das coordenadas e velocidades de todas as suas bolas e seu taco.Observe que, na análise de muitos jogos esportivos para determinar corretamente o resultado, você deve acompanhar com precisão a cadeia de eventos. Daí a alta demanda pela confiabilidade dos componentes responsáveis pela determinação desses eventos. Vamos explicar em um exemplo simples: se, em média, os jogadores rolam todas as bolas nos bolsos por 20 tacadas, então com a confiabilidade de determinar o resultado de um acerto de 99%, a probabilidade de determinar o vencedor no sorteio é de apenas 82% (0,99
20 ≈0,817). A partida dura até cinco vitórias de um dos jogadores, ou seja, de 5 a 9 empates ocorrem em média 7. Assim, em média, com tanta confiabilidade na determinação de eventos, o resultado correto da partida é obtido com uma probabilidade de apenas cerca de 24% (0,817
7 ≈0, 24) Mas inicialmente a probabilidade de erro era de apenas 1%!
Piscina nove
De toda a variedade de jogos de bilhar, considere o Pool-9. O vencedor é o jogador que colocou a bola com o número 9 no bolso. Inicialmente, o "nove" está localizado no centro de um losango de bolas coloridas. A bola em que a bola branca deve bater é a bola com o número mais baixo da mesa. Se um jogador não conseguiu marcar uma bola ou falta de uma única cor, por exemplo, não acertou a bola apontada ou marcou uma bola mestra no buraco, a jogada será direcionada ao oponente. Para marcar corretamente um ponto, é necessário determinar o acerto das bolas nos bolsos e todos os eventos que levaram a uma mudança de jogador.
Visão computacional
Primeiro, vamos falar sobre como uma rede neural recebe dados. Fluxo de informações de entrada - transmissão de vídeo de uma câmera localizada acima da mesa e filmagem a uma frequência de 60 quadros por segundo.
Um exemplo de quadro de um fluxo de vídeo processado pelo sistema.Um estágio chave no processamento de um fluxo de vídeo por uma rede neural é a segmentação semântica. Essa é uma tarefa clássica da visão computacional, consistindo no fato de que o algoritmo deve atribuir pixels da imagem a uma ou mais classes. Simplificando, nos quadros de vídeo, você precisa determinar o que é o quê. A rede neural produz "máscaras", destacando pixels relacionados, por exemplo, a uma bola ou jogador. Depois de passar por uma série de algoritmos de pós-processamento, a "máscara" das bolas se transforma em coordenadas. Segundo eles, após a suavização por um filtro, para cada bola são determinadas a velocidade e a trajetória do movimento. Nesse estágio, eventos de nível baixo ou intermediários, como colisões de bolas entre si e com os lados da mesa, são rastreados. Os dados recebidos são enviados para o módulo de processamento de regras, que implementa toda a lógica do jogo. No final, ele entrega ao consumidor final, ou seja, casa de apostas, eventos de alto nível: jogar bolas nos bolsos, faltas, transições de jogadas e, de fato, o resultado do jogo.
O esquema geral do sistema.Para resolver o problema, antes de tudo, é necessário encontrar a localização da mesa no quadro e todas as bolas nele. Outro participante importante na ação é o taco, é ele quem determina a direção do golpe e, consequentemente, a trajetória da bola mestra. Os jogadores se inclinam sobre a mesa, cobrindo-a parcialmente da câmera. Do ponto de vista da análise do jogo, são “objetos estranhos”, como estandes de bolas, além de celulares, luvas, guardanapos e outras coisas que, pela vontade dos jogadores, aparecem nas laterais da mesa. Assim, várias classes-alvo são obtidas para a segmentação semântica de imagens: uma tabela, seus lados, bolsos, uma sugestão, objetos estranhos e, é claro, bolas. Além disso, cada bola é representada por uma classe separada, dependendo da cor.
Para segmentação semântica, é
usada uma rede neural totalmente convolucional com arquitetura
LinkNet-34 . Ele funciona de forma relativamente rápida e provou-se em várias tarefas de "combate" de competições de visão computacional. Para determinar o conjunto de classes acima, apenas uma rede neural é usada, o que resolve todos os problemas da visão computacional.
Arquitetura de rede LinkNet-34 (consulte arXiv ).As imagens são inseridas e uma pilha de "máscaras" de todas as classes necessárias é obtida na saída. “Máscaras de previsão” são matrizes bidimensionais de números com valores de 0 a 1. O valor de cada elemento da “máscara” corresponde à confiança da rede de que o pixel correspondente pertence à classe dessa “máscara”. Para a classificação final dos pixels, as previsões obtidas são binarizadas por um filtro de limite.
Você pode treinar uma rede neural para classificar pixels em um grande número de exemplos com as "máscaras" correspondentes. Para fazer isso, coletamos muitos vídeos, divididos em quadros, e o departamento de marcação preparou manualmente “máscaras” para eles. Em casos difíceis, eram necessários conjuntos de dados adicionais. Por exemplo, quando uma bola “mergulha” em um bolso ou fica perto dela, próximo ao lado da mesa, uma sombra cai sobre ela, por causa da qual as cores parecem diferentes. Ou, quando um jogador quebra um losango, as bolas voam rapidamente por caminhos complexos, e é por isso que suas imagens são borradas. Se a rede neural "viu" alguns desses exemplos, a classificação correta será difícil.
Um exemplo de uma imagem e sua marcação correspondente. A tarefa da rede neural é obter essas "máscaras" da imagem de entrada.Rápido, mais rápido, ainda mais rápido ...
O usuário final dos dados precisa de informações em tempo real (ou melhor ainda - mais rápido que em tempo real). Várias técnicas foram usadas para acelerar a rede neural, como combinar a normalização de pacotes com convolução 2D (BatchNorm Fusion), que permite obter uma rede equivalente sem várias camadas. A preparação e carregamento de um novo quadro em paralelo com o processamento do anterior na placa de vídeo também fornece um bom resultado. Além disso, parte das operações preparatórias com pessoal e o pós-processamento de "máscaras" são executados na gpu. Mesmo uma idéia simples ajudou a reduzir o tempo total de processamento de cada quadro - transferir o resultado da rede da placa de vídeo para a RAM após a binarização na forma de uint8, em vez do que foi recebido da rede float32.
Como resultado, a segmentação semântica de um quadro com todo o pré e pós-processamento necessário leva em média apenas 17 ms! E para a operação do sistema, apenas uma placa de vídeo de jogos é suficiente.
Houve um choque?
Determinamos as coordenadas das bolas por "máscaras", mas primeiro precisamos excluir o que apenas se assemelha a uma bola, por exemplo, listras redondas nas camisetas dos jogadores. Aqui as heurísticas entram em jogo: a forma e o tamanho das bolas, sua posição em relação ao passado, é bem conhecida. Além disso, se tudo estiver em ordem com a "máscara", seu centróide será levado para processamento.
Jogador de bilhar nos sonhos terríveis dos desenvolvedores.É estranho à primeira vista, mas o fato é que o resultado da determinação da posição das bolas pode diferir entre os quadros, mesmo com bolas imóveis. A explicação é simples - o "ruído" de um vídeo real, artefatos de compressão de fluxo de vídeo, que, juntamente com um erro na determinação da posição das imagens borradas de bolas em movimento, leva à necessidade de suavizar os resultados.
Com base nas coordenadas das bolas recebidas da rede e determinadas nos quadros anteriores, a velocidade é estimada como uma derivada numérica. O número de pontos levados em consideração e o intervalo entre eles são selecionados de forma adaptável durante a operação do sistema, dependendo da disponibilidade de dados e eventos, como colisões. Em seguida, as informações sobre a posição e a velocidade das bolas são enviadas para o
filtro de sigma-ponto da
Kalman . Ele permite suavizar dados ruidosos, o que é especialmente importante para determinar a velocidade e sua direção. Além disso, o resultado do modelo dinâmico pode ser usado para prever o futuro próximo.
Demonstração de suavização da determinação da posição e velocidade das bolas pelo filtro Kalman.
Esquerda: Bruta: resultado da medição direta, os vetores das bolas correspondem à velocidade, os números indicam uma estimativa da velocidade; UKF: resultado do filtro.
Direita: um exemplo de suavização da direção da velocidade de uma bola com um filtro Kalman. A cor azul mostra os resultados da medição, vermelho - o resultado da filtragem. Saltos repentinos na direção correspondem a colisões de bola.Os dados sobre o estado e a trajetória das bolas permitem determinar a ocorrência do chamado evento de baixo nível, mesmo quando este caiu "entre os quadros".

Bolas se movem tão rápido durante um acerto que muitas vezes não há um quadro que mostre diretamente um evento, por exemplo, uma colisão de bolas. Portanto, para todos os tipos de interações (colisão de bolas entre si, com o tabuleiro ou queda no buraco), uma lista de possíveis eventos é primeiro construída. Existem dois critérios. Primeiro, o arranjo mútuo crítico das bolas. Ao se mover lentamente, há um grande erro relativo na determinação da velocidade e da trajetória; portanto, a distância entre objetos em interação é importante. Em segundo lugar, a uma alta velocidade de movimento das bolas, os possíveis eventos são determinados pela interseção das trajetórias obtidas no modelo dinâmico. Essa abordagem oferece um bônus muito bom: a capacidade de prever com um pouco de antecedência o provável golpe da bola no bolso.
Quadros sequenciais do fluxo de vídeo durante a quebra inicial de um losango de bolas. Sem um modelo que descreva as trajetórias das bolas, é difícil determinar qual bola a bola branca enfrentou.Uma mudança na direção e magnitude do vetor de velocidade nos permite julgar que um evento, ou seja, uma colisão, ocorreu. No caso em que a bola rolou no bolso, ela "desapareceu". Mas há um ponto importante: é necessário usar dados em sua trajetória e verificar se a bola foi martelada com precisão e não desapareceu do campo de visão da câmera devido ao fato de a mão de um jogador ou outro objeto estar acidentalmente acima dela.
E se algo desse errado? Digamos que alguns dos eventos tenham ocorrido devido a uma perda de quadros ou à figura de um jogador pendurado sobre a mesa. Tais omissões são críticas para a lógica do jogo. Salva um sistema de correção automática heurístico que aumenta a estabilidade do sistema. Por exemplo, se um golpe na bola mestra é detectado e a bola mira cai no buraco, mas nenhuma colisão é detectada e outras bolas permanecem imóveis, é lógico adicionar uma colisão com a bola mira.
Então, estamos jogando ou não?
Bolas rolam, colidem, caem nos bolsos ... Mas o jogo realmente está indo naquele momento? Ou, pelo contrário, tudo na mesa parece inabalável ... Então o jogo parou? A resposta correta para essas perguntas é provavelmente tão importante quanto a definição de colisão. Quando um jogador se prepara para um golpe, pondera, mira, não há movimento. Mas acontece, e vice-versa, em momentos que não são de jogo, a vida na mesa pode ir muito dinamicamente: bolas entupidas são movidas de um bolso para outro, a bola branca pode ser jogada ao redor da mesa quando é instalada após uma falta, e isso é feito incluindo a ponta da bola (muito semelhante a um golpe! ) Se o final do acerto atual puder ser facilmente determinado - após um acerto correto, todas as bolas param de se mover, então, no início, tudo não está tão claro. Obviamente, você pode treinar a rede neural para detectar eventos no vídeo, incluindo ataques reais na bola branca. E você pode fazer um conjunto de heurísticas que analisam a posição e o ângulo do taco, a trajetória e velocidade de suas extremidades e a trajetória da bola após o suposto impacto. Fomos pelo segundo caminho, e o resultado foi um algoritmo muito rápido e confiável que determina o estado atual do jogo.
O sistema está tentando entender se o jogo começou ou não.E quem acabou vencendo?
Todos os dados sobre eventos de baixo nível (um acerto na bola, a posição e a colisão das bolas, caindo nos bolsos) são enviados para o módulo, que determina a partir de sua sequência que uma falta ocorreu ou a bola caiu corretamente no buraco, a jogada passou ou o jogo terminou. O módulo imparcial pontua e anuncia o vencedor. Sua peculiaridade é que ele funciona sem nenhuma correção automática e heurística, simplesmente aplicando formalmente as regras do jogo. O bloco de regras pode ser completamente substituído, o que permite adaptá-lo às regras locais do torneio sem intervenção significativa no sistema ou usá-lo para processar outros tipos de jogos de bilhar.
Como os veículos não tripulados ainda não se livraram completamente do engenheiro de teste na cabine, que monitora a segurança, nosso módulo de regras permite o controle manual externo via interface da web. Pode ser necessária uma intervenção se o sistema automático falhar. Além disso, você precisa inserir manualmente dados que não estão no fluxo de vídeo: sobre um player iniciante, hits especiais que são anunciados durante o jogo por voz, etc. Uma pessoa pode monitorar vários jogos ao mesmo tempo.
Como isso funciona
Após um lançamento e configuração bem-sucedidos do sistema, não apenas começamos a receber os dados necessários, mas também descobrimos muitas coisas interessantes. Portanto, às vezes o juiz, estando na mesa, não pode determinar com certeza se a bola branca acertou a bola mira ou outra que está por perto. Enquanto a visão objetiva do nosso sistema nos permite ver como a situação realmente se desenvolveu. Além disso, o sistema coleta muitas informações úteis para análises posteriores, que uma pessoa simplesmente não é capaz de determinar e transmitir em tempo real: a posição e a velocidade das bolas, os parâmetros da sugestão soprados por cada um dos jogadores.

Atualmente, o sistema funciona e é usado pela casa de apostas. No futuro, está planejado melhorar o sistema, incluindo a adição de identificação automática de jogadores, determinação automática dos resultados do primeiro ataque.
Visualização técnica de como o sistema funciona. A bola ao lado da “bola branca” indica qual a primeira bola que a bola branca enfrentou; "Estado" - o estado do sistema: pode ser "esperar" - até o jogador bater e "jogar" - enquanto as bolas estão em movimento; "Jogador" - jogador atual; os números ao redor das bolas indicam a velocidade estimada em cm / s.