Treinar e implantar um modelo de classificação de imagens no dispositivo com o AutoML Vision no kit de ML

1. Introdução

Com o progresso recente do aprendizado de máquina, os computadores têm mais facilidade para reconhecer objetos em imagens. Neste codelab, vamos acompanhar você por toda a jornada de criação de um modelo de classificação de imagens que reconheça diferentes tipos de objetos e, em seguida, implante o modelo em apps Android e iOS. O Kit de ML e o AutoML permitem que você crie e implante o modelo em escala sem qualquer experiência em machine learning.

O que é o Kit de ML?

O Kit de ML é um SDK para dispositivos móveis que leva a experiência em machine learning do Google para apps Android e iOS em um pacote eficiente e fácil de usar. Não importa se você é iniciante ou experiente em machine learning, é possível implementar facilmente a funcionalidade de que precisa com apenas algumas linhas de código. Há diversas APIs que podem reconhecer texto, rostos etc. e estão prontas para uso. No entanto, se você precisar reconhecer objetos sem suporte das APIs, como o reconhecimento de diferentes tipos de flores em uma imagem, treine seu próprio modelo. É aí que o AutoML pode ajudar.

O que é o AutoML?

O Cloud AutoML é um conjunto de produtos de machine learning que permite que desenvolvedores com pouca experiência em machine learning treinem modelos de alta qualidade específicos para as necessidades de negócios deles, aproveitando o aprendizado por transferência de última geração do Google e a tecnologia de pesquisa de arquitetura neural.

Neste codelab, usaremos o AutoML Vision Edge no kit de ML para treinar um modelo de classificação de flores. O modelo é treinado na nuvem, mas depois é empacotado ou baixado pelo app para executar inferências totalmente no dispositivo.

93f21fd287496e4e.png

O que você vai aprender

  • Como treinar um modelo de classificação de imagens usando o AutoML Vision Edge no kit de ML.
  • Como executá-lo em um app de amostra para Android ou iOS usando o SDK do Kit de ML.

O que é necessário

Para o app Android

Para o app iOS

  • Uma versão recente do XCode (v10.2+)
  • Simulador de iOS ou um dispositivo físico com iOS (v9.0+)
  • CocoaPods
  • Conhecimento básico de desenvolvimento para iOS em Swift

2. Configuração

faça o download do código e do conjunto de dados de treinamento

Faça o download de um arquivo ZIP que contém o código-fonte deste codelab e um conjunto de dados de treinamento. Extraia o arquivo na sua máquina local.

Criar projeto do Console do Firebase

  1. Acesse o Console do Firebase.
  2. Selecione Criar novo projeto e dê o nome "Codelab do kit de ML" a ele.

Configurar o app Android

  1. Adicionar nosso app Android ao projeto do Firebase. Nome do pacote Android: com.google.firebase.codelab.mlkit.automl
  2. Faça o download do arquivo de configuração google-services.json e coloque-o no app Android em android/mlkit-automl/app/google-services.json.

Configurar o app para iOS

  1. Adicionar nosso app iOS ao projeto do Firebase. ID do pacote iOS: com.google.firebase.codelab.mlkit.automl
  2. Faça o download do arquivo de configuração GoogleService-Info.plist e siga as instruções para colocá-lo no app iOS em ios/mlkit-automl/GoogleService-Info.plist.

3. Preparar conjunto de dados de treinamento

Para treinar um modelo para reconhecer diferentes tipos de objetos, é preciso preparar um conjunto de imagens e rotular cada uma delas. Criamos um arquivo de fotos de flores licenciadas pelo Creative Commons para você usar neste codelab.

O conjunto de dados é empacotado em um arquivo ZIP chamado flower_photos.zip, incluído no arquivo ZIP que você salvou na etapa anterior.

analisar o conjunto de dados

Se você extrair o arquivo flower_photos.zip, vai notar que o conjunto de dados contém imagens de cinco tipos de flores: dente-de-leão, margarida, tulipas, girassóis e rosas, organizadas em pastas com o nome das flores. Essa é uma maneira prática de criar um conjunto de dados de treinamento para alimentar o AutoML e treinar um modelo de classificação de imagens.

Há 200 imagens para cada tipo de flor neste conjunto de dados de treinamento. Você só precisa de pelo menos 10 imagens por classe para treinar um modelo. No entanto, mais imagens de treinamento geralmente resultam em modelos melhores.

e5772b6527a6048d.png 6c4443d31cd5653e.png

4. Treinar um modelo

Fazer upload do conjunto de dados de treinamento

  1. No Console do Firebase, abra o projeto que você acabou de criar.
  2. Selecione Kit de ML > AutoML.
  3. Talvez você veja algumas telas de boas-vindas. Selecione Começar quando aplicável.
  1. Após o término da configuração, selecione Adicionar conjunto de dados e nomeie-o como "Flores".
  2. Em Objetivo do modelo, escolha Classificação de rótulo único,porque os dados de treinamento contêm apenas um rótulo por imagem.
  3. Selecione Criar.
  4. Faça upload do arquivo flower_photos.zip que você salvou na etapa anterior para importar o conjunto de dados de treinamento de flores.
  5. Aguarde alguns minutos para que a tarefa de importação seja concluída.
  6. Agora você pode confirmar que o conjunto de dados foi importado corretamente.
  7. Como todas as imagens no conjunto de dados de treinamento foram rotuladas, é possível continuar com o treinamento de um modelo.

cdb18b61f890934f.png

Treinar um modelo de classificação de imagens

Como nosso modelo será executado em um dispositivo móvel com capacidade de computação e armazenamento limitados, precisamos prestar atenção não apenas na precisão do modelo, mas também no tamanho e na velocidade. Há sempre uma compensação entre acurácia, latência (ou seja, quanto tempo leva para classificar uma imagem) e tamanho do modelo. Geralmente, um modelo com maior acurácia também é maior e leva mais tempo para classificar uma imagem.

O AutoML oferece várias opções: você pode optar por otimizar a acurácia, otimizar a latência e o tamanho do modelo ou equilibrar entre eles. Também é possível escolher por quanto tempo o modelo será treinado. Conjuntos de dados maiores precisam ser treinados por mais tempo.

dd6b7eaa2dd5a9de.png

Se quiser treinar o modelo por conta própria, siga estas etapas.

  1. Selecione Treinar modelo.
  2. Selecione a opção Uso geral e 1 hora de computação de tempo de treinamento.
  3. Aguarde um tempo (provavelmente várias horas) até que a tarefa de treinamento seja concluída.
  4. Após a conclusão da tarefa de treinamento, serão exibidas as métricas de avaliação sobre o desempenho do modelo treinado.

73f98fbed5ae5ee5.png

5. Usar o modelo em apps para dispositivos móveis

Preparação

  • Este codelab contém apps de exemplo para Android e iOS que demonstram como usar o modelo de classificação de imagens que treinamos anteriormente em um app para dispositivos móveis. Os dois apps têm recursos semelhantes. Escolha a plataforma com a qual você tem mais familiaridade.
  • Antes de continuar, verifique se você fez o download dos aplicativos de exemplo e os configurou na etapa 2.
  • Verifique também se seu ambiente local foi configurado para permitir a criação de aplicativos para a plataforma escolhida (Android/iOS).

Baixar o modelo de classificação de imagens

  • Se você treinou um modelo na etapa anterior, selecione Fazer download para acessar o modelo.
  • Se você não treinou um modelo ou se a tarefa de treinamento ainda não foi concluída, use o modelo incluído nos apps de exemplo.

Adicionar o modelo aos apps de exemplo

Você só precisa adicionar o modelo aos apps de exemplo, e eles vão funcionar imediatamente. Para ver um guia completo sobre como integrar o AutoML do Kit de ML ao seu aplicativo, consulte nossa documentação ( Android, iOS). O código que interage com o SDK do kit de ML está nos arquivos ImageClassifier.kt e ImageClassifier.swift, respectivamente, para que você possa começar a partir daí e ver como os apps funcionam.

Há duas opções para implantar o modelo: local e remoto.

  • O modelo local é usado principalmente para agrupar o modelo de classificação de imagens no binário do app, embora também seja possível fornecer um modelo salvo no armazenamento local. Com o agrupamento, o modelo fica disponível imediatamente para os usuários depois que eles fazem o download do app na App Store / Play Store e funciona sem conexão de Internet.
  • O modelo remoto é hospedado no Firebase e só será transferido por download para o dispositivo do usuário quando for necessário pela primeira vez. Depois disso, o modelo também vai funcionar off-line.

2e71ed2c7cb8757c.png

App Android

  1. Abra o Android Studio.
  2. Importe o app Android em android/mlkit-automl/
  3. (Opcional) Extraia o modelo que você baixou e copie o conteúdo dele sobre o modelo incluído no app de exemplo. 10cf6b1e0f34de29.png
  4. Agora, clique em Run ( c8b8a080b7ead886.png) na barra de ferramentas do Android Studio e verifique se ela reconhece diferentes tipos de flores.

2e71ed2c7cb8757c.png

App iOS

  1. Abra o terminal e acesse a pasta ios/mlkit-automl/.
  2. Execute pod install para fazer o download de dependências pelo Cocoapods
  3. Execute open MLVisionExample.xcworkspace/ para abrir o espaço de trabalho do projeto no Xcode.
  4. (Opcional) Extraia o modelo que você salvou e copie o conteúdo dele sobre o modelo incluído no app de exemplo em ios/ml-automl/Resources/automl/cd291fe04bcdc6ee.png
  5. Agora clique em Run ( 16629f86bbeb4208.png) na barra de ferramentas do Xcode e verifique se ela reconhece diferentes tipos de flores.

65172c3f35336d4e.png

6. (Opcional) Usar o modelo remoto

Com o modelo remoto do kit de ML, é possível não incluir modelos do Tensorflow Lite no binário do app, mas fazer o download on demand do Firebase quando necessário. Os modelos remotos têm vários benefícios em relação aos modelos locais:

  • Binário menor do app
  • Poder atualizar modelos sem atualizar o app
  • Teste A/B com várias versões de um modelo

Nesta etapa, publicaremos um modelo remoto e o usaremos nos apps de exemplo. Certifique-se de ter concluído o treinamento do seu modelo na etapa 4 deste codelab.

Publique o modelo

  1. Acesse o Console do Firebase.
  2. Selecione o "Codelab do AutoML do Kit de ML" do projeto que você criou anteriormente.
  3. Selecione Kit de ML > AutoML.
  4. Selecione o menu "Flowers" conjunto de dados criado anteriormente.
  5. Confirme se a tarefa de treinamento foi concluída e selecione o modelo.
  6. Selecione Publish e nomeie-a como "mlkit_flowers". b63a58b83e814acd.png

Reconhecer flores com o modelo remoto

Os apps de exemplo são configurados para usar o modelo remoto se ele estiver disponível. Depois de publicar o modelo remoto, execute novamente os apps para acionar o download do modelo. Para verificar se o app está usando o modelo remoto, consulte a "Origem" no rodapé da tela do app. Consulte a seção "Solução de problemas" abaixo se isso não funcionar.

7c8292293fd858ad.png de359886ccecef2.png

Solução de problemas

Se o app de exemplo ainda estiver usando o modelo local, verifique se o nome do modelo remoto está definido corretamente no código.

App Android

  1. Acesse ImageClassifier.kt e encontre este bloco.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. Verifique se o nome do modelo definido no código corresponde ao nome do modelo publicado anteriormente no console do Firebase.
  2. Agora, clique em Run ( c8b8a080b7ead886.png) na barra de ferramentas do Android Studio para executar o app novamente.

App iOS

  1. Vá até ImageClassifier.swift e encontre este bloco,
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. Verifique se o nome do modelo definido no código corresponde ao nome do modelo publicado anteriormente no console do Firebase.
  2. Agora clique em Run ( 16629f86bbeb4208.png) na barra de ferramentas do Xcode para executar o app novamente.

7. Parabéns!

Você completou uma jornada de treinamento de um modelo de classificação de imagens com seus próprios dados usando o AutoML e depois usou o modelo em um app para dispositivos móveis com o Kit de ML.

Consulte nossa documentação para saber como integrar o AutoML Vision Edge ao kit de ML ao seu próprio aplicativo.

Você também pode testar nossos aplicativos de exemplo do Kit de ML para ver outros recursos do Kit de ML do Firebase.

Exemplos do Android

Exemplos para iOS