Transformamos um robô aspirador de pó em um soldado universal

Tudo começou com uma paixão por aprendizado profundo, redes neurais e mais abaixo na lista. Eu olhei para alguns cursos, participei de uma competição no Kaggle ... "o que mais fazer?". Em seguida, um aspirador de pó robô (Xiaomi Vacuum Cleaner V1) rastejou por sua própria empresa e lançou uma idéia interessante ...



Introdução longa


Este artigo é um resumo intermediário de um período de vida específico. Espero que seja útil para pessoas que desejam se envolver em aprendizado de máquina, mas ainda não decidiram qual direção desenvolver. Há quase um ano, mudei mais uma vez meu trabalho e local de residência. Em um novo local, eles conversaram muito sobre aprendizado de máquina, mas principalmente gerentes que desejam promover um tópico de hype. O resto, conheceu o tópico sem muito entusiasmo (ainda, trabalhar para eles).


Eu me perguntava sobre o que era o aprendizado de máquina. Um ano depois, posso dizer que o assunto é surpreendentemente volumoso. Vamos ver quais aspectos específicos estão disponíveis para uso na vida e nos negócios.


  1. Aprendizado de máquina clássico.
    Resumidamente: tudo o que havia antes do aparecimento hypa aprendizagem profunda (aprendizagem profunda). Se você possui dados tabulares sobre vendas, clientes, transações e deseja aumentar as vendas, atrair clientes, reconhecer fraudes, aqui está você. Aqui estão algumas boas palestras para ajudá-lo a entender como analisar dados e usar métodos como floresta aleatória, meios K ou XGBoost. Também gostei dos microcursos Kaggle e da competição de previsão de preços das casas. Talvez qualquer empresa que tenha clientes reais (e, portanto, um banco de dados) possa aplicar esses métodos. Há muitas coisas interessantes.
  2. Aprendizagem profunda
    Carros não tripulados, carros não tripulados e substituindo a cabeça de Jack Nicholson pela cabeça de Jim Carrey . Mas se você mergulhar mais fundo, qualquer cabeça girará. Aqui está o reconhecimento de rostos, emoções, posição do corpo, puxando a semântica do vídeo e todos os tipos de transformações de fluxo de vídeo. Auto-transcrição e auto-tradução, definição de doenças e ervas daninhas, bem, você entende, quase tudo. Além da visão computacional, há também o processamento de linguagem natural (PNL), processamento e simulação de fluxo de áudio, redes neurais para jogos GAN. Qualquer que seja o aspecto do aprendizado profundo escolhido, você pode dedicar algum tempo a:

  • Aprofundando nos detalhes da arquitetura das redes neurais.
    Esta área, na minha opinião, é a mais próxima da ciência e requer um corpo correspondente de conhecimentos em matemática e ciências da computação. Se você está ansioso para experimentar uma nova função de ativação assassina, torça camadas personalizadas e, para que a taxa de aprendizado não diminua apenas as bananas, mas se transforme em um tubo, essa área de aprendizado profundo é para você. Abra os artigos científicos mais recentes e comece a experimentar. Do ponto de vista comercial, essas são as coisas que as empresas podem fazer e que estão dispostas a investir especificamente na discussão. Há palestras da Universidade de Stanford para conhecer o YouTube no YouTube .


  • Aprofundamento nos detalhes da infraestrutura.
    O treinamento de imagens em rede neural para reconhecimento de imagens requer recursos da máquina. A escolha do ferro é ampla e limitada apenas pelo tamanho da carteira. Eu acho que a GTX 1070 Ti pode ser considerada um bom começo, mas não esqueça que uma placa de vídeo sozinha não resolve todos os problemas, porque os dados ainda precisam ser preparados e alimentados para as redes neurais. Uma CPU fraca ou um disco rígido lento podem se tornar o gargalo do seu sistema. Portanto, compre um processador i5 adicional, 16 GB de RAM e um disco rígido de estado sólido. O teclado, assim será, será o mais barato. Outra opção, Google Cloud, Azure, AWS, Kaggle novamente. Os serviços em nuvem oferecem dezenas, senão centenas de opções, com um preço inicial de cerca de 50 centavos por hora para o K80 (aproximadamente o mesmo que o GTX 1070 Ti). O Google oferece um depósito de US $ 300 para você praticar. O Azure dá US $ 200, com a Amazon não precisando lidar. Gostei da opção do Google porque você pode trocar rapidamente as placas de vídeo ("Ah, ande como uma caminhada. Hoje será a V100"). Obviamente, comparados com os salários da data de referência do rock dos testes do site do seu departamento de pesquisa, essas despesas serão um centavo real. Um pequeno truque de vida, ao conectar-se a uma máquina na nuvem, use o encaminhamento de porta: you_user@your_host -L 8888:127.0.0.1:8888 . Isso permitirá que você execute o Jupyter remoto no computador local. Também gostaria de dizer sobre as TPUs do Google. Eles podem ser usados ​​totalmente de graça diretamente no Google Colab, mas, se você pode usá-los, essa é a questão. Quando você trabalha com modelos mais ou menos padrão, tudo fica bonito, mas os modelos personalizados se comportam de maneira imprevisível se eles apenas iniciarem.


  • Aprofundamento na implementação na produção.
    Experiências com arquitetura e participação em competições são coisas muito úteis, mas, na realidade, não são tão importantes, seu modelo fornece uma precisão de 85% ou 87%. Para carros não tripulados ou aplicativos móveis, nesse caso, a velocidade da tomada de decisões será mais importante e, para as necessidades médicas, provavelmente um baixo nível de erros do segundo tipo ("Saudável! Vamos, tchau!"). Ou seja, a identificação de prioridades vem à tona. Além disso, várias questões técnicas: como implantar e garantir operação contínua no ambiente do produto, como treinar o modelo em novos dados, como monitorar e avaliar os resultados do trabalho, como capturar e corrigir bugs, finalmente. Já temos todos esses problemas com o software normal, mas agora eles passam para um nível diferente. Já existem ferramentas para controle de versão (Git-LFS, Saturn Cloud), personalizadas especificamente para aprendizado de máquina, mas ainda não existem padrões geralmente aceitos, o que certamente tem seu próprio romance. Outro truque da vida: se você mantiver os hiperparâmetros em arquivos de configuração separados, poderá restaurar facilmente experimentos bem-sucedidos.


  • Usando modelos prontos e transferir aprendizado.
    A parte mais simples e atraente do aprendizado de máquina, para quem deseja ver como tudo funciona na realidade. Existem modelos prontos o suficiente, algumas dúzias de linhas de código e voilá: quadrados multicoloridos percorrem a tela. Não é necessário gastar tempo e recursos treinando o modelo do zero. Existem até soluções prontas em hardware, se você deseja reconhecimento no local (a propósito, uma excelente visão geral sobre elas) . Parece, pegue e use, mas existem algumas nuances. Modelos prontos são treinados em conjuntos de dados padrão. Portanto, para descobrir quem rouba creme azedo da sua empresa: gato Vaska ou gato Semyon, você ainda precisa ajustar o modelo (transferência de aprendizado). Talvez Baba Masha com uma vassoura custe o negócio muito menos.



Corpo principal


Aqui voltamos ao início do post. Quando o aspirador de pó robótico passou, eu queria criar um aplicativo ou dispositivo funcional simples usando a visão de máquina. Então surgiu a idéia de dar ao aspirador outro canal de comunicação com o mundo exterior.
Se você aparafusar uma câmera pequena, poderá usar modelos prontos ou treinar você mesmo. As possibilidades de aplicação estão completas. De limpeza local a perseguir o cão. Você pode criar algum tipo de jogo no espaço físico usando o GAN ou brincar com os modelos de PNL e ensiná-lo a falar da maneira de um assistente de voz. Em suma, a hora de treinar seu próprio robô doméstico.


Claro, você precisa começar com coisas simples. Por exemplo, para pesquisar no Habré que já foi feito para nós. Acontece que o Ubuntu 14.04 está "dentro dela", o que significa que se você tiver uma raiz, poderá, por exemplo, controlar a partir do joystick . Se você extrair os dados do Lidar, encontrará à mão um protótipo de um carro não tripulado.
A escolha já começa nesta fase. Pegue uma câmera pronta com Wi-Fi e uma bateria ou uma placa para inferência como Jetson Nano? E posso montar uma câmera, Wi-Fi e bateria no Raspberry Pi? Cada abordagem é interessante à sua maneira, mas tentei manter o objetivo principal: criar um dispositivo simples e funcional usando o aprendizado de máquina; por isso, escolhi a primeira opção.


Enquanto a câmera estava a caminho, o aspirador de pó começou a funcionar. Funciona perfeitamente, ainda há tempo para sonhar. Digamos que Hector arrastou um graveto da rua e puxou-o, deitado em seu tapete favorito. A câmera, suspensa o suficiente, captura a poluição (aqui me lembrei do desafio sobre a louça suja ) e envia as coordenadas para o aspirador de pó. Caçar um cachorro ainda é mais fácil. Basta colocar a câmera no próprio aspirador e começar a avançar quando o cão for detectado; depois, um círculo completo e retornar à base.


Mas esses são planos para o futuro. Agora vamos fazer algo muito simples. Deixe o aspirador emitir sons diferentes, dependendo do objeto que apareceu na câmera. Para isso, precisamos de dois threads conectados por uma fila comum.


  • O modelo (usei um dos modelos prontos do zoo do modelo TensorFlow) reconhece o objeto e coloca seu nome na fila.
  • Outro encadeamento pega o nome do objeto da fila e gera a URL para o arquivo de som.
  • O caminho é passado para o aspirador e bate no endereço recebido do arquivo via ftp ou http.
  • Na pasta de cada objeto, existem vários arquivos para uma alteração. O arquivo é selecionado aleatoriamente. Além disso, existe um parâmetro para a probabilidade de reprodução de som, para que o aspirador de pó, que fixa Hector a uma velocidade de 10 qps, não chacoalhe como um louco, mas comunique algo de forma convincente e com dignidade.

O diagrama fica assim:



É assim que funciona:



Subtotal


O objetivo é alcançado: o aspirador está falando. Fico feliz por não ter feito muitas coisas ao mesmo tempo. O próximo passo é associar o reconhecimento de padrões ao fluxo que regula o movimento e também tentar transferir o aprendizado.


Inteligência artificial, o tópico é tão volumoso que é difícil determinar o que empreender em primeiro lugar. Na minha opinião, não existe um único ponto de entrada. Não é de todo necessário começar com o cálculo de derivadas complexas ou cursos de programação em Python (embora ambos sejam certamente úteis). Escolha o que é interessante para você pessoalmente e que a força esteja com você para terminar o que começou.


Os detalhes da implementação do PS estão no repositório . Comentários e solicitações pull são bem-vindos.

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


All Articles