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.
Começar
Para começar a usar essa tarefa, siga 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
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:
|
A API Object Detector gera os seguintes resultados para objetos detectados:
|
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.
Modelo EfficientDet-Lite0 (recomendado)
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 |