Partilhar via


Tutorial: Detetar sinais de paragem em imagens com o Model Builder

Saiba como criar um modelo de deteção de objetos com o ML.NET Model Builder e o Azure Machine Learning para detetar e localizar sinais de paragem em imagens.

Neste tutorial, ficará a saber como:

  • Preparar e compreender os dados
  • Criar um ficheiro de configuração do Model Builder
  • Escolher o cenário
  • Escolher o ambiente de preparação
  • Carregar os dados
  • Preparar o modelo
  • Avaliar o modelo
  • Utilizar o modelo para predições

Pré-requisitos

Para obter uma lista de pré-requisitos e instruções de instalação, visite o Guia de instalação do Model Builder.

Descrição geral da deteção de objetos do Model Builder

A deteção de objetos é um problema de imagem digitalizada. Embora intimamente relacionada com a classificação de imagens, a deteção de objetos efetua a classificação de imagens numa escala mais granular. A deteção de objetos localiza e categoriza entidades em imagens. Os modelos de deteção de objetos são normalmente preparados com a aprendizagem profunda e as redes neurais. Veja Aprendizagem profunda vs machine learning para obter mais informações.

Utilize a deteção de objetos quando as imagens contêm vários objetos de diferentes tipos.

Capturas de ecrã a mostrar a Classificação de Imagens versus Classificação de Objetos.

Alguns casos de utilização da deteção de objetos incluem:

  • Self-Driving Cars
  • Robótica
  • Deteção de Rostos
  • Segurança no Local de Trabalho
  • Contagem de Objetos
  • Reconhecimento de Atividade

Este exemplo cria uma aplicação de consola C# .NET Core que deteta sinais de paragem em imagens com um modelo de machine learning criado com o Model Builder. Pode encontrar o código fonte deste tutorial no repositório do GitHub dotnet/machinelearning-samples .

Preparar e compreender os dados

O conjunto de dados Parar Sinal consiste em 50 imagens transferidas de Unsplash, cada uma das quais contém pelo menos um sinal de paragem.

Criar um novo projeto VoTT

  1. Transfira o conjunto de dados de 50 imagens de sinal de paragem e deszipe.

  2. Transfira o VoTT (Visual Object Tagging Tool).

  3. Abra o VoTT e selecione Novo Projeto.

    Ecrã Principal VoTT

  4. Em Definições do Projeto, altere o Nome a Apresentar para "StopSignObjDetection".

  5. Altere o Token de Segurança para Gerar Novo Token de Segurança.

  6. Junto a Ligação de Origem, selecione Adicionar Ligação.

  7. Em Definições de Ligação, altere o Nome a Apresentar da ligação de origem para "StopSignImages" e selecione Sistema de Ficheiros Local como Fornecedor. Para o Caminho da Pasta, selecione a pasta Stop-Signs que contém as 50 imagens de preparação e, em seguida, selecione Guardar Ligação.

    Caixa de Diálogo Nova Ligação VoTT

  8. Em Definições do Projeto, altere a Ligação de Origem para StopSignImages (a ligação que acabou de criar).

  9. Altere também a Ligação de Destino para StopSignImages . As Definições do Projeto devem agora ter um aspeto semelhante a esta captura de ecrã:

    Caixa de Diálogo Definições do Projeto VoTT

  10. Selecione Guardar Projeto.

Adicionar etiquetas e etiquetar imagens

Deverá agora ver uma janela com imagens de pré-visualização de todas as imagens de preparação à esquerda, uma pré-visualização da imagem selecionada no meio e uma coluna Etiquetas à direita. Este ecrã é o editor de Etiquetas.

  1. Selecione o primeiro ícone (em forma de adição) na barra de ferramentas Etiquetas para adicionar uma nova etiqueta.

    Ícone de Nova Etiqueta VoTT

  2. Atribua o nome "Stop-Sign" à etiqueta e prima Enter no teclado.

    Nova Etiqueta VoTT

  3. Clique e arraste para desenhar um retângulo à volta de cada sinal de paragem na imagem. Se o cursor não lhe permitir desenhar um retângulo, experimente selecionar a ferramenta Desenhar Retângulo na barra de ferramentas na parte superior ou utilizar o atalho de teclado R.

  4. Depois de desenhar o retângulo, selecione a etiqueta Stop-Sign que criou nos passos anteriores para adicionar a etiqueta à caixa delimitadora.

  5. Clique na imagem de pré-visualização da imagem seguinte no conjunto de dados e repita este processo.

  6. Continue os passos 3 a 4 para cada sinal de paragem em cada imagem.

    Imagens de Anotação VoTT

Exportar o seu JSON VoTT

Depois de etiquetar todas as imagens de preparação, pode exportar o ficheiro que será utilizado pelo Model Builder para preparação.

  1. Selecione o quarto ícone na barra de ferramentas esquerda (aquele com a seta diagonal numa caixa) para aceder às Definições de Exportação.

  2. Deixe o Fornecedor como JSON VoTT.

  3. Altere o Estado do Recurso para Apenas Recursos etiquetados.

  4. Desmarque Incluir Imagens. Se incluir as imagens, as imagens de preparação serão copiadas para a pasta de exportação que é gerada, o que não é necessário.

  5. Selecione Guardar Definições de Exportação.

    Definições de Exportação de VoTT

  6. Voltar ao editor de Etiquetas (o segundo ícone na barra de ferramentas esquerda em forma de friso). Na barra de ferramentas superior, selecione o ícone Exportar Projeto (o último ícone em forma de seta numa caixa) ou utilize o atalho de teclado Ctrl+E.

    Botão Exportar VoTT

Esta exportação irá criar uma nova pasta denominada vott-json-export na pasta Stop-Sign-Images e irá gerar um ficheiro JSON com o nome StopSignObjDetection-export nessa nova pasta. Irá utilizar este ficheiro JSON nos próximos passos para preparar um modelo de deteção de objetos no Model Builder.

Criar uma aplicação de consola

No Visual Studio, crie uma aplicação de consola C# .NET Core denominadaStopSignDetection.

Criar um mbconfig ficheiro

  1. No Explorador de Soluções, clique com o botão direito do rato no projeto StopSignDetection e selecione Adicionar>Modelo de Machine Learning... para abrir a IU do Model Builder.
  2. Na caixa de diálogo, atribua o nome StopSignDetection ao projeto do Model Builder e clique em Adicionar.

Escolher um cenário

Para este exemplo, o cenário é a deteção de objetos. No passo Cenário do Construtor de Modelos, selecione o cenário de Deteção de Objetos .

Assistente do Model Builder no Visual Studio

Se não vir a Deteção de Objetos na lista de cenários, poderá ter de atualizar a sua versão do Model Builder.

Escolher o ambiente de preparação

Atualmente, o Model Builder suporta a preparação de modelos de deteção de objetos apenas com o Azure Machine Learning, pelo que o ambiente de preparação do Azure está selecionado por predefinição.

Seleção do ambiente de preparação do Azure

Para preparar um modelo com o Azure ML, tem de criar uma experimentação do Azure ML a partir do Model Builder.

Uma experimentação do Azure ML é um recurso que encapsula a configuração e os resultados de uma ou mais execuções de preparação de machine learning.

Para criar uma experimentação do Azure ML, primeiro tem de configurar o seu ambiente no Azure. Uma experimentação precisa do seguinte para ser executada:

  • Uma subscrição do Azure
  • Uma área de trabalho: um recurso do Azure ML que fornece um local central para todos os recursos e artefactos do Azure ML criados como parte de uma execução de preparação.
  • Uma computação: uma computação do Azure Machine Learning é uma VM do Linux baseada na cloud utilizada para preparação. Saiba mais sobre os tipos de computação suportados pelo Model Builder.

Configurar uma área de trabalho do Azure ML

Para configurar o seu ambiente:

  1. Selecione o botão Configurar área de trabalho .

  2. Na caixa de diálogo Criar nova experimentação , selecione a sua subscrição do Azure.

  3. Selecione uma área de trabalho existente ou crie uma nova área de trabalho do Azure ML.

    Quando cria uma nova área de trabalho, são aprovisionados os seguintes recursos:

    • Área de trabalho do Azure Machine Learning
    • Armazenamento do Azure
    • Azure Application Insights
    • Registo de Contentores do Azure
    • Azure Key Vault

    Como resultado, este processo pode demorar alguns minutos.

  4. Selecione uma computação existente ou crie uma nova computação do Azure ML. Este processo pode demorar alguns minutos.

  5. Deixe o nome da experimentação predefinido e selecione Criar.

    Caixa de Diálogo de Configuração da Área de Trabalho do Azure

A primeira experimentação é criada e o nome da experimentação é registado na área de trabalho. Todas as execuções subsequentes (se for utilizado o mesmo nome da experimentação) são registadas como parte da mesma experimentação. Caso contrário, é criada uma nova experimentação.

Se estiver satisfeito com a configuração, selecione o botão Passo seguinte no Construtor de Modelos para ir para o passo Dados .

Carregar os dados

No passo Dados do Model Builder, irá selecionar o conjunto de dados de preparação.

Importante

Atualmente, o Model Builder só aceita o formato JSON gerado pelo VoTT.

  1. Selecione o botão na secção Entrada e utilize o Explorador de Ficheiros para localizar o StopSignObjDetection-export.json que deve estar localizado no diretório Stop-Signs/vott-json-export.

    Passo de Dados do Model Builder

  2. Se os seus dados estiverem corretos na Pré-visualização de Dados, selecione Passo seguinte para avançar para o passo Preparar .

Preparar o modelo

O próximo passo é preparar o modelo.

No ecrã Preparação do Model Builder, selecione o botão Iniciar preparação .

Neste momento, os seus dados são carregados para o Armazenamento do Azure e o processo de preparação começa no Azure ML.

O processo de preparação demora algum tempo e a quantidade de tempo pode variar consoante o tamanho da computação selecionada, bem como a quantidade de dados. Na primeira vez que um modelo é preparado no Azure, pode esperar um tempo de preparação um pouco mais longo porque os recursos têm de ser aprovisionados. Para este exemplo de 50 imagens, o treino demorou cerca de 16 minutos.

Pode controlar o progresso das suas execuções no portal do Azure Machine Learning ao selecionar a ligação Monitorizar a execução atual no portal do Azure no Visual Studio.

Quando a preparação estiver concluída, selecione o botão Passo seguinte para avançar para o passo Avaliar .

Avaliar o modelo

No ecrã Avaliar, obtém uma descrição geral dos resultados do processo de preparação, incluindo a precisão do modelo.

Passo de Avaliação do Construtor de Modelos

Neste caso, a precisão diz 100%, o que significa que o modelo é mais do que provável sobreajuste devido a poucas imagens no conjunto de dados.

Pode utilizar a experiência Experimentar o modelo para verificar rapidamente se o modelo está a funcionar conforme esperado.

Selecione Procurar uma imagem e forneça uma imagem de teste, preferencialmente uma que o modelo não tenha utilizado como parte da preparação.

Model Builder Experimente o modelo

A classificação apresentada em cada caixa delimitadora detetada indica a confiança do objeto detetado. Por exemplo, na captura de ecrã acima, a classificação na caixa delimitadora à volta do sinal de paragem indica que o modelo tem 99% de certeza de que o objeto detetado é um sinal de paragem.

O limiar de Classificação, que pode ser aumentado ou diminuído com o controlo de deslize de limiar, irá adicionar e remover objetos detetados com base nas respetivas pontuações. Por exemplo, se o limiar for 0,51, o modelo só mostrará objetos que tenham uma classificação de confiança igual ou superior a 0,51. À medida que aumenta o limiar, verá objetos menos detetados e, à medida que diminui o limiar, verá mais objetos detetados.

Se não estiver satisfeito com as métricas de precisão, uma forma fácil de tentar melhorar a precisão do modelo é utilizar mais dados. Caso contrário, selecione a ligação Passo seguinte para avançar para o passo Consumir no Model Builder.

(Opcional) Consumir o modelo

Este passo terá modelos de projeto que pode utilizar para consumir o modelo. Este passo é opcional e pode escolher o método que melhor se adequa às suas necessidades sobre como servir o modelo.

  • Aplicação consola
  • API Web

Aplicação consola

Ao adicionar uma aplicação de consola à sua solução, ser-lhe-á pedido que atribua um nome ao projeto.

  1. Dê um nome ao projeto da consola StopSignDetection_Console.

  2. Clique em Adicionar à solução para adicionar o projeto à sua solução atual.

  3. Execute a aplicação.

    O resultado gerado pelo programa deve ter um aspeto semelhante ao fragmento abaixo:

    Predicted Boxes:
    
    Top: 73.225296, Left: 256.89764, Right: 533.8884, Bottom: 484.24243, Label: stop-sign, Score: 0.9970765
    

API Web

Ao adicionar uma API Web à sua solução, ser-lhe-á pedido que atribua um nome ao projeto.

  1. Dê um nome ao projeto da API Web StopSignDetection_API.

  2. Clique em Adicionar à solução para adicionar o projeto à sua solução atual.

  3. Execute a aplicação.

  4. Abra o PowerShell e introduza o seguinte código onde PORT é a porta onde a sua aplicação está a escutar.

    $body = @{
         ImageSource = <Image location on your local machine>
     }
    
     Invoke-RestMethod "https://localhost:<PORT>/predict" -Method Post -Body ($body | ConvertTo-Json) -ContentType "application/json"
    
  5. Se for bem-sucedido, o resultado deverá ter um aspeto semelhante ao texto abaixo.

    boxes                                      labels scores       boundingBoxes
    -----                                      ------ ------       -------------
    {339.97797, 154.43184, 472.6338, 245.0796} {1}    {0.99273646} {}
    
    • A boxes coluna fornece as coordenadas da caixa delimitadora do objeto que foi detetado. Os valores aqui pertencem às coordenadas esquerda, superior, direita e inferior, respetivamente.
    • São labels o índice das etiquetas previstas. Neste caso, o valor 1 é um sinal de paragem.
    • O scores define o quão confiante é o modelo de que a caixa delimitadora pertence a essa etiqueta.

    Nota

    (Opcional) As coordenadas da caixa delimitadora são normalizadas para uma largura de 800 pixéis e uma altura de 600 pixéis. Para dimensionar as coordenadas da caixa delimitadora para a sua imagem em mais pós-processamento, tem de:

    1. Multiplique as coordenadas superior e inferior pela altura original da imagem e multiplique as coordenadas esquerda e direita pela largura original da imagem.
    2. Divida as coordenadas superior e inferior por 600 e divida as coordenadas esquerda e direita por 800.

    Por exemplo, dadas as dimensões originais da imagem eactualImageHeightactualImageWidth, e um ModelOutput chamado prediction, o fragmento de código seguinte mostra como dimensionar as BoundingBox coordenadas:

    var top = originalImageHeight * prediction.Top / 600;
    var bottom = originalImageHeight * prediction.Bottom / 600;
    var left = originalImageWidth * prediction.Left / 800;
    var right = originalImageWidth * prediction.Right / 800;
    

    Uma imagem pode ter mais do que uma caixa delimitadora, pelo que o mesmo processo tem de ser aplicado a cada uma das caixas delimitadoras na imagem.

Parabéns! Criou com êxito um modelo de machine learning para detetar sinais de paragem em imagens com o Model Builder. Pode encontrar o código fonte deste tutorial no repositório do GitHub dotnet/machinelearning-samples .

Recursos adicionais

Para saber mais sobre os tópicos mencionados neste tutorial, visite os seguintes recursos: