> 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/models/ko/train/neural-architecture-search.md).

# 신경망 구조 탐색

<figure><img src="/files/9ea8b5ca7840327e2e49b0f00bf1b0ea3e7c4e22" alt="NAS results page showing a Pareto frontier of trained models plotted across latency and accuracy."><figcaption><p>NAS 결과 페이지에는 속도-정확도 파레토 프런티어를 따라 학습된 모든 모델이 표시됩니다.</p></figcaption></figure>

Roboflow의 Neural Architecture Search(NAS)는 데이터셋에서 수십 개의 모델 아키텍처를 자동으로 학습시키고, 속도-정확도 트레이드오프 곡선을 따라 최적의 옵션을 제시하는 강력한 새 기능입니다. 기존 모델 학습 전략보다 모델당 비용이 더 낮으면서도 선택할 수 있는 수많은 모델 옵션을 생성합니다.

설명된 대로 [RF-DETR 논문에서](https://arxiv.org/html/2511.09554v2), 이 Neural Architecture Search 전략이 RF-DETR의 SOTA 모델 아키텍처를 만들어냈습니다. Roboflow는 이 전략을 모든 Roboflow 고객에게 제공하여, 누구나 자신의 사용 사례에 맞는 SOTA 모델을 만들 수 있게 합니다.

Neural Architecture Search:

* 데이터 특성을 바탕으로 사용 사례에 가장 적합한 모델 아키텍처를 식별합니다
* 그 아키텍처를 데이터에 맞게 세밀하게 조정합니다
* 5,000개가 넘는 구성을 테스트하여, 각 지연 시간 지점에서 정확도를 최적화한 10\~100개의 학습된 모델을 생성합니다.

{% embed url="<https://youtu.be/ZtGXkuo1qiE>" %}

## Neural Architecture Search를 사용할 때

NAS는 프로덕션에 배포할 모델을 선택할 때 거의 항상 실행할 가치가 있습니다. 파레토 프런티어의 각 발굴된 모델은 모두 데이터로 완전히 학습되므로, 단순히 크기만 고르는 것이 아니라 특정 배포 대상에 가장 적합한 속도/정확도 균형을 선택하게 됩니다. 실제 고객 실행에서 NAS는 같은 지연 시간에서 단일 RF-DETR Medium 미세 조정보다 일상적으로 더 뛰어난 성능을 보이며, 종종 큰 차이로 앞섭니다.

다음과 같은 경우 NAS를 고려하세요:

* 주어진 지연 시간 예산에서 더 높은 정확도, 또는 주어진 정확도 목표에서 더 낮은 지연 시간이 필요할 때.
* 프로덕션용 모델을 준비하면서 속도/정확도 곡선상에서 옵션들을 비교하고 싶을 때.
* 그렇지 않으면 하이퍼파라미터 탐색을 수행하거나 여러 모델 크기를 연달아 학습시키게 될 때.
* 최첨단 성능이 필요할 때.

다음과 같은 경우 NAS는 과할 수 있습니다:

* 사용 사례가 단순하고 "충분히 괜찮은" 모델이면 충분할 때(예: 밝은 환경에서 사람을 감지하는 경우). 탐색 단계이거나 초기 프로젝트라면 일반적으로 단일 미세 조정이 올바른 선택입니다.
* 가장 큰 RF-DETR 체크포인트만 원하고(예: RF-DETR XXL) 더 작은 트레이드오프 지점은 중요하지 않을 때.

## 비용, 크레딧, 요금제 이용 가능 여부

NAS는 사용량 기반 과금이 포함된 모든 유료 Roboflow 요금제에서 사용할 수 있습니다. Trial, Free, Public 요금제 사용자는 NAS에 접근할 수 없습니다. 사용량 기반 과금이 없는 레거시 요금제는 NAS 실행을 시작하기 전에 이를 활성화하라는 안내를 받게 됩니다.

NAS 실행은 표준 Roboflow 학습 요금으로 청구됩니다 - **학습 시간 30분당 1 크레딧** - 즉, 다른 학습 작업과 동일한 시간당 요금입니다. 한 번의 실행으로 수십 개의 학습된 모델이 생성되므로, *모델당 비용은* 각각을 개별적으로 학습시키는 것보다 낮지만, 단일 NAS 작업의 총 크레딧 사용량은 단일 미세 조정보다 높습니다.

계획할 때 참고할 일반적인 범위:

* \~2,500장 이미지의 객체 감지 데이터셋은 일반적으로 약 18시간(\~36 크레딧) 걸립니다.
* **인스턴스 세분화 NAS** 는 객체 감지 NAS보다 GPU 집약도가 더 높습니다. 대략 1.5\~2배 더 긴 실행 시간을 예상하세요.

학습 UI는 시작하기 전에 예상 소요 시간과 크레딧 비용을 표시합니다. 예상 시간이 하루 이상의 학습을 초과하면, 작업이 시작되기 전에 확인을 요청받게 됩니다.

{% hint style="warning" %}
워크스페이스에서 플렉스 과금이 비활성화되어 있고 포함된 크레딧이 실행 중에 소진되면, NAS는 자동으로 중지됩니다. 포함 크레딧 잔액과 관계없이 실행을 완료하려면 시작하기 전에 플렉스 과금을 활성화하세요.
{% endhint %}

## NAS 대 YOLO-NAS

{% hint style="info" %}
여기서 설명하는 "Neural Architecture Search" 엔진은 **YOLO-NAS**와는 다릅니다. YOLO-NAS는 Roboflow 모델 목록에도 표시되는 단일 YOLO 기반 아키텍처입니다. NAS 사용을 위해 업그레이드한 것이라면, Train 페이지에서 **Neural Architecture Search** 엔진을 선택하고 있는지 확인하세요. YOLO-NAS 모델 아키텍처가 아니라.
{% endhint %}

Roboflow NAS는 백본에 더 많은 세계 지식을 통합하는 RF-DETR을 사용함으로써 더 강력한 기반에서 시작합니다. 그다음 NAS는 데이터셋에 맞게 아키텍처를 조정합니다. 예를 들어, 데이터가 디코더 레이어 수가 더 적은 모델의 이점을 누린다면, NAS는 그 아키텍처를 자동으로 발견하고 제공할 수 있습니다.

## 지원되는 작업 및 알려진 제한 사항

현재 NAS는 다음을 지원합니다:

* 객체 감지
* 인스턴스 분할

기타 현재 제한 사항:

* 원시 가중치(`.pt`, `.onnx`, 등)는 서드파티 추론 서버에서 사용하기 위해 다운로드할 수 없습니다. NAS 모델은 Roboflow Serverless Hosted API, Dedicated Deployments, Workflows, Batch Processing 및 자체 호스팅 [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted)에서 실행됩니다. NAS 가중치를 다운로드하여 실행하려면 Roboflow Inference를 권장합니다.
* NAS로 발견된 모델 가중치는 Roboflow의 [플랫폼 모델 라이선스](https://roboflow.com/platform-model-license-1-0)에 따라 라이선스가 부여되며, 이는 유효한 상태의 Roboflow 계정을 보유해야 함을 요구합니다.

## NAS 학습 실행 시작

{% stepper %}
{% step %}
**Train 탭을 열고 Neural Architecture Search 엔진을 선택하세요**

프로젝트의 Train 탭을 여세요( `https://app.roboflow.com/YOUR_WORKSPACE/YOUR_PROJECT_NAME/train`) 그리고 **Neural Architecture Search** 엔진을 선택하세요.

<figure><img src="/files/f4f72cd09a029b719c98fa7996f27eb372f4b625" alt="Train tab engine selector with Neural Architecture Search highlighted."><figcaption><p>Train 탭에서 Neural Architecture Search 엔진을 선택하세요.</p></figcaption></figure>
{% endstep %}

{% step %}
**백본 선택**

여러 모델 변형이 있는 프로젝트 유형의 경우(예: 객체 감지는 Fast, Standard, Plus 제공) 계속하기 전에 백본을 선택해야 합니다. 사용 사례에 맞는 변형을 클릭하세요. 단일 변형이 있는 프로젝트 유형의 경우(예: 인스턴스 세분화) 이 항목은 자동으로 선택됩니다.
{% endstep %}

{% step %}
**데이터셋 버전 선택 또는 생성**

기존 데이터셋 버전을 선택하거나 새로 만드세요. 몇 가지 팁:

* NAS 학습을 위해 데이터셋에 증강을 추가하는 것은 권장하지 않습니다.
* 검증 분할에는 최소한 **15개의 이미지가**포함되어야 합니다. NAS가 안정적인 파레토 프런티어를 발견하려면 충분한 검증 데이터가 필요합니다. 검증 이미지가 15개 미만이면 API가 학습 요청을 거부합니다.

<figure><img src="/files/16ad2569e1969c1ff14b5d846c655f5a5fe255ef" alt="Dataset version selector for a NAS training run."><figcaption><p>NAS 실행을 위해 데이터셋 버전을 선택하거나 생성하세요.</p></figcaption></figure>
{% endstep %}

{% step %}

#### 백본 선택(객체 감지만 해당)

객체 감지 프로젝트의 경우 세 가지 백본 옵션 중에서 선택할 수 있습니다:

* **Fast** - 가장 빠른 학습, 가장 낮은 지연 시간의 모델을 발견합니다. 추론 속도가 최우선인 CPU 또는 엣지 배포에 가장 적합합니다.
* **Standard** - 균형 잡힌 학습 시간, 넓은 지연 시간 범위에 걸친 모델을 발견합니다. 좋은 속도/정확도 균형이 필요한 엣지 또는 GPU 배포에 가장 적합합니다.
* **Plus** - 가장 정확한 모델을 발견합니다. 정확도가 지연 시간보다 더 중요한 클라우드 GPU 배포에 가장 적합합니다.

인스턴스 세분화 프로젝트는 단일 백본을 사용하며 이 단계를 건너뜁니다.
{% endstep %}

{% step %}
**학습 시작**

클릭 **학습 시작** 를 눌러 실행을 시작하세요.

<figure><img src="/files/8ebb7094027812dd3d69e0d027f5bd47b4b791ae" alt="Start Training button on the NAS configuration page."><figcaption><p>구성 페이지에서 NAS 실행을 시작하세요.</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## NAS 결과 페이지 읽기

<figure><img src="/files/9ea8b5ca7840327e2e49b0f00bf1b0ea3e7c4e22" alt="NAS results page with purple dots representing trained models along the Pareto frontier."><figcaption><p>보라색 점 하나하나는 배포 가능한 상태로 완전히 학습된 모델입니다.</p></figcaption></figure>

결과 페이지에는 NAS가 데이터에서 발굴하고 학습한 모든 모델이 파레토 프런티어를 따라 표시됩니다. 이는 각 지연 시간 지점에서 발견된 최상의 모델입니다. 보라색 점 하나하나는 배포할 수 있는 완전히 학습된 모델입니다. 프런티어는 탐색이 진행되는 동안 실시간으로 업데이트되므로 전체 실행이 완료되기 전에 후보를 평가하기 시작할 수 있습니다.

**메트릭 선택하기.** F1, mAP\@50, mAP\@50:95 사이를 전환하여 사용 사례에 중요한 지표로 프런티어를 평가하세요. 지표에 따라 프런티어에 나타나는 모델이 다를 수 있는데, 이는 정상입니다. 프로덕션에서 모델을 어떻게 판단할지를 가장 잘 반영하는 지표를 선택한 다음 목표 지연 시간에서 최고의 모델을 고르세요. 대부분의 사용 사례에는 F1을 권장합니다.

**모델 즐겨찾기 지정하기.** 사용하려는 모델은 모두 즐겨찾기 지정할 수 있습니다. 즐겨찾기한 모델은 Workflow 모델 선택기에 표시되고, 즐겨찾기 해제된 모델은 결과 페이지에는 남아 있지만 선택기에서는 숨겨져 화면을 덜 어수선하게 합니다. 원하는 만큼 많이 또는 적게 즐겨찾기 지정하세요. 즐겨찾기 지정은 무료이며 되돌릴 수 있습니다.

**즐겨찾기한 모델 사용하기.** 다른 Roboflow 모델과 마찬가지로 Workflow의 모델 블록을 사용하여 선택하세요.

실행 중 NAS가 표시하는 실시간 학습 차트(Training Progress Band 및 Epoch Snapshot 보기)에 대해 더 알아보려면 [학습 결과 보기](/models/ko/evaluate/training-results.md).

## NAS 실행 중지하기

NAS 작업은 두 단계로 구성됩니다 - **학습** 및 **탐색** - 이 두 단계가 같은 작업에서 연달아 실행됩니다. 실행을 중지하는 방법은 두 가지입니다:

* **조기 중지** (현재 프런티어에 만족할 때 권장). 단계에 따라 "학습 조기 중지" 또는 "탐색 중지"를 클릭하세요. 그 시점까지 발굴된 모델은 보존되며 배포할 수 있습니다. 완료된 작업에 사용된 크레딧은 청구됩니다. 자세한 내용은 [학습 작업 중지 또는 취소](/models/ko/train/cancel-a-training-job.md) 를 참조하세요.
* **취소** (실행을 완전히 포기하려는 경우). "학습 취소"를 클릭하세요. 가중치는 저장되지 않지만, 작업 초기에 취소하면 크레딧이 환불됩니다. 자세한 내용은 [학습 작업 중지 또는 취소](/models/ko/train/cancel-a-training-job.md).

{% hint style="info" %}
NAS 실행은 모델이 수렴하면, 즉 목표 에포크가 모두 끝나기 전에 최고 성능에 도달하면 자동으로 중지되기도 합니다. 결과 페이지의 배너가 이를 표시합니다. 사용자가 따로 조치할 필요는 없습니다.
{% endhint %}

## NAS로 발견된 모델 배포하기

NAS로 발견된 모델은 다른 Roboflow 학습 모델과 마찬가지로 배포할 수 있습니다. 다음에서 실행할 수 있습니다:

* **Roboflow Serverless Hosted API** (아래 코드 예시 참조).
* **전용 배포** 더 높은 처리량 또는 예약 용량용.
* **Workflows** 및 **배치 처리** 비전 파이프라인을 구축하고 실행하기 위해.
* **자체 호스팅** [**Roboflow Inference**](https://docs.roboflow.com/deployment/self-hosted/self-hosted) 자체 하드웨어(Docker, 엣지 또는 클라우드)에서.

### Roboflow Inference로 NAS 모델을 로컬에서 실행하기

설치하고 시작한 다음 [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/inference-server/install) 을 하드웨어에 설치한 다음, `inference-sdk` 를 `http://localhost:9001` 다른 Roboflow 모델과 마찬가지로 NAS 모델 ID로 호출하세요. 아래 코드 예시는 호스팅된 엔드포인트와 로컬 Inference 서버 모두에서 작동합니다. 단, `api_url`.

### Roboflow Serverless Hosted API

{% tabs %}
{% tab title="Python (requests)" %}

```python
import base64

import requests

API_KEY = "roboflow-API-KEY"
MODEL_ID = "your-workspace/the-model-id-here"
IMAGE_PATH = "your_image_path.png"

with open(IMAGE_PATH, "rb") as f:
    image_data = base64.b64encode(f.read()).decode("utf-8")

response = requests.post(
    f"https://serverless.roboflow.com/{MODEL_ID}",
    params={"api_key": API_KEY},
    headers={"Content-Type": "application/x-www-form-urlencoded"},
    data=image_data,
)

print(response.json())
```

{% endtab %}

{% tab title="Python (inference-sdk)" %}
의존성을 설치하려면, `pip install inference-sdk`.

```python
from inference_sdk import InferenceHTTPClient

CLIENT = InferenceHTTPClient(
    api_url="https://serverless.roboflow.com",
    api_key="roboflow-API-KEY"
)

result = CLIENT.infer("your_image_path.png", model_id="your-workspace/the-model-id-here")
print(result)
```

{% endtab %}

{% tab title="cURL" %}
**Linux 또는 MacOS**

로컬 파일인 `your_image_path.png`:

```bash
base64 your_image_path.png | curl -d @- \\
"https://serverless.roboflow.com/your-workspace/the-model-id-here?api_key=roboflow-API-KEY"
```

URL을 통해 웹의 다른 곳에 호스팅된 이미지에 대해 추론하기(잊지 말고 [URL 인코딩하세요](https://www.urlencoder.org/)):

```bash
curl -X POST "https://serverless.roboflow.com/your-workspace/the-model-id-here?\
api_key=roboflow-API-KEY&\
image=https%3A%2F%2Fi.imgur.com%2FPEEvqPN.png"
```

{% endtab %}

{% tab title="JavaScript" %}
**Node.js**

이 예제에서는 [axios](https://github.com/axios/axios) 를 사용하여 POST 요청을 수행하므로 먼저 `npm install axios` 를 실행해 의존성을 설치하세요.

**로컬 이미지에 대해 추론하기**

```javascript
const axios = require("axios");
const fs = require("fs");

const image = fs.readFileSync("your_image_path.png", {
    encoding: "base64"
});

axios({
    method: "POST",
    url: "https://serverless.roboflow.com/your-workspace/the-model-id-here",
    params: {
        api_key: "roboflow-API-KEY"
    },
    data: image,
    headers: {
        "Content-Type": "application/x-www-form-urlencoded"
    }
})
.then(function(response) {
    console.log(response.data);
})
.catch(function(error) {
    console.log(error.message);
});
```

**URL을 통해 웹의 다른 곳에 호스팅된 이미지에 대해 추론하기**

```javascript
const axios = require("axios");

axios({
    method: "POST",
    url: "https://serverless.roboflow.com/your-workspace/the-model-id-here",
    params: {
        api_key: "roboflow-API-KEY",
        image: "https://i.imgur.com/PEEvqPN.png"
    }
})
.then(function(response) {
    console.log(response.data);
})
.catch(function(error) {
    console.log(error.message);
});
```

{% endtab %}
{% endtabs %}
