Implementando o Aprendizado Ativo

Usando o Active Learning para melhorar rapidamente seus modelos no Roboflow .

Written by Mohamed Traore

Last published at: June 30th, 2022

"O aprendizado ativo é uma estratégia de treinamento de aprendizado de máquina que permite que um algoritmo identifique de forma proativa subconjuntos de dados de treinamento que podem melhorar o desempenho com mais eficiência. Mais simplesmente - o aprendizado ativo é uma estratégia para identificar quais exemplos específicos em nossos dados de treinamento podem melhorar o desempenho do modelo. É um subconjunto de estratégias de aprendizado de máquina humano no circuito para melhorar nossos modelos, aproveitando ao máximo nossos dados de treinamento." - O que é Aprendizagem Ativa?

A beleza do Active Learning é que ele pode ajudá-lo a criar um modelo mais robusto com menos imagens. As rodadas de treinamento que serão necessárias para manter seu modelo funcionando bem e melhorá-lo diminuirão rapidamente com o tempo.

Existem 3 maneiras principais de implementar o Aprendizado Ativo:

1. Colete continuamente novas imagens aleatoriamente

Você pode codificar amostragem aleatória em sua solução de implantação.

A amostragem aleatória ajudará a trazer mais imagens para seu projeto que sejam representativas do verdadeiro ambiente de implantação.

Vantagens:

  1. O modelo aprenderá rapidamente o que detectar e o que não detectar no ambiente em que está presente.
  2. Mais imagens que contêm os objetos de interesse (o que nosso modelo é treinado para detectar) - após rotular e retreinar, nosso modelo se sairá muito melhor em seu ambiente de implantação!

Exemplo:

Você está executando a inferência (implantando seu modelo) por um período de 6 horas. Nesse período de 6 horas, você configura programaticamente seu dispositivo (ou seja, NVIDIA Jetson ou OAK Device) para salvar um determinado número de imagens a cada 15 minutos (ou seja, "salvar 3 imagens a cada 15 minutos"). Devolva as imagens coletadas ao Roboflow ou armazene-as em seus dispositivos/sistema para upload futuro no Roboflow .

  • Com o tempo, você verá menos detecções falsas.
    • Além disso, você obterá algumas imagens com os objetos de interesse (o que seu modelo está treinado para "ver"), independentemente do nível de confiança .
    • A vantagem disso é que seu modelo será reforçado para continuar fazendo um "bom trabalho" nos objetos de interesse e melhorar onde ele fez um "mau trabalho" (detecção de baixa confiança ou nenhuma detecção quando deveria ter ocorrido um) independentemente do nível de confiança em que foi detectado.

2. Colete novas imagens abaixo de um determinado limite de confiança

Esse método pode ser empregado selecionando um limite de confiança para detecções e exigindo (dentro de seu próprio código) que qualquer detecção de objetos (que o modelo é treinado para reconhecer) com um limite de confiança abaixo de ___% ou 0,___ seja amostrada e enviada volte ao seu espaço de trabalho no Roboflow para um exame mais aprofundado, ou seja, teste no aplicativo Web hospedado ou na API de inferência para encontrar o problema + rotulagem e retreinamento.

Vantagens:

  1. O modelo aprenderá rapidamente o que detectar e o que não detectar no ambiente em que está presente.
  2. O nível de confiança para as detecções começará a aumentar rapidamente, pois você está essencialmente dizendo ao seu modelo (após rotular e retreinar): "Ei, você fez um trabalho ruim aqui - isso é o que você deveria fazer".
  3. Mais imagens que contêm os objetos de interesse (o que nosso modelo é treinado para detectar) - após rotular e retreinar, nosso modelo se sairá muito melhor em seu ambiente de implantação!

Exemplos:

  • Comece com um limite de confiança definido de 40% - qualquer objeto (ou cada __ número de vezes que um objeto) detectado em um nível de confiança abaixo de 40%, ou 0,40, deve ser definido programaticamente para retornar ao Roboflow ou armazenado em seus dispositivos para upload futuro para Roboflow .
    • Próximo : Depois de treinar novamente e receber melhores métricas de treinamento e/ou mais dados do ambiente de produção, defina o limite de confiança para 50% e quaisquer objetos detectados em um nível de confiança abaixo de 50%, ou 0,50, devem ser configurados programaticamente para retornar para Roboflow ou armazenados em seus dispositivos/sistema para upload futuro para Roboflow .
    • Mais tarde : com o tempo, você poderá definir uma referência mais alta para níveis de confiança , como 60%, 75% ou 80%. O motivo pelo qual você não deseja iniciar nesses níveis para benchmarks de confiança é que você receberá um número muito alto de detecções falsas ou detecções com baixa confiança , com modelos mais recentes.

3. Solicite aos usuários do seu aplicativo que verifiquem as previsões do modelo

Vantagens:

  1. O feedback do usuário é uma ótima ferramenta. Você essencialmente obtém mais pares de olhos para ajudar no controle de qualidade do seu modelo.
  2. Você também pode adicionar relatórios de repo , caso o modelo não esteja funcionando (ou seja, alertas para quando o sistema ou aplicativo trava ou o modelo é executado, mas não detecta nada).

Exemplo:

  • Adicione "relatórios de repo " em seu painel, aplicativo móvel ou como você escolheu criar seu produto de visão computacional. Use esses relatórios de repo para identificar rapidamente maneiras de melhorar a funcionalidade de seu produto de visão computacional e, o mais importante, garantir que os usuários tenham um modelo que não esteja apenas funcionando bem, mas preparado para melhorar rapidamente.
    • Pegue quaisquer imagens de relatórios de bugs e configure-as programaticamente para retornar ao repo ou Roboflow -as em seu sistema para upload futuro no Roboflow .

Recursos para Implementar Aprendizagem Ativa

Código de amostra

Primeiro, instale o pacote pip Roboflow Python (PyPi)

# installing the Roboflow Python pip package
pip install roboflow
  1. Copie/cole o bloco de código abaixo no VSCode, XCode, PyCharm, Spyder (ou outro editor de código)
  2. Atualize os valores para model [name], model version, api_key e device_name dentro do objeto "rf".
  3. Salve o arquivo python em um diretório - certifique-se de anotar o nome do diretório e o nome do arquivo, pois precisaremos deles posteriormente para que a implantação funcione .
from roboflow import Roboflow
import json
# private api key found in Roboflow > YOURWORKSPACE > Roboflow API
# NOTE: this is your private key, not publishable key!
# https://docs.roboflow.com/rest-api#obtaining-your-api-key
private_api_key = "INSERT API KEY HERE"

# gain access to your workspace
rf = Roboflow(api_key=private_api_key)
workspace = rf.workspace()

# you can obtain your model path from your project URL, it is located
# after the name of the workspace within the URL - you can also find your
# model path on the Example Web App for any dataset version trained
# with Roboflow Train
# https://docs.roboflow.com/inference/hosted-api#obtaining-your-model-endpoint
model_path = "INSERT MODEL PATH HERE"
project = workspace.project(f"{model_path}")

# be sure to replace with a path to your file
# if you run this in Colab, be sure to upload the file to colab, hover over
# the file name, and select the 3 dots on the right of the file name to copy
# the file path, and paste it as the value for "imgpath"
img_path = "INSERT IMAGE PATH HERE"

# establish number of retries to use in case of upload failure
project.upload(f"{img_path}", num_retry_uploads=3)

API de upload do Roboflow

A API Upload pode ser usada para fazer upload de imagens para um novo projeto

  • exemplo : Projeto 1 : Modelo atualmente implantado | Projeto 2 : Imagens de Aprendizagem Ativa - imagens coletadas aleatoriamente | Projeto 3 : Imagens de Aprendizagem Ativa - imagens abaixo do limite de confiança de 30% | Projeto 4: Imagens de Aprendizagem Ativa - imagens abaixo de um limite de confiança de 50%

API de inferência do Roboflow

Os scripts "InferenceHosted" e "UploadHosted" devem ser usados para imagens hospedadas em um servidor. Os scripts "InferenceLocal" e "UploadLocal" devem ser usados para imagens hospedadas em seu dispositivo (ou seja, disco rígido do computador ou dispositivo de borda).

Pacote Python do Roboflow