Guia de tarefas de detecção de objetos

Um gato e um cachorro destacados com caixas delimitadoras corretamente rotuladas

A tarefa do detector de objetos do MediaPipe permite detectar a presença e a localização de várias classes de objetos em imagens ou vídeos. Por exemplo, um detector de objetos pode localizar cães em uma imagem. Essa tarefa opera em dados de imagem com um modelo de aprendizado de máquina (ML), aceitando dados estáticos ou um fluxo de vídeo contínuo como entrada e gerando uma lista de resultados de detecção. Cada resultado de detecção representa um objeto que aparece na imagem ou no vídeo.

Teste!

Começar

Para começar a usar essa tarefa, siga um destes guias de implementação para a plataforma em que você está trabalhando:

Esses guias específicos da plataforma mostram uma implementação básica dessa tarefa, incluindo um modelo recomendado e um exemplo de código com opções de configuração recomendadas.

Detalhes da tarefa

Esta seção descreve os recursos, as entradas e as saídas desta tarefa.

Recursos

  • Processamento de imagem de entrada: o processamento inclui rotação, redimensionamento, normalização e conversão de espaço de cores.
  • Localidade do mapa de rótulos: defina o idioma usado para os nomes de exibição.
  • Limite de pontuação: filtre os resultados com base nas pontuações de previsão.
  • Detecção de top-k: filtre os resultados da detecção de números.
  • Lista de permissões e de bloqueio de rótulos: especifique as categorias detectadas.
Entradas da tarefa Saídas de tarefas
A API Object Detector aceita uma entrada de um dos seguintes tipos de dados:
  • Imagens estáticas
  • Frames de vídeo decodificados
  • Feed de vídeo ao vivo
A API Object Detector gera os seguintes resultados para objetos detectados:
  • Categoria de objeto
  • Pontuação de probabilidade
  • Coordenadas da caixa delimitadora

Opções de configuração

Esta tarefa tem as seguintes opções de configuração:

Nome da opção Descrição Intervalo de valor Valor padrão
running_mode Define o modo de execução da tarefa. Há três modos:

IMAGE: o modo para entradas de imagem única.

VÍDEO: o modo para quadros decodificados de um vídeo.

LIVE_STREAM: o modo de uma transmissão ao vivo de dados de entrada, como de uma câmera. Nesse modo, o resultListener precisa ser chamado para configurar um listener para receber resultados de forma assíncrona.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
display_names Define o idioma dos rótulos a serem usados para os nomes de exibição fornecidos nos metadados do modelo da tarefa, se disponível. O padrão é en para o inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado usando a API Writer de metadados do TensorFlow Lite. Código de localidade en
max_results Define o número máximo opcional de resultados de detecção com a maior pontuação a serem retornados. Qualquer número positivo -1 (todos os resultados são retornados)
score_threshold Define o limite de pontuação de previsão que substitui o fornecido nos metadados do modelo (se houver). Resultados abaixo desse valor são rejeitados. Qualquer ponto flutuante Não definido
category_allowlist Define a lista opcional de nomes de categorias permitidos. Se não estiver vazio, os resultados de detecção cujo nome da categoria não estiver neste conjunto serão filtrados. Nomes de categorias duplicados ou desconhecidos são ignorados. Essa opção é mutuamente exclusiva com category_denylist, e o uso de ambas resulta em um erro. Qualquer string Não definido
category_denylist Define a lista opcional de nomes de categorias não permitidos. Se não estiver vazio, os resultados de detecção cujo nome de categoria estiver neste conjunto serão filtrados. Nomes de categorias duplicados ou desconhecidos são ignorados. Essa opção é mutuamente exclusiva de category_allowlist, e o uso das duas resulta em um erro. Qualquer string Não definido

Modelos

A API Object Detector exige que um modelo de detecção de objetos seja feito o download e armazenado no diretório do projeto. Se você ainda não tiver um modelo, comece com o modelo padrão recomendado. Os outros modelos apresentados nesta seção fazem com que você faça trocas entre latência e precisão.

O modelo EfficientDet-Lite0 usa um backbone EfficientNet-Lite0 com um tamanho de entrada de 320x320 e uma rede de recursos BiFPN. O modelo foi treinado com o conjunto de dados COCO (link em inglês), um conjunto de dados de detecção de objetos em grande escala que contém 1,5 milhão de instâncias de objetos e 80 rótulos de objetos. Confira a lista completa de identificadores aceitos. O EfficientDet-Lite0 está disponível como int8, float16 ou float32. Esse modelo é recomendado porque encontra um equilíbrio entre latência e precisão. Ele é preciso e leve o suficiente para muitos casos de uso.

Nome do modelo Forma de entrada Tipo de quantização Versões
EfficientDet-Lite0 (int8) 320 x 320 int8 Mais recente
EfficientDet-Lite0 (float 16) 320 x 320 float 16 Mais recente
EfficientDet-Lite0 (float 32) 320 x 320 Nenhum (float32) Mais recente

Modelo EfficientDet-Lite2

O modelo EfficientDet-Lite2 usa um backbone EfficientNet-Lite2 com um tamanho de entrada de 448x448 e uma rede de recursos BiFPN. O modelo foi treinado com o conjunto de dados COCO (link em inglês), um conjunto de dados de detecção de objetos em grande escala que contém 1,5 milhão de instâncias de objetos e 80 rótulos de objetos. Consulte a lista completa de identificadores aceitos. O EfficientDet-Lite2 está disponível como um modelo int8, float16 ou float32. Esse modelo geralmente é mais preciso do que o EfficientDet-Lite0, mas também é mais lento e consome mais memória. Esse modelo é adequado para casos de uso em que a precisão é uma prioridade maior do que a velocidade e o tamanho.

Nome do modelo Forma de entrada Tipo de quantização Versões
EfficientDet-Lite2 (int8) 448 x 448 int8 Mais recente
EfficientDet-Lite2 (float 16) 448 x 448 float 16 Mais recente
EfficientDet-Lite2 (float 32) 448 x 448 Nenhum (float32) Mais recente

Modelo SSD MobileNetV2

O modelo SSD MobileNetV2 usa uma backbone MobileNetV2 com um tamanho de entrada de 256x256 e uma rede de recursos SSD. O modelo foi treinado com o conjunto de dados COCO (link em inglês), um conjunto de dados de detecção de objetos em grande escala que contém 1,5 milhão de instâncias de objetos e 80 rótulos de objetos. Consulte a lista completa de identificadores aceitos. O SSD MobileNetV2 está disponível como um modelo int8 e float 32. Esse modelo é mais rápido e leve do que o EfficientDet-Lite0, mas também é geralmente menos preciso. Esse modelo é adequado para casos de uso que exigem um modelo rápido e leve que sacrifica um pouco de precisão.

Nome do modelo Forma de entrada Tipo de quantização Versões
SSDMobileNet-V2 (int8) 256 x 256 int8 Mais recente
SSDMobileNet-V2 (float 32) 256 x 256 Nenhum (float32) Mais recente

Requisitos do modelo e metadados

Esta seção descreve os requisitos para modelos personalizados, caso você decida criar um modelo para usar com esta tarefa. Os modelos personalizados precisam estar no formato TensorFlow Lite e incluir metadata que descrevem os parâmetros operacionais do modelo.

Requisitos de design

Entrada Forma Descrição
Imagem de entrada Tensor Float32 de forma [1, height, width, 3] A imagem de entrada normalizada.
Saída Forma Descrição
detection_boxes Tensor float32 de forma [1, num_boxes, 4] Local da caixa de cada objeto detectado.
detection_classes Tensor float32 de forma [1, num_boxes] Índices dos nomes de classe para cada objeto detectado.
detection_scores Tensor float32 de forma [1, num_boxes] Pontuações de previsão para cada objeto detectado.
num_boxes Tensor float32 de tamanho 1 O número de caixas detectadas.

Requisitos de metadados

Parâmetro Descrição Descrição
input_norm_mean O valor médio usado na normalização de tensor de entrada. A imagem de entrada normalizada.
input_norm_std A norma de campo usada na normalização de tensor de entrada. Local da caixa de cada objeto detectado.
label_file_paths Os caminhos para os arquivos de marcador de tensor de categoria. Se o modelo não tiver arquivos de rótulo, transmita uma lista vazia. Índices dos nomes de classe para cada objeto detectado.
score_calibration_md Informações sobre a operação de calibragem de pontuação no tensor de classificação. Esse parâmetro não é obrigatório se o modelo não usa a calibração de nota
.
Pontuações de previsão para cada objeto detectado.
num_boxes Tensor float32 de tamanho 1 O número de caixas detectadas.

Comparações de mercado de tarefas

Confira os comparativos de mercado para os modelos pré-treinados acima. O resultado da latência é a latência média no Pixel 6 usando CPU / GPU.

Nome do modelo Latência da CPU Latência da GPU
Modelo float32 EfficientDet-Lite0 61,30 ms 27,83 ms
Modelo float16 do EfficientDet-Lite0 53,97 ms 27,97 ms
Modelo EfficientDet-Lite0 int8 29,31 ms -
Modelo float32 EfficientDet-Lite2 197,98 ms 41,15 ms
Modelo EfficientDet-Lite2 float16 198,77 ms 47,31 ms
Modelo EfficientDet-Lite2 int8 70,91 ms -
Modelo SSD MobileNetV2 float32 36,30 ms 24,01 ms
Modelo float16 SSD MobileNetV2 37,35 ms 28,16 ms