1. Antes de começar
No codelab anterior, você criou um app para Android e iOS que usava um modelo básico de rotulagem de imagens que reconhece várias centenas de classes de imagens. Ele reconheceu uma foto de uma flor de forma muito genérica, vendo pétalas, flor, planta e céu.
Para atualizar o app e reconhecer flores específicas, como margaridas ou rosas, você precisa de um modelo personalizado treinado em muitos exemplos de cada tipo de flor que você quer reconhecer.
Pré-requisitos
- O codelab anterior deste programa de aprendizado.
O que você vai criar e aprender
- Como treinar um modelo personalizado de classificador de imagens usando o TensorFlow Lite Model Maker.
O que é necessário
- Nenhum hardware específico é necessário. Tudo pode ser concluído usando o Google Colab no navegador.
2. Começar
Todo o código a seguir foi preparado para você e está disponível para execução usando o Google Colab aqui. Se você não tiver acesso ao Google Colab, clone o repositório e use o notebook chamado CustomImageClassifierModel.ipynb que pode ser encontrado no diretório ImageClassificationMobile->colab.
Se você tiver muitos exemplos de flores específicas, será relativamente fácil treinar um modelo com o TensorFlow Lite Model Maker para reconhecê-las.
A maneira mais fácil de fazer isso é criar um arquivo .zip ou .tgz contendo as imagens, classificadas em diretórios. Por exemplo, se você usar imagens de margaridas, dentes-de-leão, rosas, girassóis e tulipas, poderá organizá-las em diretórios como este:

Compacte e hospede em um servidor para treinar modelos com ele. Você vai usar um que foi preparado para você no restante deste laboratório.
Este laboratório vai presumir que você está usando o Google Colab para treinar o modelo. Você pode encontrar o Colab em colab.research.google.com. Se você estiver usando outro ambiente, talvez seja necessário instalar muitas dependências, incluindo o TensorFlow.
3. Instalar e importar dependências
- Instale o TensorFlow Lite Model Maker. Você pode fazer isso com uma instalação do pip. O &> /dev/null no final apenas suprime a saída. O Model Maker gera muitos itens que não são imediatamente relevantes. Ele foi suprimido para que você possa se concentrar na tarefa em questão.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- Em seguida, importe as bibliotecas que você precisa usar e verifique se você está usando o TensorFlow 2.x:
# Imports and check that we are using TF2.x
import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
Agora que o ambiente está pronto, é hora de começar a criar seu modelo.
4. Fazer o download e preparar os dados
Se as imagens estiverem organizadas em pastas e essas pastas estiverem compactadas, ao fazer o download do arquivo zip e descompactá-lo, as imagens serão rotuladas automaticamente com base na pasta em que estão. Esse diretório será referenciado como data_path.
data_path = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
Esse caminho de dados pode ser carregado em um modelo de rede neural para treinamento com a classe ImageClassifierDataLoader do TensorFlow Lite Model Maker. Basta apontar para a pasta e tudo estará pronto.
Um elemento importante no treinamento de modelos com machine learning é não usar todos os dados para treinamento. Mantenha um pouco para testar o modelo com dados que ele não viu antes. Isso é fácil de fazer com o método de divisão do conjunto de dados retornado de ImageClassifierDataLoader. Ao transmitir um valor de 0, 9, você receberá 90% dos dados de treinamento e 10% dos dados de teste:
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
Agora que os dados estão preparados, você pode criar um modelo usando-os.
5. Criar o modelo de classificador de imagens
O Model Maker abstrai muitas das especificidades do design da rede neural para que você não precise lidar com o design de rede e coisas como convoluções, densas, relu, flatten, funções de perda e otimizadores. Para um modelo padrão, você pode simplesmente usar uma única linha de código para criar um modelo treinando uma rede neural com os dados fornecidos:
model = image_classifier.create(train_data)
Ao executar esse comando, você verá uma saída semelhante a esta:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
_________________________________________________________________
dropout_2 (Dropout) (None, 1280) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181
Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911
Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133
Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287
Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385
A primeira parte mostra a arquitetura do modelo. O que o Model Maker está fazendo nos bastidores é chamado de aprendizado por transferência , que usa um modelo pré-treinado como ponto de partida e apenas usa as informações que esse modelo aprendeu sobre como as imagens são construídas e as aplica para entender essas cinco flores. Você pode conferir isso na primeira linha que diz:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
A chave é a palavra "Hub", que indica que esse modelo veio do TensorFlow Hub. Por padrão, o TensorFlow Lite Model Maker usa um modelo chamado "MobileNet", projetado para reconhecer 1.000 tipos de imagens. A lógica aqui é que a metodologia usada, aprendendo "recursos" para distinguir entre 1.000 classes, pode ser reutilizada. Os mesmos "recursos" podem ser mapeados para nossas cinco classes de flores, para que não precisem ser aprendidos do zero.
O modelo passou por cinco épocas, em que uma época é um ciclo completo de treinamento em que a rede neural tenta corresponder as imagens aos rótulos. Quando passou por cinco épocas, em cerca de um minuto, ele tinha uma acurácia de 93,85% nos dados de treinamento. Considerando que há cinco classes, um palpite aleatório teria uma acurácia de 20%, então isso é um progresso. Ele também informa um número de "perda", mas você pode ignorá-lo por enquanto.
Anteriormente, você dividiu os dados em dados de treinamento e de teste, para que possa ter uma ideia de como a rede funciona em dados que ela não viu antes. Esse é um indicador melhor de como ela pode funcionar no mundo real usando model.evaluate nos dados de teste:
loss, accuracy = model.evaluate(test_data)
Isso vai gerar algo como:
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
Observe a acurácia aqui. É de 88,01%, então, ao usar o modelo padrão no mundo real, você deve esperar esse nível de acurácia. Isso não é ruim para o modelo padrão que você treinou em cerca de um minuto. É claro que você pode fazer muitos ajustes para melhorar o modelo, e isso é uma ciência por si só.
6. Exportar o modelo
Agora que o modelo está treinado, a próxima etapa é exportá-lo no formato .tflite que um aplicativo para dispositivos móveis pode usar. O Model Maker oferece um método de exportação fácil que você pode usar. Basta especificar o diretório para saída.
O código fica assim:
model.export(export_dir='/mm_flowers')
Se você estiver executando isso no Google Colab, clique no ícone de pasta à esquerda da tela para conferir o modelo:

Aqui, você vai encontrar uma lista do diretório atual. Use o botão indicado para subir um diretório:

No código, você especificou a exportação para o diretório mm_flowers. Abra-o e você verá um arquivo chamado "model.tflite". Esse é o modelo treinado.

Selecione o arquivo e três pontos vão aparecer à direita. Clique neles para abrir um menu de contexto e fazer o download do modelo.

Depois de alguns instantes, o modelo será baixado para a pasta de downloads.
7. Parabéns
Agora você pode integrá-lo ao seu app para dispositivos móveis. Você vai fazer isso no próximo laboratório.