Participe do Simpósio Women in ML em 7 de dezembro Inscreva-se agora

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

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

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 diferente do Android ou iOS, ou se já estiver familiarizado com as APIs do TensorFlow Lite , faça o download do 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 do modelo .

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

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

Aplicativos e guias de exemplo

Se você é novo no TensorFlow Lite e está trabalhando com Android ou iOS, recomendamos explorar os aplicativos de exemplo 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 do Android abaixo demonstra a implementação de ambos os métodos como lib_task_api e lib_interpreter , respectivamente.

Veja o exemplo do Android

iOS

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

Veja o exemplo do iOS

Descrição do modelo

Esta seção descreve a assinatura para modelos de Single-Shot Detector convertidos para o 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 fruta, juntamente 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 for fornecida posteriormente ao modelo, ele exibirá 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 de 300x300 pixels, com três canais (vermelho, azul e verde) por pixel. Isso deve ser alimentado ao 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 no nosso código de aplicativo de exemplo para entender como fazer esse pré-processamento no Android.

Assinatura de saída

O modelo gera quatro arrays, mapeados 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 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.

Classe 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]

Índice 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 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 (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:

Classe 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ê se sente 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 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 erroneamente como uma "pessoa". Este é um exemplo de um falso positivo que pode ser ignorado selecionando um corte apropriado. Nesse 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:

[ topo, deixei, fundo, certo ]

O valor superior representa a distância da borda superior do retângulo da parte superior da imagem, em pixels. O valor à esquerda 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 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) 20 ms 29ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11 ms**

* 4 fios usados.

** 2 threads usadas no iPhone para obter o 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, 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 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.

Ambos os scripts de exportação TF1 e TF2 possuem parâmetros que podem habilitar 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 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 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.

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 transferência de aprendizado 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 do TensorFlow Lite usando um conjunto de dados personalizado, com algumas linhas de códigos. Ele usa o 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 alguns exemplos.

Para ajustar com conjuntos de dados maiores, consulte estes guias para treinar seus próprios modelos com a API TensorFlow Object Detection: TF1 , TF2 . Uma vez treinados, eles podem ser convertidos para um formato compatível com TFLite com as instruções aqui: TF1 , TF2