Partilhar via


Treinar um modelo de deteção de objetos pequenos com AutoML (visualização) (v1)

APLICA-SE A: Python SDK azureml v1

Importante

Alguns dos comandos da CLI do Azure neste artigo usam a extensão , ou v1, para o azure-cli-mlAzure Machine Learning. O suporte para a extensão v1 terminará em 30 de setembro de 2025. Você poderá instalar e usar a extensão v1 até essa data.

Recomendamos que você faça a transição para a mlextensão , ou v2, antes de 30 de setembro de 2025. Para obter mais informações sobre a extensão v2, consulte Extensão CLI do Azure ML e Python SDK v2.

Importante

Esta funcionalidade está atualmente em pré-visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.

Neste artigo, você aprenderá como treinar um modelo de deteção de objetos para detetar pequenos objetos em imagens de alta resolução com ML automatizado no Aprendizado de Máquina do Azure.

Normalmente, os modelos de visão computacional para deteção de objetos funcionam bem para conjuntos de dados com objetos relativamente grandes. No entanto, devido a restrições de memória e computação, esses modelos tendem a ter um desempenho inferior quando encarregados de detetar pequenos objetos em imagens de alta resolução. Como as imagens de alta resolução são normalmente grandes, elas são redimensionadas antes da entrada no modelo, o que limita sua capacidade de detetar objetos menores - em relação ao tamanho inicial da imagem.

Para ajudar com esse problema, o ML automatizado suporta mosaico como parte dos recursos de visão computacional de visualização pública. A capacidade de mosaico no ML automatizado baseia-se nos conceitos de The Power of Tiling for Small Object Detection.

Ao lado a lado, cada imagem é dividida em uma grade de blocos. As telhas adjacentes sobrepõem-se umas às outras em dimensões de largura e altura. Os blocos são cortados do original, conforme mostrado na imagem a seguir.

Diagrama que mostra uma imagem sendo dividida em uma grade de blocos sobrepostos.

Pré-requisitos

Modelos suportados

A deteção de objetos pequenos usando mosaicos é suportada para todos os modelos suportados pelo ML automatizado para imagens para tarefas de deteção de objetos.

Ativar mosaico durante o treinamento

Para habilitar o mosaico, você pode definir o tile_grid_size parâmetro para um valor como (3, 2), onde 3 é o número de blocos ao longo da dimensão largura e 2 é o número de blocos ao longo da dimensão altura. Quando esse parâmetro é definido como (3, 2), cada imagem é dividida em uma grade de 3 x 2 blocos. Cada bloco se sobrepõe aos blocos adjacentes, de modo que todos os objetos que caem na borda do bloco são incluídos completamente em um dos blocos. Essa sobreposição pode ser controlada pelo tile_overlap_ratio parâmetro, que tem como padrão 25%.

Quando o mosaico está ativado, toda a imagem e os mosaicos gerados a partir dela são passados pelo modelo. Estas imagens e mosaicos são redimensionados de acordo com os min_size parâmetros e max_size antes de alimentar o modelo. O tempo de cálculo aumenta proporcionalmente devido ao processamento desses dados extras.

Por exemplo, quando o tile_grid_size parâmetro é (3, 2), o tempo de cálculo seria aproximadamente sete vezes maior do que sem tiling.

Você pode especificar o valor para tile_grid_size em seu espaço de hiperparâmetro como uma cadeia de caracteres.

parameter_space = {
    'model_name': choice('fasterrcnn_resnet50_fpn'),
    'tile_grid_size': choice('(3, 2)'),
    ...
}

O valor para tile_grid_size o parâmetro depende das dimensões da imagem e do tamanho dos objetos dentro da imagem. Por exemplo, um número maior de blocos seria útil quando há objetos menores nas imagens.

Para escolher o valor ideal para esse parâmetro para seu conjunto de dados, você pode usar a pesquisa de hiperparâmetros. Para fazer isso, você pode especificar uma escolha de valores para esse parâmetro em seu espaço de hiperparâmetro.

parameter_space = {
    'model_name': choice('fasterrcnn_resnet50_fpn'),
    'tile_grid_size': choice('(2, 1)', '(3, 2)', '(5, 3)'),
    ...
}

Mosaico durante a inferência

Quando um modelo treinado com mosaico é implantado, o mosaico também ocorre durante a inferência. O ML automatizado usa o tile_grid_size valor do treinamento para gerar os blocos durante a inferência. A imagem inteira e os blocos correspondentes são passados pelo modelo, e as propostas de objeto deles são mescladas para gerar previsões finais, como na imagem a seguir.

Diagrama que mostra propostas de objetos de imagem e blocos sendo mesclados para formar as previsões finais.

Nota

É possível que o mesmo objeto seja detetado a partir de vários blocos, a deteção de duplicação é feita para remover essas duplicatas.

A deteção de duplicados é feita executando o NMS nas propostas dos blocos e da imagem. Quando várias propostas se sobrepõem, a que tiver a pontuação mais alta é escolhida e outras são descartadas como duplicatas. Duas propostas são consideradas sobrepostas quando a intersecção sobre união (iou) entre elas é maior do que o tile_predictions_nms_thresh parâmetro.

Você também tem a opção de habilitar o mosaico somente durante a inferência sem habilitá-lo no treinamento. Para fazer isso, defina o parâmetro apenas durante a tile_grid_size inferência, não para treinamento.

Isso pode melhorar o desempenho de alguns conjuntos de dados e não incorrerá no custo extra que vem com o mosaico no momento do treinamento.

Hiperparâmetros de ladrilhos

A seguir estão os parâmetros que você pode usar para controlar o recurso de mosaico.

Nome do Parâmetro Description Predefinido
tile_grid_size O tamanho da grade a ser usado para colocar lado a lado cada imagem. Disponível para uso durante treinamento, validação e inferência.

Tupla de dois inteiros passados como uma cadeia de caracteres, por exemplo '(3, 2)'

Nota: A definição deste parâmetro aumenta proporcionalmente o tempo de cálculo, uma vez que todos os mosaicos e imagens são processados pelo modelo.
sem valor padrão
tile_overlap_ratio Controla a taxa de sobreposição entre blocos adjacentes em cada dimensão. Quando os objetos que caem no limite do bloco forem muito grandes para caber completamente em um dos blocos, aumente o valor desse parâmetro para que os objetos se encaixem em pelo menos um dos blocos completamente.

Deve ser um flutuador em [0, 1].
0.25
tile_predictions_nms_thresh A interseção acima do limite de união a ser usada para fazer supressão não máxima (nms) ao mesclar previsões de blocos e imagem. Disponível durante a validação e inferência. Altere esse parâmetro se houver várias caixas detetadas por objeto nas previsões finais.

Deve ser flutuante em [0, 1].
0.25

Blocos de notas de exemplo

Consulte o bloco de anotações de exemplo de deteção de objetos para obter exemplos de código detalhados de configuração e treinamento de um modelo de deteção de objetos.

Nota

Todas as imagens neste artigo são disponibilizadas de acordo com a seção de uso permitido do contrato de licenciamento do MIT. Direitos autorais © 2020 Roboflow, Inc.

Próximos passos