# Neural Architecture Search

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-a09482f629727fe1cfe37ef9c7c0052ee9b40694%2Fnas-mining-curve.png?alt=media" alt="NAS results page showing a Pareto frontier of trained models plotted across latency and accuracy."><figcaption><p>NAS の結果ページには、速度と精度の Pareto frontier 上にある、学習済みのすべてのモデルが表示されます。</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:

* データの特性に基づいて、ユースケースに最も適したモデルアーキテクチャを特定します
* そのアーキテクチャをデータ上で Fine-tune します
* 5,000 を超える構成をテストし、その結果として 10～100 の学習済みモデルが生成され、各レイテンシーポイントで精度が最適化されます。

## Neural Architecture Search を使うべきタイミング

本番環境に出すモデルを選ぶ際には、NAS はほとんどの場合実行する価値があります。Pareto frontier 上で見つかった各モデルはすべてあなたのデータで完全に学習されているため、単にサイズを選ぶのではなく、特定のデプロイ先に最適な速度 / 精度のトレードオフを選べます。実際の顧客の実行では、NAS は同じレイテンシーで単一の RF-DETR Medium の Fine-tune を定常的に上回り、多くの場合その差は大きなものになります。

次のような場合は NAS を使いましょう:

* 所定のレイテンシー予算でより高い精度、または所定の精度目標でより低いレイテンシーが必要な場合。
* 本番用のモデルを準備していて、速度 / 精度の曲線に沿って選択肢を比較したい場合。
* 通常ならハイパーパラメータスイープを実行したり、複数のモデルサイズを連続して学習したりする場合。
* 最先端の性能が必要な場合。

次のような場合、NAS は過剰かもしれません:

* ユースケースが単純で、「十分に良い」モデルで足りる場合（例: 明るい環境で人物を検出する）。探索段階または初期段階の Projects では、通常は単一の Fine-tune が適切です。
* CPU のみでデプロイする予定の場合。
* 最大の RF-DETR checkpoint（例: RF-DETR XXL）だけが欲しく、より小さいトレードオフ点には関心がない場合。

## コスト、クレジット、プランの利用可否

NAS は、従量課金を含むすべての有料 Roboflow プランで利用できます。Trial、Free、Public プランのユーザーは NAS を利用できません。従量課金のない Legacy プランでは、NAS 実行を開始する前に有効化するよう求められます。

NAS 実行は標準の Roboflow 学習レートで課金されます — **学習時間 30 分ごとに 1 クレジット** — これは他の学習ジョブと同じ時間単価です。1 回の実行で数十の学習済みモデルが生成されるため、コストは *モデルあたり* では個別に学習するより低くなりますが、単一の NAS ジョブの総クレジット消費量は単一の Fine-tune より高くなります。

計画時の一般的な目安:

* 約 2,500 枚の画像からなる Object Detection データセットでは、一般的に約 18 時間（約 36 クレジット）かかります。
* **Instance Segmentation NAS** は Object Detection NAS よりも GPU 負荷が高いため、実行時間はおおよそ 1.5～2 倍長くなると見込まれます。

Train UI には、開始前に推定クレジットコストが表示されます。推定値が 1 日分の学習を超える場合、ジョブ開始前に確認を求められます。

{% hint style="warning" %}
Workspace で flex billing が無効になっており、実行中に含まれるクレジットを使い切った場合、NAS は自動的に停止します。含まれるクレジット残高に関係なく実行を完了させるには、開始前に flex billing を有効にしてください。
{% endhint %}

## NAS と YOLO-NAS の違い

{% hint style="info" %}
ここで説明している「Neural Architecture Search」engine は、 **YOLO-NAS**とは異なります。YOLO-NAS は YOLO ベースの単一アーキテクチャで、Roboflow のモデル一覧にも表示されます。NAS を使うためにアップグレードした場合は、Train ページで **Neural Architecture Search** engine を選択していることを確認してください。YOLO-NAS モデルアーキテクチャではありません。
{% endhint %}

Roboflow NAS は、より多くの世界知識を backbone に取り込む RF-DETR を使用することで、より強力な基盤から始まります。そこから NAS がアーキテクチャをデータセットに合わせて調整します。たとえば、decoder layer が少ないモデルの方がデータに適している場合、NAS はそのアーキテクチャを自動的に発見して提供できます。

## サポートされているタスクと既知の制限

NAS が現在サポートしているもの:

* Object Detection
* Instance Segmentation

その他の現在の制限:

* Raw weights（`.pt`, `.onnx`、など）は、サードパーティの推論サーバーで使用するためにダウンロードできません。NAS モデルは Roboflow Hosted Inference、Dedicated Deployments、Workflows、Batch Processing、およびセルフホストの [Roboflow Inference](https://inference.roboflow.com/install/)で実行されます。NAS weights をダウンロードして実行するには、Roboflow Inference を推奨します。
* NAS で発見された model weights は、Roboflow の [Platform Model License](https://roboflow.com/platform-model-license-1-0)の下でライセンスされており、良好な状態の Roboflow アカウントを保持している必要があります。

## NAS 学習実行を開始する

{% stepper %}
{% step %}

#### Train タブを開き、Neural Architecture Search engine を選択する

Project の Train タブを開き（ `https://app.roboflow.com/YOUR_WORKSPACE/YOUR_PROJECT_NAME/train`）、 **Neural Architecture Search** engine を選択します。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-9c88c779f5a8dde416ae742243ffb374d1802fd8%2Fnas-select-engine.png?alt=media" alt="Train tab engine selector with Neural Architecture Search highlighted."><figcaption><p>Train タブで Neural Architecture Search engine を選択します。</p></figcaption></figure>
{% endstep %}

{% step %}

#### データセットバージョンを選択または作成する

既存のデータセットバージョンを選ぶか、新しいものを作成します。いくつかのヒント:

* NAS 学習のためにデータセットへ augmentation を追加することは推奨しません。
* train / validate / test 分割全体で、十分な validation 画像があることを確認してください。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-02bb1b7e47d2cf1970692961d95adc5a2568b5c0%2Fnas-select-version.png?alt=media" alt="Dataset version selector for a NAS training run."><figcaption><p>NAS 実行用のデータセットバージョンを選択または作成します。</p></figcaption></figure>
{% endstep %}

{% step %}

#### 学習を開始する

クリックして **Start Training** 実行を開始します。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-82ea8de41405493849bbdc9c9284990331d993a7%2Fnas-start-train.png?alt=media" alt="Start Training button on the NAS configuration page."><figcaption><p>設定ページから NAS 実行を開始します。</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## NAS 結果ページの見方

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-a09482f629727fe1cfe37ef9c7c0052ee9b40694%2Fnas-mining-curve.png?alt=media" alt="NAS results page with purple dots representing trained models along the Pareto frontier."><figcaption><p>各紫色の点は、デプロイ可能な完全学習済みモデルです。</p></figcaption></figure>

結果ページには、NAS が見つけてあなたのデータで学習したすべてのモデルが、Pareto frontier に沿って表示されます。これは各レイテンシーポイントで見つかった最良のモデルです。各紫色の点は、デプロイ可能な完全学習済みモデルです。frontier は探索の進行に応じてリアルタイムで更新されるため、実行全体が完了する前に候補の評価を開始できます。

**メトリクスの選択。** F1、mAP\@50、mAP\@50:95 を切り替えて、ユースケースで重要なメトリクスに対して frontier を評価できます。メトリクスによって frontier 上に現れるモデルが異なる場合がありますが、それは想定どおりです。本番環境でモデルをどのように評価するかを最もよく反映するメトリクスを選び、そのうえで目標レイテンシーにおける最適なモデルを選んでください。ほとんどのユースケースでは F1 を推奨します。

**モデルにスターを付ける。** 使いたいモデルにスターを付けてください。スター付きモデルは Workflow の model picker に表示されます。スターなしモデルは結果ページには残りますが、picker からは非表示になり、一覧をすっきり保てます。スターはいくつでも付けられ、無料で、いつでも元に戻せます。

**スター付きモデルを使う。** 他の Roboflow モデルと同様に、Workflow 内の model block を使って選択します。

NAS が実行中に表示するライブ学習チャート（Training Progress Band と Epoch Snapshot ビュー）の詳細については、 [View Training Results](https://docs.roboflow.com/roboflow/roboflow-jp/train/training-results).

## NAS 実行を停止する

NAS ジョブには 2 つのフェーズがあります — **training** と **mining** — これらは同じジョブ内で連続して実行されます。実行を停止する方法は 2 つあります:

* **早めに停止する** （現在の frontier に満足している場合に推奨）。フェーズに応じて「Stop Training Early」または「Stop Mining」をクリックします。その時点までに見つかったモデルは保持され、デプロイ可能です。完了した作業分のクレジットは課金されます。詳細は [Early Stopping](https://docs.roboflow.com/roboflow/roboflow-jp/train/stop-training-early) を参照してください。
* **キャンセル** （実行を完全に破棄したい場合）。「Cancel Training」をクリックします。weights は保存されませんが、ジョブの早い段階でキャンセルした場合はクレジットが返金されます。詳細は [Cancel a Training Job](https://docs.roboflow.com/roboflow/roboflow-jp/train/cancel-a-training-job).

{% hint style="info" %}
NAS 実行は、モデルが収束したときにも自動的に停止します。つまり、目標 epoch がすべて完了する前に最高性能へ到達した場合です。結果ページには、そのことを示すバナーが表示されます。あなた側での操作は不要です。
{% endhint %}

## NAS で発見されたモデルをデプロイする

NAS で発見されたモデルは、他の Roboflow 学習済みモデルと同様にデプロイできます。次の場所で実行できます:

* **Roboflow Hosted Inference** （サーバーレス API — 以下のコード例を参照）。
* **Dedicated Deployments** 高スループットまたは予約済み容量向け。
* **Workflows** と **Batch Processing** ビジョンパイプラインの構築と実行向け。
* **Self-hosted** [**Roboflow Inference**](https://inference.roboflow.com/install/) 独自のハードウェア上で（Docker、edge、または cloud）。

### Roboflow Inference を使ってローカルで NAS モデルを実行する

インストールして起動し、 [Roboflow Inference](https://inference.roboflow.com/install/) をハードウェア上で実行してから、 `inference-sdk` を `http://localhost:9001` に向け、他の Roboflow モデルとまったく同じように NAS model ID を使って呼び出します。以下のコード例は Hosted endpoint とローカル Inference server の両方で動作します。入れ替えるのは `api_url`.

### Roboflow Hosted Inference

{% 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**

というローカルファイルの JSON 予測を取得する `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"
```

Web 上の別の場所でホストされている画像を、その 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**

この例では POST リクエストの実行に [axios](https://github.com/axios/axios) を使用しているため、まず `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 %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.roboflow.com/roboflow/roboflow-jp/train/neural-architecture-search.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
