> 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/ja/xue-xi/neural-architecture-search.md).

# Neural Architecture Search

<figure><img src="/files/345b5aca4942c55a2b13f4fb3d5ecce2326ea778" 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は過剰かもしれません：

* ユースケースがシンプルで、「十分良い」モデルで足りる場合（例：明るい環境で人を検出する）。探索的なプロジェクトや初期段階のプロジェクトでは、通常は1回のファインチューニングが適切です。
* 最大のRF-DETRチェックポイント（例：RF-DETR XXL）だけが欲しく、より小さなトレードオフ点には関心がない場合。

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

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

NASの実行は、標準のRoboflow学習レートで課金されます - **学習時間30分あたり1クレジット** - で、他の学習ジョブと同じ時間単価です。1回の実行で数十個の学習済みモデルが生成されるため、 *1モデルあたりの* コストは各モデルを個別に学習するより低くなりますが、1回のNASジョブに必要な総クレジットは1回のファインチューニングより高くなります。

計画時の目安となる一般的な範囲：

* 約2,500枚の画像からなる物体検出データセットでは、通常約18時間（約36クレジット）かかります。
* **インスタンスセグメンテーションNAS** は物体検出NASよりGPU負荷が高く、実行時間はおおむね1.5〜2倍長くなると見込んでください。

Train UIでは、開始前に推定所要時間とクレジット消費量が表示されます。見積もりが1日の学習時間を超える場合、ジョブ開始前に確認を求められます。

NASの実行では学習とアーキテクチャ探索が別々に課金されるため、それぞれに [クレジット上限](/models/ja/xue-xi/train-a-model.md#set-a-credit-cap) を設定できます。学習フェーズだけに上限をかけると探索は無制限のままになり、その逆も同様です。

{% hint style="warning" %}
ワークスペースでflex課金が無効になっており、実行中に含まれるクレジットが尽きた場合、NASは自動的に停止します。含まれるクレジット残高に関係なく実行を完了させたい場合は、開始前にflex課金を有効にしてください。
{% 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 Cloud API、Dedicated Deployments、Workflows、Batch Processing、およびセルフホスト版 [Roboflow Inference](https://docs.roboflow.com/deployment/self-hosted/self-hosted)で実行されます。NASの重みをダウンロードして実行するには、Roboflow Inferenceを推奨します。
* NASで見つかったモデルの重みは、Roboflowの [Platform Model License](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/94f1759ba4c2191b2de74647113cdeb9160baf4d" 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/eca85107fb7ece30a37e4414080e04c89047d11d" alt="Dataset version selector for a NAS training run."><figcaption><p>NAS実行用のデータセットバージョンを選択または作成してください。</p></figcaption></figure>
{% endstep %}

{% step %}

#### バックボーンを選択する（物体検出のみ）

物体検出プロジェクトでは、3つのバックボーンオプションから選べます：

* **Fast** - 最速の学習で、最も低レイテンシーのモデルを見つけます。推論速度が最優先のCPUまたはエッジ展開に最適です。
* **Standard** - バランスの取れた学習時間で、幅広いレイテンシー範囲のモデルを見つけます。速度と精度の良いトレードオフが欲しいエッジまたはGPU展開に最適です。
* **Plus** - 最も高精度なモデルを見つけます。レイテンシーより精度が重要なクラウドGPU展開に最適です。

インスタンスセグメンテーションのプロジェクトでは単一のバックボーンを使用し、この手順は省略されます。
{% endstep %}

{% step %}
**学習を開始する**

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

<figure><img src="/files/7df6d570d9db4977eb75e84a362641f6a680a273" alt="Start Training button on the NAS configuration page."><figcaption><p>設定ページからNAS実行を開始します。</p></figcaption></figure>
{% endstep %}
{% endstepper %}

## NAS結果ページの見方

<figure><img src="/files/345b5aca4942c55a2b13f4fb3d5ecce2326ea778" 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/ja/ping-si/training-results.md).

## NAS実行を停止する

NASジョブには2つのフェーズがあります - **学習** と **探索** - で、同じジョブ内で連続して実行されます。停止する方法は2つあります：

* **早期停止** （現在のフロンティアに満足している場合に推奨）。フェーズに応じて「Stop Training Early」または「Stop Mining」をクリックします。それまでに探索されたモデルは保持され、デプロイできます。完了した作業に対するクレジットは課金されます。詳細は [学習ジョブの停止またはキャンセル](/models/ja/xue-xi/cancel-a-training-job.md) を参照してください。
* **キャンセル** （実行を完全に破棄したい場合）。「Cancel Training」をクリックします。重みは保存されませんが、ジョブの早い段階でキャンセルした場合はクレジットが返金されます。詳細は [学習ジョブの停止またはキャンセル](/models/ja/xue-xi/cancel-a-training-job.md).

{% hint style="info" %}
NAS実行は、モデルが収束したとき、つまりすべての目標エポックが終了する前に性能がピークに達したときにも自動的に停止します。結果ページのバナーでそれが起きたことが示されます。あなたが何か操作する必要はありません。
{% endhint %}

## NASで見つかったモデルのデプロイ

NASで見つかったモデルは、他のRoboflowで学習したモデルと同様にデプロイできます。次の環境で実行できます：

* **Roboflow Serverless Cloud API** （以下のコード例を参照）。
* **専用デプロイ** より高いスループットまたは予約済み容量向け。
* **Workflows** と **Batch Processing** ビジョンパイプラインの構築と実行向け。
* **セルフホスト** [**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` に向けます。NASモデルIDを、他のRoboflowモデルと同じように呼び出してください。以下のコード例はホストされたエンドポイントでもローカルのInferenceサーバーでも動作します。 `api_url`.

### Roboflow Serverless Cloud 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}",
    headers={
        "Content-Type": "application/x-www-form-urlencoded",
        "Authorization": f"Bearer {API_KEY}",
    },
    data=image_data,
)

print(response.json())
```

{% endtab %}

{% tab title="Python（inference-sdk）" %}
依存関係をインストールするには、 `pip install inference-sdk`.

```python
from inference_sdk import InferenceHTTPClient, InferenceConfiguration

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

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 @- \
-H "Authorization: Bearer roboflow-API-KEY" \
"https://serverless.roboflow.com/your-workspace/the-model-id-here"
```

URL経由で、Web上の別の場所にホストされた画像に対して推論する場合（忘れずに [URLエンコードしてください](https://www.urlencoder.org/)):

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

{% endtab %}

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

これらの例では組み込みの `fetch` APIを使用します。これはNode.js 18以降と最新のブラウザで動作するため、インストールする依存関係はありません。

**ローカル画像に対して推論する**

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

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

fetch("https://serverless.roboflow.com/your-workspace/the-model-id-here", {
    method: "POST",
    headers: {
        "Content-Type": "application/x-www-form-urlencoded",
        "Authorization": "Bearer roboflow-API-KEY"
    },
    body: image
})
    .then((response) => {
        if (!response.ok) throw new Error("Request failed with status " + response.status);
        return response.json();
    })
    .then((data) => {
        console.log(data);
    })
    .catch((error) => {
        console.log(error.message);
    });
```

**URL経由で別の場所にホストされた画像に対して推論する**

```javascript
fetch(
    "https://serverless.roboflow.com/your-workspace/the-model-id-here?image=" +
        encodeURIComponent("https://i.imgur.com/PEEvqPN.png"),
    {
        method: "POST",
        headers: {
            "Authorization": "Bearer roboflow-API-KEY"
        }
    }
)
    .then((response) => {
        if (!response.ok) throw new Error("Request failed with status " + response.status);
        return response.json();
    })
    .then((data) => {
        console.log(data);
    })
    .catch((error) => {
        console.log(error.message);
    });
```

{% endtab %}
{% endtabs %}
