능동적 학습 구현

Active Learning을 사용하여 Roboflow 에서 모델을 빠르게 개선합니다.

Written by Mohamed Traore

Last published at: June 30th, 2022

"능동 학습은 알고리즘이 성능을 가장 효율적으로 개선할 수 있는 학습 데이터의 하위 집합을 사전에 식별할 수 있도록 하는 기계 학습 학습 전략입니다. 더 간단히 말해서 능동 학습은 학습 데이터에서 모델 성능을 가장 잘 향상시킬 수 있는 특정 예를 식별하기 위한 전략입니다. 훈련 데이터를 최대한 활용하여 모델을 개선하기 위한 휴먼 인 루프 머신 러닝 전략의 하위 집합입니다." - 액티브 러닝이란?

Active Learning의 장점은 더 적은 수의 이미지로 더 강력한 모델을 만드는 데 도움이 될 수 있다는 것입니다. 모델이 잘 작동하도록 유지하고 개선하는 데 필요한 교육 횟수는 시간이 지나면서 빠르게 줄어듭니다.

능동 학습을 구현하는 3가지 주요 방법이 있습니다.

1. 무작위로 새로운 이미지를 지속적으로 수집

무작위 샘플링을 배포 솔루션에 코딩할 수 있습니다.

무작위 샘플링은 실제 배포 환경을 나타내는 더 많은 이미지를 프로젝트에 가져오는 데 도움이 됩니다.

장점:

  1. 모델은 해당 환경 내에서 감지해야 할 항목과 감지하지 말아야 할 항목을 빠르게 학습합니다.
  2. 관심 객체를 포함하는 더 많은 이미지(우리 모델이 감지하도록 훈련된 것) - 레이블 지정 및 재훈련 후, 우리 모델은 배포 환경 내에서 훨씬 더 잘할 것입니다!

예시:

6시간 동안 추론 (모델 배포)을 실행하고 있습니다. 이 6시간 프레임에서 프로그래밍 방식으로 장치(예: NVIDIA Jetson 또는 OAK 장치)를 설정하여 15분마다 설정된 수의 이미지를 저장합니다(예: "15분마다 3개의 이미지 저장"). 수집된 이미지를 Roboflow 로 반환하거나 나중에 Roboflow 에 업로드할 수 있도록 기기/시스템에 저장합니다.

  • 시간이 지남에 따라 오탐지가 줄어들 것입니다.
    • 또한, 신뢰 수준에 관계없이 관심 있는 개체(모델이 "보도록" 훈련된 것)가 있는 일부 이미지를 얻을 수 있습니다.
    • 이것의 장점은 모델이 관심 대상에 대해 "좋은 작업"을 계속 수행하고 "잘못된 작업"을 수행한 부분을 개선하도록 강화된다는 것입니다(낮은 신뢰도 감지 또는 1) 신뢰 수준에 관계없이 탐지되었습니다.

2. 주어진 신뢰 임계값 아래에서 새 이미지 수집

이 방법은 탐지에 대한 신뢰 임계값을 선택하고 ___% 또는 0.___ 미만의 신뢰 임계값을 가진 객체(모델이 인식하도록 훈련된)의 모든 탐지를 샘플링하여 보내도록 요구함으로써(자체 코드 내에서) 사용할 수 있습니다. 추가 검사를 위해 Roboflow 의 작업 공간으로 돌아갑니다. 즉, Hosted Web App 또는 Inference API에서 테스트하여 문제 + 레이블 지정 및 재교육을 찾습니다.

장점:

  1. 모델은 해당 환경 내에서 감지해야 할 항목과 감지하지 말아야 할 항목을 빠르게 학습합니다.
  2. 감지에 대한 신뢰 수준은 기본적으로 모델에 (레이블 지정 및 재교육 후) "이봐, 여기에서 나쁜 일을 했어.
  3. 관심 객체를 포함하는 더 많은 이미지(우리 모델이 감지하도록 훈련된 것) - 레이블 지정 및 재훈련 후, 우리 모델은 배포 환경 내에서 훨씬 더 잘할 것입니다!

예:

  • 신뢰 임계값을 40%로 설정하여 시작 - 신뢰 수준이 40% 또는 0.40 미만에서 감지된 모든 개체(또는 개체가 __회마다)는 프로그래밍 방식으로 Roboflow 로 돌아가도록 설정하거나 향후 업로드를 위해 기기에 저장해야 합니다. Roboflow .
    • 다음 : 재교육하고 프로덕션 환경에서 더 나은 교육 지표 및/또는 더 많은 데이터 를 수신한 후 신뢰 임계값을 50%로 설정 하고 50% 또는 0.50 미만의 신뢰 수준에서 감지된 모든 개체는 프로그래밍 방식으로 반환하도록 설정해야 합니다. Roboflow 에 업로드하거나 나중에 Roboflow 에 업로드할 수 있도록 기기/시스템에 저장합니다.
    • 나중에 : 시간이 지남에 따라 60%, 75% 또는 80%와 같이 신뢰 수준에 대해 더 높은 기준을 설정할 수 있습니다. 신뢰도 벤치마크에 대해 이러한 수준에서 시작하지 않으려는 이유는 최신 모델에서 매우 많은 수의 오탐지 또는 낮은 신뢰도 의 탐지를 받게 되기 때문입니다.

3. 애플리케이션 사용자에게 모델 예측을 확인하도록 요청

장점:

  1. 사용자 피드백은 훌륭한 도구입니다. 기본적으로 모델의 품질 관리를 돕기 위해 더 많은 눈 세트를 얻을 수 있습니다.
  2. 모델이 전혀 작동하지 않는 경우(즉, 시스템 또는 앱이 충돌하거나 모델이 실행되지만 아무 것도 감지하지 못하는 경우에 대한 경고) 버그 repo 를 추가할 수도 있습니다.

예시:

  • 대시보드, 모바일 앱 또는 컴퓨터 비전 제품을 만들기 위해 선택한 방법에 "버그 repo "를 추가합니다. 이 버그 repo 를 사용하여 컴퓨터 비전 제품의 기능을 개선하는 방법을 빠르게 식별하고 가장 중요한 것은 사용자가 잘 작동할 뿐만 아니라 빠르게 개선할 준비가 된 모델을 가지고 있는지 확인하는 것입니다.
    • 버그 Roboflow 에서 이미지를 가져와 repo 로 반환하도록 프로그래밍 방식으로 설정하거나 나중에 Roboflow 에 업로드할 수 있도록 시스템에 저장합니다.

능동적 학습 구현을 위한 리소스

샘플 코드

먼저 Roboflow Python pip 패키지(PyPi) 를 설치합니다.

# installing the Roboflow Python pip package
pip install roboflow
  1. 아래 코드 블록을 VSCode, XCode, PyCharm, Spyder(또는 다른 코드 편집기)에 복사/붙여넣기
  2. "rf" 개체 내에서 모델 [이름], 모델 버전, api_key 및 device_name에 대한 값을 업데이트합니다.
  3. python 파일을 디렉토리에 저장합니다. 나중에 배포가 작동하는 데 필요하므로 디렉토리 이름과 파일 이름을 기록해 두십시오 .
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)

Roboflow 의 업로드 API

업로드 API를 사용하여 새 프로젝트에 이미지를 업로드할 수 있습니다.

  • : 프로젝트 1 : 현재 배포된 모델 | 프로젝트 2 : 능동적 학습 이미지 - 무작위로 수집된 이미지 | 프로젝트 3 : 능동적 학습 이미지 - 신뢰 임계값 30% 미만의 이미지 | 프로젝트 4: 능동적 학습 이미지 - 신뢰 임계값 50% 미만의 이미지

Roboflow 의 추론 API

"InferenceHosted" 및 "UploadHosted" 스크립트는 서버에서 호스팅되는 이미지에 사용됩니다. "InferenceLocal" 및 "UploadLocal" 스크립트는 장치(예: 컴퓨터 하드 드라이브 또는 에지 장치)에서 호스팅되는 이미지에 사용됩니다.

Roboflow 의 Python 패키지