Detecção de objetos, Detecção de objetos

Dada uma imagem ou um fluxo de vídeo, um modelo de detecção de objetos 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 do Android

iniciar

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

Se você estiver usando uma plataforma que não seja Android ou iOS, ou se já estiver familiarizado com as APIs do TensorFlow Lite , poderá baixar nosso modelo inicial de detecção de objetos 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 do modelo .

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

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

Exemplos de aplicativos e guias

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

Android

Você pode aproveitar a API pronta para uso da TensorFlow Lite Task Library 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 usando a biblioteca de tarefas e a API do interpretador , respectivamente.

Ver exemplo do Android

iOS

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

Ver 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 API de detecção de objetos do TensorFlow .

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 frutas, junto com um rótulo que especifica a classe de fruta que eles representam (por exemplo, uma maçã, uma banana ou um morango) e dados especificando onde cada objeto aparece em a imagem.

Quando uma imagem é subsequentemente fornecida ao modelo, ele gera uma lista dos objetos que detecta, 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 usa uma imagem como entrada.

Vamos assumir que a imagem esperada é de 300x300 pixels, com três canais (vermelho, azul e verde) por pixel. Isso deve ser alimentado ao modelo como um buffer nivelado 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 nosso có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 correspondente 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 na forma [superior, esquerda, inferior, direita]
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 observar a pontuação e a localização de cada objeto detectado. A pontuação é um número entre 0 e 1 que indica confiança de que o objeto foi genuinamente detectado. Quanto mais próximo o número estiver de 1, mais confiável será o modelo.

Dependendo de sua aplicação, você pode decidir um limite abaixo do qual descartará os resultados da detecção. Para o exemplo atual, um corte sensato é 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 erroneamente 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 erraram porque sua confiança estava baixa).

Por exemplo, na imagem a seguir, uma pêra (que não é um objeto que o modelo foi treinado para detectar) foi erroneamente identificada como uma "pessoa". Este é um exemplo de um falso positivo que pode ser ignorado ao selecionar 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 representando um retângulo delimitador que circunda sua posição. Para o modelo inicial fornecido, os números são ordenados da seguinte forma:

[ principal, esquerda, fundo, certo ]

O valor superior representa a distância da borda superior do retângulo da parte superior da imagem, em pixels. O valor da esquerda 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.

Referências de desempenho

Os números de benchmark 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,6ms 11ms**

* 4 fios usados.

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

Customização do 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 Zoo 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 do TensorFlow Lite pode ser gerado usando estas instruções . Os modelos SSD do TF2 Object Detection Zoo também podem ser convertidos em 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 executam 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. Por favor, 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 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 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 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 aprendizado de 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 um ajuste fino com conjuntos de dados maiores, dê uma olhada nestes guias para treinar seus próprios modelos com a API de detecção de objetos do TensorFlow: TF1 , TF2 . Depois de treinados, eles podem ser convertidos para um formato compatível com TFLite com as instruções aqui: TF1 , TF2