Estágio na Mars Digital Technologies. Como aplicamos o aprendizado profundo na M&M



Olá pessoal!

Anualmente, cerca de 200 estudantes e graduados se juntam à Mars na Rússia como estagiários ou participantes do programa de liderança. Dmitry Korzhimanov, concluiu um estágio no hub de TI da Mars neste verão. Em nosso blog, Dmitry fala sobre um projeto em que trabalhou durante um estágio.


Um grande número de empresas oferece estágios para estudantes a partir do terceiro ano. Então eu, como muitos dos meus colegas de classe, formados no terceiro ano, parti para encontrar um estágio para o verão. No mechmath da Universidade Estadual de Moscou, os estudantes preferem TI e serviços bancários, o que não é surpreendente, dada a presença de uma quantidade decente de problemas matemáticos, tanto lá como ali. Considerei estágios em diferentes empresas e escolhi a Mars, pois estava interessado na oportunidade de trabalhar em projetos de TI em produção real. Além disso, a Mars é uma empresa internacional, o que significa que o trabalho estava à frente em uma equipe de todo o mundo.

Depois de passarem em testes técnicos e verbais, além de uma entrevista com um futuro mentor, eles me enviaram uma oferta e, eis que, me tornei estagiário na equipe de Tecnologias de Nova Geração. Este departamento é composto por 5 pessoas de todo o mundo e está envolvido principalmente na introdução de tecnologias de aprendizado de máquina em vários ciclos de produção e vendas da empresa.

Honestamente, eu não sou mestre em algoritmos de aprendizado de máquina e, na época do estágio, não tinha um entendimento completo do que eu faria e como implementaria projetos. Sim, eu tinha um bom conhecimento matemático e até sabia o que era a Random Forest, mas foi aí que meu conhecimento terminou. Entre outras coisas, em Marte, há um grande número de tarefas relacionadas à visão computacional, e nossa equipe as resolve com sucesso. Aconteceu que, nas primeiras 2 semanas do estágio, eu descobri como as redes neurais são organizadas, o que é o OpenCV, quais métricas existem, como trabalhar com PyTorch e TensorFlow e muitas outras coisas. Minha cabeça estava em pleno andamento no final de cada dia, porque as informações tinham que ser absorvidas em grandes quantidades, e as idéias de alguns algoritmos eram bastante triviais. Felizmente, no momento, existem muitos recursos realmente úteis, como Neurohive, Medium e o mesmo Habr (exprimo minha profunda gratidão a todos que escrevem artigos sobre o assunto de aprendizado de máquina aqui, sem você, a imersão no tópico seria uma tarefa muito mais difícil). Graças a esses recursos, você pode estudar um tópico em particular a uma velocidade bastante alta. O Coursera, do qual ainda assisto palestras, não fica de lado.

Depois de me aprofundar em alguns dos fundamentos fundamentais do aprendizado profundo e ter dominado um pouco, me ofereceram para participar do projeto. Tivemos que implementar um programa que mede objetos em uma fotografia. Obviamente, surge a pergunta: por que isso é necessário para a empresa FMCG? No entanto, a resposta é bastante simples: manter estatísticas sobre o tamanho das matérias-primas e produtos na fábrica. Por exemplo, Marte produz M & M's, e acho que muitos experimentaram M & M's com amendoins. No entanto, para que cada doce não seja muito grande nem muito pequeno, o amendoim também deve ter um tamanho determinado.

Como você sabe, no mundo não há nada ideal e as partes chegam à fábrica de qualidade completamente diferente. Portanto, uma pessoa especial precisa fazer manualmente (!) Faça uma seleção de um lote de nozes e compile estatísticas sobre eles. Naturalmente, em algum momento, a empresa percebeu que o processo era bastante ineficiente e seria bom automatizá-lo. De fato, a tarefa é bastante simples e tudo o que é necessário é ensinar o modelo a encontrar nozes ou outros objetos, digamos, em uma folha A4, e também um marco de um tamanho conhecido impresso nela, pelo qual os pixels vão para unidades reais. Parece bastante trivial, mas, de fato, as dificuldades geralmente começam a surgir. Fui instruído a participar da implementação da parte relacionada ao reconhecimento desse marco e à tradução de pixels em milímetros.

As grandes empresas prestam muita atenção à manutenção de sua identidade corporativa, que desempenhou um papel no meu projeto. Como ponto de referência ou ponto de referência, que será impresso em papel nas fábricas de todo o mundo, foi escolhido um círculo com a letra “M” característica da empresa.

Para resolver meu problema, comecei imediatamente a procurar bons exemplos de implementação de redes neurais convolucionais que podem encontrar rápida e claramente objetos na foto. Após revisar as várias opções, selecionei uma das implementações mais rápidas da R-CNN e estudei seus recursos e arquitetura. O próximo passo foi treinar o modelo; para isso, foram geradas cerca de cem fotografias com uma localização aleatória de um ponto de referência e, consequentemente, um quadrado que o descreve. Neste ponto, o pacote reportlab me ajudou muito. Este é um conjunto de ferramentas projetadas especificamente para gerar documentos com uma organização personalizada de objetos.

Para aumentar , foi escolhido o pacote de documentação , cujas capacidades são bastante impressionantes. No Github, você pode ler mais sobre isso, incluindo uma comparação com bibliotecas alternativas. Tentei fazer as transformações o mais diversificadas possível, para que não restassem as chamadas "caixas pretas". Voltas, zoom, alteração de contraste, adição de ruído e outras técnicas padrão. Infelizmente, houve um problema com a ferramenta Girar, o que era necessário para mim, porque ninguém dava garantia da orientação correta da letra M na foto e o modelo deveria ser capaz de reconhecer diferentes opções para sua posição.

Não importa como eu tente encontrar o erro, a função do pacote de alegações continuou teimosamente a fazer conversões incorretas de caixas delimitadoras, deslocando-a na chave errada. Como resultado, decidi usar o pacote imgaug clássico, com o qual não tinha problemas.

Tendo treinado a rede em várias épocas, fiquei interessado no resultado que o modelo produzirá em exemplos reais. Depois de imprimir uma folha de papel com um ponto de referência e tirar algumas fotos, comecei a testar a rede neural. E sim, ela realmente aprendeu a encontrar o que precisava, mas fez isso longe de ser perfeita. Os limites que a rede mostrava eram muito imprecisos para a medição de objetos de alta qualidade, e aqui começou o processo bastante desagradável de ajustar parâmetros em busca da configuração ideal. Alterei a etapa de aprendizado, tentei alterar a arquitetura da rede, finalizá-la, alterar as configurações de aumento, mas a IoU média não ultrapassou 0,85.

O resultado do R-CNN mais rápido



Infelizmente, minha inexperiência me enganou. Não me preocupando com a busca de ferramentas mais simples, fiquei muito empolgado com os experimentos com a rede neural, mas, por mais que tentasse, não deu um resultado aceitável. No processo, a produção simplesmente não utilizou impressoras coloridas e todos os meus esforços pareciam em vão. Mas então meu colega me disse que você pode usar o círculo preto usual e a transformação Hough do pacote OpenCV para detectá-lo. Eu poderia usar a mesma solução simples para a versão inicial, no entanto, não prestei a devida atenção às ferramentas clássicas da visão computacional. Tendo brincado um pouco com os parâmetros, finalmente consegui o que queria e o problema foi resolvido. A próxima etapa é criar uma API usando o pacote Flask e lançar o programa no servidor do Azure, mas essa é uma história completamente diferente.

Resultado final com a transformação de Hough



Além das tarefas de visão computacional, a empresa enfrenta tarefas de outras áreas de aprendizado de máquina - desde o processamento de tweets para monitorar a percepção de um determinado produto, até o desenvolvimento de programas que ajudam os veterinários a tratar os animais com mais eficiência. O que foi uma surpresa agradável para mim é a parte da pesquisa do trabalho. Muitas vezes, as tarefas parecem muito simples, mas não se sabe como encontrar sua solução de alta qualidade. Para fazer isso, você deve estudar artigos e métodos atuais no campo de Machine Learning. Por exemplo, eu tive que entender os métodos bayesianos de aprendizado de máquina, que são muito populares para resolver problemas médicos. Graças a isso, pude estudar artigos médicos descrevendo a aplicação desses métodos e ajudar a equipe a escolher o vetor de desenvolvimento correto.

No momento, estou terminando meu estágio. Como o novo ano letivo está chegando, em setembro, mudei para o trabalho de meio período, o que não é um problema. Além disso, a empresa tem a oportunidade de trabalhar em casa e, como se viu, essa prática é bastante comum aqui. Agora, nossa equipe está concluindo o projeto que descrevi no artigo e está migrando para um novo relacionado à visão computacional. Existem realmente muitas tarefas, e todas são completamente diferentes, para que você não fique entediado.

Agora está aberto um estágio na Mars. Você pode aprender mais e se inscrever em: site .

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


All Articles