Guia de tarefas de detecção de objetos

A tarefa 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 machine learning (ML), aceitando dados estáticos ou um stream 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.

Faça um teste.

Comece já

Comece a usar essa tarefa seguindo um destes guias de implementação para a plataforma em que você está trabalhando:

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

Detalhes da tarefa

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

Recursos

  • Processamento de imagem de entrada: o processamento inclui rotação, redimensionamento, normalização e conversão do espaço de cor de imagens.
  • Localidade do mapa do marcador: define 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: filtra os resultados da detecção de número.
  • Lista de permissões e de bloqueio de marcadores: especifique as categorias detectadas.
Entradas de tarefas 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 os objetos detectados:
  • Categoria de objeto
  • Pontuação de probabilidade
  • Coordenadas da caixa delimitadora

Opções de configuração

Essa 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.

VIDEO: o modo para frames decodificados de um vídeo.

LIVE_STREAM: é o modo para 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 ser usado para nomes de exibição fornecidos nos metadados do modelo da tarefa, se disponível. O padrão é en para inglês. É possível adicionar rótulos localizados aos metadados de um modelo personalizado usando a API TensorFlow Lite Metadata Writer Código da localidade en
max_results Define o número máximo opcional de resultados de detecção com a melhor pontuação a ser retornado. 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). Os resultados abaixo desse valor são rejeitados. Qualquer ponto flutuante Não definido
category_allowlist Define a lista opcional de nomes de categorias permitidas. Se não estiver vazio, os resultados da detecção com o nome de categoria que não estiver nesse conjunto serão filtrados. Nomes de categoria duplicados ou desconhecidos são ignorados. Essa opção é mutuamente exclusiva com category_denylist, e o uso de ambos resulta em um erro. Qualquer string Não definido
category_denylist Define a lista opcional de nomes de categorias que não são permitidos. Se não estiver vazio, os resultados de detecção com o nome de categoria nesse conjunto serão filtrados. Nomes de categoria duplicados ou desconhecidos são ignorados. Essa opção é mutuamente exclusiva com category_allowlist, e o uso de ambos resulta em um erro. Qualquer string Não definido

Modelos

A API Object Detector requer o download e o armazenamento de um modelo de detecção de objetos no diretório do projeto. Se você ainda não tem um modelo, comece com o modelo padrão recomendado. Os outros modelos apresentados nesta seção têm o equilíbrio entre latência e acurácia.

O modelo EfficientDet-Lite0 usa um backbone EfficientNet-Lite0 com um tamanho de entrada de 320 x 320 e uma rede de recursos BiFPN. O modelo foi treinado com o conjunto de dados COCO, 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. Veja a lista completa de rótulos compatíveis. O EfficientDet-Lite0 está disponível como int8, float16 ou float32. Esse modelo é recomendado porque alcança um equilíbrio entre latência e acurácia. Ele é preciso e leve o suficiente para muitos casos de uso.

Nome do modelo Forma de entrada Tipo de quantização Versions
EfficientDet-Lite0 (int8) 320 x 320 int8 Mais recente
EfficientDet-Lite0 (flutuante 16) 320 x 320 ponto flutuante 16 Mais recente
EfficientDet-Lite0 (flutuante 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 448 x 448 e uma rede de recursos BiFPN. O modelo foi treinado com o conjunto de dados COCO, 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. Veja a lista completa de rótulos compatíveis. O EfficientDet-Lite2 está disponível como um modelo int8, float16 ou float32. Em geral, esse modelo é mais preciso do que o EfficientDet-Lite0, mas é mais lento e consome mais memória. Esse modelo é apropriado para casos de uso em que a acurácia é uma prioridade maior em relação à velocidade e ao tamanho.

Nome do modelo Forma de entrada Tipo de quantização Versions
EfficientDet-Lite2 (int8) (link em inglês) 448 x 448 int8 Mais recente
EfficientDet-Lite2 (flutuante 16) 448 x 448 ponto flutuante 16 Mais recente
EfficientDet-Lite2 (flutuante 32) 448 x 448 Nenhum (float32) Mais recente

Modelo MobileNetV2 de SSD

O modelo SSD MobileNetV2 usa um backbone MobileNetV2 com tamanho de entrada 256 x 256 e rede de recursos SSD. O modelo foi treinado com o conjunto de dados COCO, 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. Veja a lista completa de rótulos compatíveis. O SSD MobileNetV2 está disponível como um modelo int8 e float32. Esse modelo é mais rápido e mais leve que o EfficientDet-Lite0, mas também é geralmente menos preciso. Esse modelo é apropriado para casos de uso que exigem um modelo rápido e leve que sacrifique um pouco a acurácia.

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

Requisitos e metadados do modelo

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

Requisitos de design

Entrada Formato Descrição
Imagem de entrada Tensor de forma Float32[1, altura, largura, 3] A imagem de entrada normalizada.
Saída Formato Descrição
detection_boxes Tensor de forma Float32 [1, num_boxes, 4] Local da caixa de cada objeto detectado.
detection_classes Tensor de forma Float32 [1, num_boxes] Índices dos nomes de classes de 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 do tensor de entrada. A imagem de entrada normalizada.
input_norm_std A norma de campo usada na normalização do tensor de entrada. Local da caixa de cada objeto detectado.
label_file_paths Os caminhos para os arquivos de rótulo do tensor de categoria. Se o modelo não tiver nenhum arquivo de rótulo, transmita uma lista vazia. Índices dos nomes de classes de cada objeto detectado.
score_calibration_md Informações sobre a operação de calibração de pontuação no tensor de classificação. Esse parâmetro não é necessário se o modelo não usa a calibração
de pontuação.
Pontuações de previsão para cada objeto detectado.
num_boxes Tensor Float32 de tamanho 1 O número de caixas detectadas.

Comparativos de mercado de tarefas

Aqui estão 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 EfficientDet-Lite0 float32 61,30 ms 27,83 ms
Modelo EfficientDet-Lite0 float16 53,97 ms 27,97 ms
Modelo int8 EfficientDet-Lite0 29,31 ms -
Modelo EfficientDet-Lite2 float32 197,98 ms 41,15ms
Modelo EfficientDet-Lite2 float16 198,77 ms 47,31 ms
Modelo int8 EfficientDet-Lite2 70,91 ms -
Modelo SSD MobileNetV2 float32 36,30 ms 24,01 ms
Modelo SSD MobileNetV2 float16 37,35 ms 28,16 ms