Classificação de imagem

A tarefa de identificar o que uma imagem representa é chamada de classificação de imagens. Um modelo de classificação de imagens é treinado para reconhecer várias classes de imagens. Por exemplo, você pode treinar um modelo para reconhecer fotos que representam três tipos diferentes de animais: coelhos, hamsters e cachorros. O TensorFlow Lite oferece modelos pré-treinados otimizados que você pode implantar em seus aplicativos móveis. Saiba mais sobre a classificação de imagens usando o TensorFlow aqui .

A imagem a seguir mostra a saída do modelo de classificação de imagem no Android.

Captura de tela do exemplo do Android

iniciar

Se você é novo no TensorFlow Lite e está trabalhando com Android ou iOS, é recomendável explorar os aplicativos de exemplo a seguir que podem ajudá-lo a começar.

Você pode aproveitar a API pronta para uso da Biblioteca de tarefas do TensorFlow Lite para integrar modelos de classificação de imagens em apenas algumas linhas de código. Você também pode criar seu próprio pipeline de inferência personalizado usando a Biblioteca de suporte do TensorFlow Lite .

O exemplo do Android abaixo demonstra a implementação de ambos os métodos como lib_task_api e lib_support , respectivamente.

Veja o exemplo do Android

Veja o exemplo do iOS

Se você estiver usando uma plataforma diferente do Android/iOS ou se já estiver familiarizado com as APIs do TensorFlow Lite , baixe o modelo inicial e os arquivos de suporte (se aplicável).

Baixe o modelo inicial

Descrição do modelo

Como funciona

Durante o treinamento, um modelo de classificação de imagem é alimentado com imagens e seus rótulos associados. Cada rótulo é o nome de um conceito distinto, ou classe, que o modelo aprenderá a reconhecer.

Com dados de treinamento suficientes (geralmente centenas ou milhares de imagens por rótulo), um modelo de classificação de imagem pode aprender a prever se novas imagens pertencem a qualquer uma das classes nas quais foi treinado. Este processo de previsão é chamado de inferência . Observe que você também pode usar o aprendizado de transferência para identificar novas classes de imagens usando um modelo pré-existente. O aprendizado de transferência não requer um conjunto de dados de treinamento muito grande.

Quando você fornecer uma nova imagem como entrada para o modelo, ele exibirá as probabilidades da imagem representando cada um dos tipos de animais em que foi treinado. Um exemplo de saída pode ser o seguinte:

Tipo de animal Probabilidade
Coelho 0,07
Hamster 0,02
Cão 0,91

Cada número na saída corresponde a um rótulo nos dados de treinamento. Associando a saída aos três rótulos em que o modelo foi treinado, você pode ver que o modelo previu uma alta probabilidade de que a imagem represente um cachorro.

Você pode notar que a soma de todas as probabilidades (para coelho, hamster e cachorro) é igual a 1. Esse é um tipo comum de saída para modelos com várias classes (consulte Softmax para obter mais informações).

Resultados ambíguos

Como as probabilidades de saída sempre somarão 1, se uma imagem não for reconhecida com confiança como pertencente a nenhuma das classes nas quais o modelo foi treinado, você poderá ver a probabilidade distribuída entre os rótulos sem que nenhum valor seja significativamente maior.

Por exemplo, o seguinte pode indicar um resultado ambíguo:

Etiqueta Probabilidade
coelho 0,31
hamster 0,35
cão 0,34
Se seu modelo retornar resultados ambíguos com frequência, talvez você precise de um modelo diferente e mais preciso.

Escolhendo uma arquitetura de modelo

O TensorFlow Lite oferece uma variedade de modelos de classificação de imagens, todos treinados no conjunto de dados original. Arquiteturas de modelo como MobileNet, Inception e NASNet estão disponíveis no TensorFlow Hub . Para escolher o melhor modelo para seu caso de uso, você precisa considerar as arquiteturas individuais, bem como algumas das compensações entre vários modelos. Algumas dessas compensações do modelo são baseadas em métricas como desempenho, precisão e tamanho do modelo. Por exemplo, você pode precisar de um modelo mais rápido para construir um scanner de código de barras, enquanto pode preferir um modelo mais lento e preciso para um aplicativo de imagens médicas. Observe que os modelos de classificação de imagem fornecidos aceitam tamanhos variados de entrada. Para alguns modelos, isso é indicado no nome do arquivo. Por exemplo, o modelo Mobilenet_V1_1.0_224 aceita uma entrada de 224x224 pixels. Todos os modelos requerem três canais de cores por pixel (vermelho, verde e azul). Os modelos quantizados requerem 1 byte por canal e os modelos float requerem 4 bytes por canal. Os exemplos de código Android e iOS demonstram como processar imagens de câmera em tamanho real no formato necessário para cada modelo.

Usos e limitações

Os modelos de classificação de imagem do TensorFlow Lite são úteis para classificação de rótulo único; ou seja, prever qual rótulo único a imagem provavelmente representará. Eles são treinados para reconhecer 1000 classes de imagens. Para obter uma lista completa de classes, consulte o arquivo de rótulos no zip do modelo . Se você deseja treinar um modelo para reconhecer novas classes, consulte Personalizar modelo . Para os seguintes casos de uso, você deve usar um tipo diferente de modelo:
  • Prever o tipo e a posição de um ou mais objetos em uma imagem (consulte Detecção de objetos )
  • Previsão da composição de uma imagem, por exemplo, assunto versus plano de fundo (consulte Segmentação )
Depois de executar o modelo inicial em seu dispositivo de destino, você pode experimentar diferentes modelos para encontrar o equilíbrio ideal entre desempenho, precisão e tamanho do modelo.

Personalizar modelo

Os modelos pré-treinados fornecidos são treinados para reconhecer 1000 classes de imagens. Para obter uma lista completa de classes, consulte o arquivo de rótulos no zip do modelo . Você também pode usar o aprendizado de transferência para treinar novamente um modelo para reconhecer classes que não estão no conjunto original. Por exemplo, você pode treinar novamente o modelo para distinguir entre diferentes espécies de árvore, apesar de não haver árvores nos dados de treinamento originais. Para fazer isso, você precisará de um conjunto de imagens de treinamento para cada um dos novos rótulos que deseja treinar. Saiba como realizar o aprendizado de transferência com o TFLite Model Maker ou no codelab Reconhecer flores com o TensorFlow.

Referências de desempenho

O desempenho do modelo é medido em termos da quantidade de tempo que leva para um modelo executar inferência em uma determinada peça de hardware. Quanto menor o tempo, mais rápido o modelo. O desempenho de que você precisa depende do seu aplicativo. O desempenho pode ser importante para aplicativos como vídeo em tempo real, onde pode ser importante analisar cada quadro antes do próximo quadro ser desenhado (por exemplo, a inferência deve ser mais rápida que 33 ms para realizar inferência em tempo real em um fluxo de vídeo de 30 fps) . O desempenho dos modelos MobileNet quantificados do TensorFlow Lite varia de 3,7 ms a 80,3 ms. Os números de benchmark de desempenho são gerados com a ferramenta de benchmarking .
Nome do modelo Tamanho do modelo Dispositivo NNAPI CPU
Mobilenet_V1_1.0_224_quant 4,3 MB Pixel 3 (Android 10) 6ms 13ms*
Pixel 4 (Android 10) 3,3 ms 5ms*
iPhone XS (iOS 12.4.1) 11 ms**

* 4 fios usados.

** 2 threads usadas no iPhone para obter o melhor resultado de desempenho.

Precisão do modelo

A precisão é medida em termos da frequência com que o modelo classifica corretamente uma imagem. Por exemplo, pode-se esperar que um modelo com uma precisão declarada de 60% classifique uma imagem corretamente em média 60% das vezes.

As métricas de precisão mais relevantes são Top-1 e Top-5. Top-1 refere-se à frequência com que o rótulo correto aparece como o rótulo com maior probabilidade na saída do modelo. Top-5 refere-se à frequência com que o rótulo correto aparece nas 5 maiores probabilidades na saída do modelo.

A precisão Top-5 dos modelos MobileNet quantificados do TensorFlow Lite varia de 64,4 a 89,9%.

Tamanho do modelo

O tamanho de um modelo em disco varia com seu desempenho e precisão. O tamanho pode ser importante para o desenvolvimento móvel (onde pode afetar os tamanhos de download do aplicativo) ou ao trabalhar com hardware (onde o armazenamento disponível pode ser limitado).

Os tamanhos dos modelos MobileNet quantificados do TensorFlow Lite variam de 0,5 a 3,4 MB.

Leitura adicional e recursos

Use os seguintes recursos para saber mais sobre os conceitos relacionados à classificação de imagens: