> For the complete documentation index, see [llms.txt](https://docs.roboflow.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.roboflow.com/deployment/ko/monitoring-and-analytics/active-learning.md).

# 액티브 러닝

## 소개

Active Learning은 배포된 모델에서 운영 데이터를 수집해 검토와 재학습을 위해 표시합니다. 모델이 운영 환경에서 추론을 수행하면, Active Learning은 구성한 규칙(예: 낮은 신뢰도의 예측이나 특정 클래스)에 따라 이미지를 자동으로 샘플링하고 사람의 검토를 위해 대기열에 넣습니다.

{% hint style="info" %}
Active Learning에는 클라우드 배포가 필요합니다. Annotation Review 기능이 포함된 요금제에서 사용할 수 있습니다.
{% endhint %}

## 웹 앱

### Active Learning 사용

1. 프로젝트를 열고 왼쪽 사이드바에서 "Active Learning"을 선택하세요.
2. Active Learning을 켭니다.

Active Learning이 데이터를 수집하려면 프로젝트에 학습된 모델과 활성화된 클라우드 배포가 있어야 합니다.

### 수집 규칙 구성

Active Learning에는 수집 한도와 조건, 두 가지 구성 범주가 있습니다.

#### 수집 한도

Active Learning이 수집하는 데이터 양을 제어합니다:

* 샘플링 비율: 샘플링할 추론의 비율(예: 0.5%)
* 분당, 시간당, 일일 이미지 상한
* 압축 수준 및 최대 이미지 크기
* 배치 재생성 빈도(매일, 매주, 매월 또는 없음)
* 수집된 이미지와 함께 모델 예측을 유지할지 여부

이 설정을 수정하려면 수집 한도 섹션에서 "편집"을 클릭하고 구성 모달에서 값을 업데이트하세요.

#### 조건

조건은 어떤 이미지가 수집되는지 필터링합니다. 모델 유형에 따라 규칙을 정의할 수 있습니다:

* 신뢰도 임계값(예: 신뢰도가 60% 미만으로 떨어지는 이미지를 수집)
* 관심 있는 특정 클래스
* 탐지 개수 요구 사항

조건을 설정하려면 조건 섹션에서 "편집"을 클릭하세요.

### 에이전트에서 Active Learning 관리

또한 Active Learning을 관리할 수 있습니다. [Roboflow Agent](https://docs.roboflow.com/agents/agents/roboflow-agent). 프로젝트 탭을 열고 "설정"을 선택한 다음, 이 페이지와 동일한 토글, 수집 한도, 조건을 사용하세요. 이를 위해서는 워크플로 관리, 워크플로 게시, Dataset Active Learning 권한이 필요합니다.

### 수집된 이미지 검토

Active Learning이 이미지를 수집하면 Active Learning 페이지의 이미지 섹션에 표시됩니다. 이 페이지에는 검토 대기 중인 이미지 수와 현재 검토 중인 이미지 수가 표시됩니다.

검토를 시작하려면:

1. "Review Images"를 클릭해 검토 대기열을 엽니다.
2. 상태(시작 전, 진행 중)별로 배치를 찾아보고 생성 날짜, 이미지 수 또는 진행률로 정렬하세요.
3. 검토를 시작할 배치를 선택하세요.

### 검토자 할당

검토 작업을 팀 전체에 분배할 수 있습니다:

1. 검토 대기열을 열고 배치를 선택하세요.
2. 검토자를 할당하려면 클릭하세요.
3. 팀원을 선택하고 할당할 이미지 수를 설정한 다음, 필요하면 검토 지침을 추가하세요.
4. "Shuffle Images"를 켜서 각 검토자가 받을 이미지를 무작위로 지정하세요.

이미지가 할당되면 검토자에게 알림이 전송됩니다. 언제든지 이미지를 다른 검토자에게 재할당할 수 있습니다.

### Active Learning이 학습 루프에 맞는 방식

일반적인 워크플로:

1. 모델을 학습하고 배포합니다.
2. 사용 사례에 맞게 조정된 조건으로 Active Learning을 활성화합니다.
3. 조건에 맞는 운영 데이터가 수집되어 대기열에 추가됩니다.
4. 검토자가 수집된 이미지를 라벨링합니다.
5. 검토한 이미지를 데이터셋에 추가하고 재학습하여 모델을 개선합니다.

이로써 모델이 가장 어려워하는 사례에서 성능을 개선하는 피드백 루프가 형성됩니다.

## HTTP API

HTTP API를 사용해 Active Learning을 활성화하거나 비활성화하고, 수집 규칙을 업데이트하며, 검토 대기열의 이미지를 나열할 수 있습니다. 엔드포인트는 `https://api.roboflow.com` 그리고 API 키가 `api_key` 쿼리 매개변수, 요청 본문 또는 Bearer 인증 헤더에 필요합니다.

### Active Learning 구성 가져오기

<mark style="color:초록색;">`GET`</mark> `/:workspace/:project/deploy/active-learning`

필수 스코프: `project:read`

```bash
curl "https://api.roboflow.com/my-workspace/my-project/deploy/active-learning?api_key=$ROBOFLOW_API_KEY"
```

응답에는 프로젝트, 배포 워크플로, 선택된 모델, 배포 가능 여부 및 Active Learning 구성이 포함됩니다:

```json
{
  "project": { "url": "my-project", "name": "My Project" },
  "workflow": { "url": "my-project-base-workflow" },
  "model": {
    "id": "rfdetr-medium",
    "kind": "pretrained",
    "displayName": "RF-DETR Medium",
    "modelId": "rfdetr-medium"
  },
  "deployability": {
    "status": "deployable",
    "modelWasConfigured": false,
    "selectedModelId": null,
    "selectionReason": null
  },
  "activeLearning": {
    "enabled": false,
    "collectionLimits": {
      "dataPercentage": 100,
      "minutelyUsageLimit": 10,
      "hourlyUsageLimit": 100,
      "dailyUsageLimit": 1000,
      "labelingBatchesRecreationFrequency": "daily",
      "usageQuotaName": "upload_quota_active_learning",
      "imageCompressionLevel": 95,
      "maxImageHeight": 1080,
      "maxImageWidth": 1920,
      "persistPredictions": true
    },
    "filters": []
  }
}
```

### Active Learning 사용

<mark style="color:초록색;">`POST`</mark> `/:workspace/:project/deploy/active-learning/enable`

필수 스코프: `project:update`

```bash
curl -X POST "https://api.roboflow.com/my-workspace/my-project/deploy/active-learning/enable" \
  -H "Content-Type: application/json" \\
  -d '{ "api_key": "'$ROBOFLOW_API_KEY'" }'
```

모델이 구성되지 않은 경우 서비스가 하나를 선택하려고 시도합니다. A `400` 응답은 워크플로가 배포 불가능함을 의미합니다. 응답의 형식은 다음과 동일하며 [Active Learning 구성 가져오기](#get-active-learning-configuration), 포함하여 `activeLearning.enabled` 로 설정하고 `true`.

### Active Learning 비활성화

<mark style="color:초록색;">`POST`</mark> `/:workspace/:project/deploy/active-learning/disable`

필수 스코프: `project:update`

```bash
curl -X POST "https://api.roboflow.com/my-workspace/my-project/deploy/active-learning/disable" \
  -H "Content-Type: application/json" \\
  -d '{ "api_key": "'$ROBOFLOW_API_KEY'" }'
```

응답의 형식은 다음과 동일합니다 [Active Learning 구성 가져오기](#get-active-learning-configuration), 포함하여 `activeLearning.enabled` 로 설정하고 `false`.

### Active Learning 구성 업데이트

<mark style="color:초록색;">`POST`</mark> `/:workspace/:project/deploy/active-learning/configuration`

필수 스코프: `project:update`

새 프로젝트에서 구성하기 전에 Active Learning을 활성화하세요. 요청에는 `collectionLimits`. 해당 `filters` 배열은 선택 사항입니다. 생략하면 기존 필터는 변경되지 않습니다.

```bash
curl -X POST "https://api.roboflow.com/my-workspace/my-project/deploy/active-learning/configuration" \
  -H "Content-Type: application/json" \\
  -d '{
    "api_key": "'$ROBOFLOW_API_KEY'",
    "collectionLimits": {
      "dataPercentage": 50,
      "minutelyUsageLimit": 10,
      "hourlyUsageLimit": 100,
      "dailyUsageLimit": 1000,
      "labelingBatchesRecreationFrequency": "daily",
      "usageQuotaName": "default",
      "imageCompressionLevel": 85,
      "imageName": "camera-1",
      "maxImageHeight": 1080,
      "maxImageWidth": 1920,
      "registrationTags": ["production"],
      "persistPredictions": true
    },
    "filters": [
      {
        "type": "classConfidence",
        "classFilterMode": "any",
        "classes": ["cat"],
        "confidenceLowerBound": 0.2,
        "confidenceUpperBound": 0.8
      }
    ]
  }'
```

필수 수집 한도 필드는 다음과 같습니다:

* `dataPercentage`: 수집할 추론의 비율, `0` 를 `100`
* `minutelyUsageLimit`: 분당 최대 수집 이미지 수 또는 `0` 무제한의 경우
* `hourlyUsageLimit`: 시간당 최대 수집 이미지 수
* `dailyUsageLimit`: 일일 최대 수집 이미지 수
* `labelingBatchesRecreationFrequency`: `"never"`, `"daily"`, `"weekly"`, 또는 `"monthly"`
* `usageQuotaName`: 비어 있지 않은 할당량 식별자

선택 사항 필드는 다음과 같습니다 `imageCompressionLevel`, `imageName`, `registrationTags`그리고 `persistPredictions`. 이미지를 크기 조정하려면 두 값 모두 제공하세요. `maxImageHeight` 및 `maxImageWidth`. 하나만 제공하면 기존 이미지 크기 제한이 제거됩니다.

Active Learning은 두 가지 필터 유형을 지원합니다:

* `classConfidence`: 선택한 클래스에 대해 신뢰도 범위 내의 예측을 수집합니다. `classFilterMode` 다음 값을 가질 수 있습니다 `"any"`, `"in"`, 또는 `"out"`.
* `detectionSize`: 바운딩 박스가 다음 범위 사이인 예측을 수집합니다. `sizeLowerPercentage` 및 `sizeUpperPercentage` 이미지 크기의. 이 필터는 객체 탐지 및 인스턴스 분할 프로젝트만 지원합니다. 다른 프로젝트 유형은 `400`.

응답의 형식은 다음과 동일합니다 [Active Learning 구성 가져오기](#get-active-learning-configuration). A `400` 응답에는 잘못된 수집 한도 또는 필터에 대한 검증 세부 정보가 포함됩니다.

### Active Learning 이미지 목록

<mark style="color:초록색;">`GET`</mark> `/:workspace/:project/deploy/active-learning/images`

필수 스코프: `project:read`

```bash
curl "https://api.roboflow.com/my-workspace/my-project/deploy/active-learning/images?api_key=$ROBOFLOW_API_KEY&page=1&pageSize=20"
```

이 엔드포인트는 다음 선택적 쿼리 매개변수를 허용합니다:

* `page`: 페이지 번호, `1`
* `pageSize`: 페이지당 항목 수, 최대 `50`
* `search`: 대기열 이름, 유형, ID, 검토자, 라벨러와 일치하는 텍스트
* `reviewer`: 검토자 이메일 또는 `"unassigned"`
* `상태`: `"all"`, `"not_started"`, 또는 `"in_progress"`
* `sortBy`: `"created"`, `"images"`, 또는 `"progress"`
* `sortDirection`: `"asc"` 또는 `"desc"`

응답에는 검토 대기열 개수, 페이지 매김된 대기열 항목, 배치, 주석 작업 및 이미지 총계가 포함됩니다:

```json
{
  "activeLearningImages": {
    "totalImagesReadyForReview": 0,
    "totalImagesBeingReviewed": 0,
    "batches": [],
    "annotationJobs": [],
    "latestBatch": null,
    "latestAnnotationJob": null,
    "sampleImages": [],
    "reviewQueueCounts": {
      "all": 0,
      "notStarted": 0,
      "inProgress": 0
    },
    "reviewQueuePage": {
      "page": 1,
      "pageSize": 20,
      "totalItems": 0,
      "totalPages": 1,
      "items": [],
      "search": "",
      "status": "all",
      "sortBy": "created",
      "sortDirection": "desc",
      "reviewer": ""
    }
  }
}
```

## Python SDK

`Workspace.active_learning()` 디렉터리의 모든 이미지에 대해 추론을 실행하고, 조건에 따라 이미지를 대상 프로젝트에 업로드합니다(예측 포함). 이는 SDK에 내장된 Active Learning 루프입니다. 기존 모델이 라벨링할 가치가 있는 항목을 선별하도록 하여 원본 영상에서 라벨링 대기열을 부트스트랩합니다.

같은 패턴은 다음과 같이 구현하는 것이 가장 좋습니다. [워크플로](https://docs.roboflow.com/workflows/manage/manage-workflows#python-sdk) 운영 환경용이지만, `active_learning()` "frames" 폴더가 있는 상태에서 "라벨링된 데이터가 프로젝트로 들어가는" 단계까지 가는 가장 빠른 방법입니다.

### 기본 사용법

```python
import roboflow

rf = roboflow.Roboflow(api_key="YOUR_API_KEY")
ws = rf.workspace()

ws.active_learning(
    raw_data_location="./frames",
    raw_data_extension=".jpg",
    inference_endpoint=["my-detector", 3],   # [프로젝트, 버전]
    upload_destination="my-detector",         # 대상 프로젝트
    conditionals={
        "required_class_variance_count": 1,           # 최소 1개의 서로 다른 클래스
        "minimum_size_requirement": 100,              # 탐지당 최소 픽셀 수
        "maximum_size_requirement": 4000000,
        "confidence_interval": [0, 60],               # 신뢰도가 낮은 예측만
    },
)
```

#### 매개변수

* `raw_data_location` (str) - 입력 이미지 디렉터리.
* `raw_data_extension` (str) - 일치시킬 이미지 확장자(예: `.jpg`, `.png`).
* `inference_endpoint` (list, `[project, version]`) - 분류 단계로 실행할 모델입니다.
* `upload_destination` (str) - 조건을 충족한 이미지와 예측을 업로드할 프로젝트 ID입니다. 보통 모델과 같은 프로젝트입니다.
* `conditionals` (dict) - 이미지 업로드 여부를 결정하는 규칙입니다. 일반적인 키:
  * `confidence_interval` - `[min, max]`; 탐지가 이 범위에 들어가는 이미지만 전달됩니다.
  * `required_class_variance_count` - 필요한 최소 서로 다른 클래스 수.
  * `minimum_size_requirement` / `maximum_size_requirement` - 탐지 면적(픽셀)으로 필터링합니다.
  * `required_class_count` - 총 탐지 수.
* `use_localhost` (bool, default `False`) - 다음 경우에 `True`, 자체 호스팅 [Roboflow Inference](/deployment/ko/self-hosted/self-hosted.md) 서버를 호스팅된 추론 대신 사용합니다.
* `local_server` (str) - 로컬 추론 서버의 기본 URL입니다. 기본값: `http://localhost:9001/`.

### 왜 사용하나요

일반적인 루프:

1. 적은 양의 라벨링된 데이터로 v1 모델을 학습합니다.
2. 가리킵니다 `active_learning()` 라벨이 없는 운영 데이터 폴더를
3. 모델이 불확실해하는(신뢰도가 낮은) 이미지나 드문 클래스를 인식한 이미지만 전달합니다.
4. Roboflow 웹 앱에서 이를 라벨링합니다.
5. 새 예시로 v2를 생성하고 재학습합니다.

튜닝 `conditionals` 이것이 이를 "모두 업로드"에서 실제 분류 정책으로 바꿉니다.

### 더 큰 파이프라인

입력이 비디오 스트림이거나, 모델이 워크플로 뒤에 있거나, 배치 처리와 재시도를 원한다면 이에 상응하는 것을 [워크플로](https://docs.roboflow.com/workflows/manage/manage-workflows#python-sdk). `active_learning()` 정적 폴더에서 일회성 부트스트래핑 패스에 가장 적합합니다.
