Detecção de objetos

Dada uma imagem ou um fluxo de vídeo, um modelo de detecção de objeto pode identificar qual de um conjunto conhecido de objetos pode estar presente e fornecer informações sobre suas posições na imagem.

Por exemplo, esta captura de tela do aplicativo de exemplo mostra como dois objetos foram reconhecidos e suas posições anotadas:

Captura de tela do exemplo Android

iniciar

Para aprender a usar a detecção de objetos em um aplicativo móvel, explore os aplicativos e guias de exemplo .

Se estiver usando uma plataforma diferente de Android ou iOS, ou se já estiver familiarizado com as APIs TensorFlow Lite , você pode baixar nosso modelo de detecção de objeto inicial e os rótulos que o acompanham.

Baixe o modelo inicial com metadados

Para obter mais informações sobre metadados e campos associados (por exemplo: labels.txt ), consulte Ler os metadados dos modelos

Se você deseja treinar um modelo de detecção personalizado para sua própria tarefa, consulte Personalização de modelo .

Para os seguintes casos de uso, você deve usar um tipo diferente de modelo:

  • Prever qual único rótulo a imagem provavelmente representa (consulte a classificação da imagem )
  • Previsão da composição de uma imagem, por exemplo, assunto versus fundo (ver segmentação )

Aplicativos e guias de exemplo

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

Android

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

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

Veja um exemplo de Android

iOS

Você pode integrar o modelo usando a API TensorFlow Lite Interpreter Swift . Veja o exemplo do iOS abaixo.

Veja um exemplo de iOS

Descrição do modelo

Esta seção descreve a assinatura para modelos de detector de disparo único convertidos para TensorFlow Lite da TensorFlow Object Detection API .

Um modelo de detecção de objetos é treinado para detectar a presença e localização de várias classes de objetos. Por exemplo, um modelo pode ser treinado com imagens que contêm vários pedaços de fruta, junto com um rótulo que especifica a classe de fruta que representam (por exemplo, uma maçã, uma banana ou um morango) e dados especificando onde cada objeto aparece em a imagem.

Quando uma imagem for subsequentemente fornecida ao modelo, ele produzirá uma lista dos objetos detectados, a localização de uma caixa delimitadora que contém cada objeto e uma pontuação que indica a confiança de que a detecção foi correta.

Assinatura de entrada

O modelo recebe uma imagem como entrada.

Vamos supor que a imagem esperada seja 300x300 pixels, com três canais (vermelho, azul e verde) por pixel. Isso deve ser alimentado para o modelo como um buffer achatado de valores de 270.000 bytes (300x300x3). Se o modelo for quantizado , cada valor deve ser um único byte representando um valor entre 0 e 255.

Você pode dar uma olhada em nossocódigo de aplicativo de exemplo para entender como fazer esse pré-processamento no Android.

Assinatura de Saída

O modelo produz quatro matrizes, mapeadas para os índices 0-4. As matrizes 0, 1 e 2 descrevem N objetos detectados, com um elemento em cada matriz correspondendo a cada objeto.

Índice Nome Descrição
0 Localizações Matriz multidimensional de [N] [4] valores de ponto flutuante entre 0 e 1, as matrizes internas representando caixas delimitadoras no formato [superior, esquerdo, inferior, direito]
1 Aulas Matriz de N inteiros (saída como valores de ponto flutuante), cada um indicando o índice de um rótulo de classe do arquivo de rótulos
2 Pontuações Matriz de N valores de ponto flutuante entre 0 e 1 representando a probabilidade de que uma classe foi detectada
3 Número de detecções Valor inteiro de N

Por exemplo, imagine que um modelo foi treinado para detectar maçãs, bananas e morangos. Quando fornecida uma imagem, ela produzirá um número definido de resultados de detecção - neste exemplo, 5.

Aula Pontuação Localização
maçã 0,92 [18, 21, 57, 63]
Banana 0,88 [100, 30, 180, 150]
morango 0,87 [7, 82, 89, 163]
Banana 0,23 [42, 66, 57, 83]
maçã 0,11 [6, 42, 31, 58]

Pontuação de confiança

Para interpretar esses resultados, podemos olhar a pontuação e a localização de cada objeto detectado. A pontuação é um número entre 0 e 1 que indica a confiança de que o objeto foi genuinamente detectado. Quanto mais próximo o número estiver de 1, mais confiante será o modelo.

Dependendo da sua aplicação, você pode decidir um limite de corte abaixo do qual descartará os resultados da detecção. Para o exemplo atual, um corte sensível é uma pontuação de 0,5 (significando uma probabilidade de 50% de que a detecção seja válida). Nesse caso, os dois últimos objetos na matriz seriam ignorados porque essas pontuações de confiança estão abaixo de 0,5:

Aula Pontuação Localização
maçã 0,92 [18, 21, 57, 63]
Banana 0,88 [100, 30, 180, 150]
morango 0,87 [7, 82, 89, 163]
Banana 0,23 [42, 66, 57, 83]
maçã 0,11 [6, 42, 31, 58]

O corte que você usa deve ser baseado em se você está mais confortável com falsos positivos (objetos que são identificados incorretamente, ou áreas da imagem que são erroneamente identificadas como objetos quando não são) ou falsos negativos (objetos genuínos que são perdeu porque sua confiança era baixa).

Por exemplo, na imagem a seguir, uma pêra (que não é um objeto que o modelo foi treinado para detectar) foi identificada incorretamente como uma "pessoa". Este é um exemplo de falso positivo que pode ser ignorado selecionando um corte apropriado. Nesse caso, um corte de 0,6 (ou 60%) excluiria confortavelmente o falso positivo.

Captura de tela do exemplo do Android mostrando um falso positivo

Localização

Para cada objeto detectado, o modelo retornará uma matriz de quatro números que representam um retângulo delimitador que circunda sua posição. Para o modelo inicial fornecido, os números são ordenados da seguinte forma:

[ principal, deixou, inferior, direito ]

O valor superior representa a distância da borda superior do retângulo a partir do topo da imagem, em pixels. O valor esquerdo representa a distância da borda esquerda da esquerda da imagem de entrada. Os outros valores representam as bordas inferior e direita de maneira semelhante.

Benchmarks de desempenho

Os números de referência de desempenho para nosso modelo inicial são gerados com a ferramenta descrita aqui .

Nome do Modelo Tamanho do modelo Dispositivo GPU CPU
COCO SSD MobileNet v1 27 Mb Pixel 3 (Android 10) 22ms 46ms *
Pixel 4 (Android 10) 20ms 29ms *
iPhone XS (iOS 12.4.1) 7,6 ms 11ms **

* 4 fios usados.

** 2 fios usados ​​no iPhone para o melhor resultado de desempenho.

Personalização de modelo

Modelos pré-treinados

Modelos de detecção otimizados para dispositivos móveis com uma variedade de características de latência e precisão podem ser encontrados no Zoológico de Detecção . Cada um deles segue as assinaturas de entrada e saída descritas nas seções a seguir.

A maioria dos zips de download contém um arquivo model.tflite . Se não houver um, um flatbuffer TensorFlow Lite pode ser gerado usando estas instruções . Os modelos SSD do TF2 Object Detection Zoo também podem ser convertidos para TensorFlow Lite usando as instruções aqui . É importante observar que os modelos de detecção não podem ser convertidos diretamente usando o TensorFlow Lite Converter , pois exigem uma etapa intermediária de geração de um modelo de origem compatível com dispositivos móveis Os scripts vinculados acima realizam esta etapa.

Os scripts de exportação TF1 e TF2 têm parâmetros que podem permitir um número maior de objetos de saída ou um pós-processamento mais lento e preciso. Use --help com os scripts para ver uma lista exaustiva de argumentos suportados.

Atualmente, a inferência no dispositivo é otimizada apenas com modelos SSD. Melhor suporte para outras arquiteturas como CenterNet e EfficientDet está sendo investigado.

Como escolher um modelo para customizar?

Cada modelo vem com sua própria precisão (quantificada pelo valor mAP) e características de latência. Você deve escolher um modelo que funcione melhor para seu caso de uso e hardware pretendido. Por exemplo, os modelos Edge TPU são ideais para inferência no Edge TPU do Google no Pixel 4.

Você pode usar nossa ferramenta de benchmark para avaliar modelos e escolher a opção mais eficiente disponível.

Modelos de ajuste fino em dados personalizados

Os modelos pré-treinados que fornecemos são treinados para detectar 90 classes de objetos. Para obter uma lista completa de classes, consulte o arquivo de rótulos nos metadados do modelo .

Você pode usar uma técnica conhecida como aprendizagem por 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 detectar vários tipos de vegetais, apesar de haver apenas um vegetal 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. A maneira recomendada é usar a biblioteca do TensorFlow Lite Model Maker , que simplifica o processo de treinamento de um modelo TensorFlow Lite usando um conjunto de dados personalizado, com algumas linhas de códigos. Ele usa a aprendizagem por transferência para reduzir a quantidade de dados e tempo de treinamento necessários. Você também pode aprender com o Colab de detecção de poucos disparos como um exemplo de ajuste fino de um modelo pré-treinado com poucos exemplos.

Para fazer o ajuste fino com conjuntos de dados maiores, dê uma olhada nestes guias para treinar seus próprios modelos com a API TensorFlow Object Detection: TF1 , TF2 . Depois de treinados, eles podem ser convertidos para um formato compatível com TFLite com as instruções aqui: TF1 , TF2