Detecção de objetos

Dada uma imagem ou fluxo de vídeo, um modelo de detecção de objetos pode identificar quais objetos de um conjunto conhecido podem estar presentes 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 exemplos de aplicativos e guias .

Se você estiver usando uma plataforma diferente de Android ou iOS, ou se já estiver familiarizado com as APIs do TensorFlow Lite , poderá fazer download de nosso modelo inicial de detecção de objetos e dos 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ê quiser 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:

Exemplos de aplicativos e guias

Se você é novo no TensorFlow Lite e trabalha com Android ou iOS, recomendamos explorar os exemplos de aplicativos a seguir 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 Java do TensorFlow Lite Interpreter .

O exemplo Android abaixo demonstra a implementação de ambos os métodos usando a biblioteca Task e a API do interpretador , respectivamente.

Veja exemplo do Android

iOS

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

Veja exemplo do iOS

Descrição do modelo

Esta seção descreve a assinatura para modelos do Single-Shot Detector convertidos para o TensorFlow Lite a partir da API TensorFlow Object Detection .

Um modelo de detecção de objetos é treinado para detectar a presença e localização de múltiplas classes de objetos. Por exemplo, um modelo pode ser treinado com imagens que contenham vários pedaços de fruta, juntamente com um rótulo que especifique a classe de fruta que representam (por exemplo, uma maçã, uma banana ou um morango) e dados que especifiquem onde cada objeto aparece na imagem. a imagem.

Quando uma imagem é posteriormente 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 tenha 300x300 pixels, com três canais (vermelho, azul e verde) por pixel. Isso deve ser alimentado no modelo como um buffer nivelado de 270.000 valores de bytes (300x300x3). Se o modelo for quantizado , cada valor deverá ser um único byte representando um valor entre 0 e 255.

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

Assinatura de saída

O modelo gera 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 uma classe ter sido 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 determinado número 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 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 abaixo do qual descartará os resultados da detecção. Para o exemplo atual, um ponto de corte sensato é uma pontuação de 0,5 (ou seja, uma probabilidade de 50% de que a detecção seja válida). Nesse caso, os dois últimos objetos da 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 limite usado deve basear-se no fato de você se sentir mais confortável com falsos positivos (objetos identificados incorretamente ou áreas da imagem que são identificadas erroneamente como objetos quando não o são) ou falsos negativos (objetos genuínos que são perderam 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 identificada erroneamente como uma “pessoa”. Este é um exemplo de falso positivo que pode ser ignorado selecionando um ponto de corte apropriado. Neste caso, um ponto de 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 ao topo da imagem, em pixels. O valor esquerdo representa a distância da borda esquerda à 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 melhor resultado de desempenho.

Personalizaçã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 Detection Zoo . 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 flatbuffer do TensorFlow Lite poderá ser gerado usando estas instruções . Os modelos SSD do TF2 Object Detection Zoo também podem ser convertidos para o 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 possuem parâmetros que podem permitir um número maior de objetos de saída ou pós-processamento mais lento e preciso. Por favor, use --help com os scripts para ver uma lista completa de argumentos suportados.

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

Como escolher um modelo para personalizar?

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.

Ajustando modelos 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ê poderia 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 forma recomendada é usar a biblioteca TensorFlow Lite Model Maker que simplifica o processo de treinamento de um modelo TensorFlow Lite usando conjunto de dados customizado, com algumas linhas de códigos. Ele usa 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 ajustar conjuntos de dados maiores, consulte estes 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