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

1. Introdução

Os avanços recentes no aprendizado de máquina facilitaram relativamente o reconhecimento de objetos em imagens pelos computadores. Neste codelab, vamos mostrar uma jornada completa de criação de um modelo de classificação de imagens que pode reconhecer diferentes tipos de objetos e, em seguida, implantar o modelo em um app Android e iOS. O Kit de ML e o AutoML permitem criar e implantar o modelo em grande escala sem precisar de 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ê é novo ou experiente em machine learning, é possível implementar a funcionalidade necessária com apenas algumas linhas de código. Há várias APIs que podem reconhecer texto, rostos etc. e que podem ser usadas imediatamente. No entanto, se você precisar reconhecer objetos que não são compatíveis com as APIs, como diferentes tipos de flores em uma imagem, será necessário treinar seu próprio modelo. É aí que o AutoML pode ajudar.

O que é o AutoML?

O Cloud AutoML é um conjunto de produtos de machine learning criado para que desenvolvedores com conhecimento limitado nessa área treinem modelos de alta qualidade com base nas necessidades dos negócios. Isso é feito ao aproveitar o aprendizado por transferência e a tecnologia de pesquisa de arquitetura neural de última geração do Google.

Neste codelab, vamos usar o AutoML Vision Edge no Kit de ML para treinar um modelo de classificação de flores. O modelo é treinado na nuvem, mas depois é agrupado 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 executar em um app de exemplo para Android ou iOS usando o Kit de ML SDK.

O que é necessário

Para o app Android

Para o app iOS

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

2. Configuração

Baixar o código e o 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 "Kit de ML Codelab" ao projeto.

Configurar o app Android

  1. Adicione nosso app Android ao projeto do Firebase. Nome do pacote Android: com.google.firebase.codelab.mlkit.automl
  2. Baixe o 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. Adicione nosso app iOS ao projeto do Firebase. ID do pacote iOS: com.google.firebase.codelab.mlkit.automl
  2. Baixe o 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 o conjunto de dados de treinamento

Para treinar um modelo que reconheça diferentes tipos de objetos, você precisa 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, que está incluído no arquivo zip baixado na etapa anterior.

Analisar o conjunto de dados

Se você extrair o arquivo flower_photos.zip, vai ver 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 nesse conjunto de dados de treinamento. Você só precisa de um mínimo de 10 imagens por classe para treinar um modelo. No entanto, mais imagens de treinamento geralmente levam a 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. Algumas telas de boas-vindas podem aparecer. Selecione Começar, quando aplicável.
  1. Depois que o processo de configuração for concluído, selecione Adicionar conjunto de dados e nomeie-o como "Flores".
  2. Em Objetivo do modelo, escolha Classificação de rótulo único,já que 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ê baixou na etapa anterior para importar o conjunto de dados de treinamento de flores.
  5. Aguarde alguns minutos até que a tarefa de importação seja concluída.
  6. Agora você pode confirmar se o conjunto de dados foi importado corretamente.
  7. Como todas as imagens no conjunto de dados de treinamento foram rotuladas, você pode treinar um modelo.

cdb18b61f890934f.png

Treinar um modelo de classificação de imagens

Como nosso modelo será executado em um dispositivo móvel com poder de computação e armazenamento limitados, precisamos nos preocupar não apenas com a acurácia do modelo, mas também com o tamanho e a velocidade dele. Sempre há uma compensação entre a acurácia, a latência (ou seja, quanto tempo leva para classificar uma imagem) e o tamanho do modelo. Em geral, 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 otimizar para acurácia, latência e tamanho do modelo ou equilibrar essas opções. Você também pode escolher por quanto tempo o modelo vai ser treinado. Conjuntos de dados maiores precisam de mais tempo de treinamento.

dd6b7eaa2dd5a9de.png

Confira as etapas se você quiser treinar o modelo por conta própria.

  1. Selecione Treinar modelo.
  2. Selecione a opção Uso geral e 1 hora de computação de tempo de treinamento.
  3. Aguarde algum tempo (provavelmente várias horas) até que a tarefa de treinamento seja concluída.
  4. Depois que a tarefa de treinamento for concluída, você vai ver 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 um app de exemplo para Android e iOS que demonstra como usar o modelo de classificação de imagens treinado anteriormente em um app para dispositivos móveis. Os dois apps têm recursos semelhantes. Escolha a plataforma com que você tem mais familiaridade.
  • Antes de continuar, faça o download dos apps de exemplo e configure-os na etapa 2.
  • Verifique também se o ambiente local foi configurado para criar apps para a plataforma escolhida (Android/iOS).

Fazer o download do modelo de classificação de imagens

  • Se você treinou um modelo na etapa anterior, selecione Fazer o download para receber 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

Basta adicionar o modelo aos apps de exemplo para que eles funcionem imediatamente. Para um guia completo sobre como integrar o Kit de ML AutoML ao seu app, 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. Comece por eles para saber como os apps funcionam.

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

  • O modelo local é usado principalmente para agrupar o modelo de classificação de imagens no binário do app, mas também é possível fornecer um modelo salvo no armazenamento local. Com o pacote, o modelo fica disponível imediatamente para os usuários depois que eles baixam o app na App Store ou na Google Play Store, e ele funciona sem conexão com a Internet.
  • Um modelo remoto é hospedado no Firebase e só é baixado para o dispositivo do usuário quando 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 para o modelo incluído no app de exemplo. 10cf6b1e0f34de29.png
  4. Agora clique em Executar ( c8b8a080b7ead886.png) na barra de ferramentas do Android Studio e verifique se é possível reconhecer 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 das dependências via Cocoapods.
  3. Execute open MLVisionExample.xcworkspace/ para abrir o espaço de trabalho do projeto no Xcode.
  4. (Opcional) Extraia o modelo baixado e copie o conteúdo dele para o modelo incluído no app de exemplo em ios/ml-automl/Resources/automl/cd291fe04bcdc6ee.png
  5. Agora clique em Executar ( 16629f86bbeb4208.png) na barra de ferramentas do Xcode e verifique se é possível reconhecer diferentes tipos de flores.

65172c3f35336d4e.png

6. (Opcional) Usar modelo remoto

Com o modelo remoto do ML Kit, você não precisa incluir modelos do TensorFlow Lite no binário do app, mas pode fazer o download deles sob demanda do Firebase quando necessário. Os modelos remotos têm vários benefícios em relação aos locais:

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

Nesta etapa, vamos publicar um modelo remoto e usá-lo nos apps de exemplo. Confira se você concluiu o treinamento do modelo na etapa 4 deste codelab.

Publicar o modelo

  1. Acesse o Console do Firebase.
  2. Selecione o projeto "Kit de ML AutoML Codelab" criado anteriormente.
  3. Selecione Kit de ML > AutoML.
  4. Selecione o conjunto de dados "Flores" que você criou anteriormente.
  5. Confirme se a tarefa de treinamento foi concluída e selecione o modelo.
  6. Selecione Publicar e nomeie 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, basta executar os apps novamente para acionar o download do modelo. Para verificar se o app está usando o modelo remoto, confira o valor "Origem" no rodapé da tela do app. Consulte a seção "Solução de problemas" abaixo se 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 publicado anteriormente no console do Firebase.
  2. Agora clique em Executar ( c8b8a080b7ead886.png) na barra de ferramentas do Android Studio para executar o app novamente.

App iOS

  1. Acesse 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 Executar ( 16629f86bbeb4208.png) na barra de ferramentas do Xcode para executar o app novamente.

7. Parabéns!

Você passou por uma jornada completa de treinamento de um modelo de classificação de imagens com seus próprios dados de treinamento usando o AutoML e, em seguida, 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 no kit de ML ao seu próprio app.

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

Exemplos do Android

Exemplos para iOS