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.
Comece já
Comece a usar essa tarefa seguindo um destes guias de implementação para a plataforma em que você está trabalhando:
- Android: exemplo de código - Guia
- Python: exemplo de código - Guia
- Web – Exemplo de código – Guia
- iOS - Exemplo de código - Guia
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:
|
A API Object Detector gera os seguintes resultados para os objetos detectados:
|
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.
Modelo EfficientDet-Lite0 (recomendado)
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 |