Como aprendi a não me preocupar e amei a visão de máquina

Olá Habr! Meu nome é Artyom Nagumanov, tenho mais de 15 anos de experiência em desenvolvimento de software, gerenciamento de projetos, equipes, departamentos de TI. Sempre me interessei pelo tema da inteligência artificial e da visão de máquina. Durante o desenvolvimento de software, sempre fui visitado pelo pensamento de por que não adicionar pelo menos alguma inteligência ao aplicativo corporativo para recusar parcial ou completamente a participação do usuário em qualquer processo que, à primeira vista, pareça completamente não-formalizado.

imagem

Para fazer isso, cada vez que eu precisava percorrer todo o caminho de novo: estudar / recuperar as bibliotecas apropriadas, instalar em uma máquina virtual Linux para testar ferramentas gratuitas para criar e treinar redes neurais, encontrar arquiteturas de rede que atualmente são a coroa da criação humana no mundo inteligência artificial. Este processo é bastante trabalhoso e não muito divertido. Uma vez, entendendo a arquitetura de outra rede neural, percebi que era hora de pôr um fim nisso e criar uma ferramenta universal que assumiria toda a rotina. E eu só preciso pressionar alguns botões grandes de vidro e obter o resultado. Na figura para atrair atenção (no primeiro parágrafo do artigo), é mostrado um exemplo de reconhecimento de jatos de água de uma máquina de irrigação, mas primeiro as primeiras coisas.

Fazemos serviço de reconhecimento


Tive a seguinte ideia - criar um site em que o usuário possa fazer upload de qualquer imagem, clique no botão "Reconhecer" e obtenha o resultado no formato json. Mas o fato é que não há algoritmo universal ou rede neural que possa encontrar objetos no mundo. Como resultado, decidi tornar possível treinar meus próprios modelos de redes neurais para reconhecer os objetos de que precisamos, usando apenas o site e imagens de exemplo que precisam ser reconhecidas. Antes de começar o trabalho, analisei quais desenvolvimentos existem no mundo nesse tópico. Como se viu, muitos gigantes da indústria de TI estão trabalhando nessa direção: Yandex, Mail.ru, Amazon. A principal desvantagem foi que todos esses gigantes querem dinheiro por seus serviços. Isso foi o suficiente para eu começar meu próprio desenvolvimento.Eu já tinha experiência e sabia como encontrar e classificar objetos em imagens, tudo o que restava era juntar tudo e criar uma interface conveniente.

Na grande maioria dos casos, uso tecnologias da Microsoft em meus projetos, o que afetou significativamente as tecnologias usadas neste projeto:

  • ASP.NET (linguagem C #)
  • Webpi
  • Jquery Javascript
  • Servidor MSSQL
  • Pitão
  • Tensorflow

Em primeiro lugar, decidi criar um serviço REST, que será o cérebro de todo o sistema, o que nos permitirá aceitar comandos por meio da API e fazer todo o trabalho duro. A arquitetura da rede neural, escolhi Mask R-CNN, esta rede pode encontrar objetos na imagem e classificá-los.

Tudo correu mais ou menos regularmente, até chegar à realização de treinar meus próprios modelos. O processo de aprendizado foi muito caro e exigente no hardware. Claro, eu sabia disso antes, mas antes disso, eu podia esperar o treinamento do modelo por um dia ou dois, usando a CPU para cálculos. Mas como a idéia era criar uma ferramenta conveniente e rápida, não pude aguentar o longo treinamento do modelo. Portanto, a questão amadureceu com a instalação de um servidor especial com uma placa de vídeo adequada para suportar a tecnologia CUDA ( https://ru.wikipedia.org/wiki/CUDA) e reduzirá significativamente o tempo necessário para treinar o modelo. Para não aumentar o orçamento do projeto, escolhi uma placa de vídeo NVIDIA GeForce GTX 1050 Ti barata. Paralelamente ao serviço, criei um cliente no Windows Forms que permitiria o teste.

Na segunda etapa, criei um site, que é essencialmente um cliente do serviço. Eu realmente não me incomodei com o design e nem peguei o modelo finalizado, escrevi tudo sozinho, usando apenas o que o Visual Studio fornece de imediato. Demorou mais três meses para criar e testar o site.

Fiquei incrivelmente feliz quando carreguei a imagem, selecionei um modelo pronto para reconhecimento, clicou no botão "Reconhecer" e obteve o primeiro resultado.

imagem

A verdadeira tarefa da visão de máquina


Enquanto eu trabalhava no sistema de reconhecimento, uma tarefa real me ocorreu - determinar a posição da pá dianteira de uma máquina especial que limpa a neve na estrada. Para resolver esse problema, eu não estava limitado na escolha de uma abordagem para a solução e, desde o início, queria usar a instalação de sensores especiais que determinam o ângulo da pá, mas rapidamente abandonei essa idéia. Como se viu, esses sensores precisam ser constantemente calibrados devido ao fato de a pá ser periodicamente removida e outra colocada, além de conversar com colegas que instalam esses sensores, descobri que esses sensores estão na rua e estão disponíveis para sabotagem. A ideia veio à mente para analisar os controles de trabalho da pá, mas, na verdade, eles chegaram ao ponto de remover a pá e, nos corpos de trabalho, sinalizam que a pá está abaixada,em uma palavra, novamente não é uma opção confiável. Bem, eles não me deixaram escolha a não ser usar todo o poder do serviço de reconhecimento. Coloquei a câmera no compartimento de passageiros do carro, que está olhando para a pá frontal, coletei várias centenas de amostras da pá, as marquei com a ferramenta VGG, que eu construí no local e comecei a treinar. O processo levou cerca de duas horas e, na 30ª era, obtive um resultado de reconhecimento bastante aceitável, a precisão do reconhecimento era de cerca de 95%.O processo levou cerca de duas horas e, na 30ª era, obtive um resultado de reconhecimento bastante aceitável, a precisão do reconhecimento era de cerca de 95%.O processo levou cerca de duas horas e, na 30ª era, obtive um resultado de reconhecimento bastante aceitável, a precisão do reconhecimento era de cerca de 95%.

imagem

Para que o sistema funcionasse totalmente no carro, eu tive que modificá-lo: adicione a capacidade de fazer upload de fotos via ftp, e não apenas através da API, porque a câmera de vídeo permitiu tirar uma foto e enviá-la para o ftp especificado. Foi adicionada a capacidade de salvar o resultado no banco de dados e, por meio da API, pelo período especificado, para obter os resultados, analisá-los e gravar no sistema de contabilidade escrito em 1C, que por sinal é um sistema de controle enorme que analisa milhares de carros ao mesmo tempo e controla muitos parâmetros, como quilometragem , horas de máquina, combustível no tanque, passeios, marcha lenta, etc., mas essa é uma história completamente diferente. A primeira versão do controle da pá está pronta, mas na batalha será testada apenas quando a neve cair.

Quão fácil é isso?


A idéia principal do serviço de reconhecimento é a simplicidade de criar e treinar seus próprios modelos. Para entender se alguém realmente pode criar e treinar seu próprio modelo, pedi ao meu assistente que criasse um modelo para reconhecer jatos de água de uma máquina de irrigação. A única informação que eu dei a ela foi um vídeo da operação da máquina de irrigação, tirada da cabine e o endereço do serviço de reconhecimento. À noite, defini essa tarefa para ela e, pela manhã, ao entrar no sistema, vi um modelo pronto que realmente funcionava. Abaixo está uma captura de tela da janela na qual o modelo é treinado.

imagem

Conforme você aprende, a era do modelo é preservada e, sem interromper o processo de aprendizado, podemos testar qualquer época.

Desenvolvimento e uso


Um exemplo de como tudo funciona ao vivo pode ser visto no videoclipe .

Pensei por um longo tempo que, se alguém pode criar seu próprio modelo, por que não tornar possível compartilhar esse modelo com outros usuários do sistema. Como resultado, adicionei uma seção onde você pode colocar um modelo de sucesso com um clique do mouse e qualquer participante pode usá-lo. O serviço é completamente gratuito.

Agora eu mesmo uso o serviço para resolver minhas tarefas de automação de processos em empresas nas quais a visão de máquina pode ser usada. No futuro, pretendo adicionar outras abordagens de reconhecimento, não apenas redes neurais. Ficarei muito feliz se alguém que usar este serviço puder resolver seus problemas.

All Articles