# Workflow を構築

Workflow はブロックで構成されており、ブロックはモデル推論の実行、ロジックの実行、外部サービスとの連携など、特定のタスクを実行します。

利用可能なブロックの一覧についてさらに詳しく知りたい場合は、こちらをご覧ください。 [ブロックのドキュメント](https://inference.roboflow.com/workflows/blocks/).

### 概要

このガイドでは、オブジェクト検出モデルを実行し、予測をカウントし、モデル結果を可視化するための 4 ブロックの workflow の作成方法を説明します。こちらが [最終的な workflow テンプレート](https://app.roboflow.com/workflows/embed/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3JrZmxvd0lkIjoiMmdqakJxMDV3Q01ac1hHM3hkeFAiLCJ3b3Jrc3BhY2VJZCI6ImtyT1RBYm5jRmhvUU1DZExPbGU0IiwidXNlcklkIjoiSW1GTElaU2tHYk55OXpiNFV1cWxNelBScHBRMiIsImlhdCI6MTczODE4ODk5MH0.f72WI5bdjtnwC8iqXF_XiUVarfOktIAH1egpsI0Oh4Q) です。これに沿って進めていきましょう。

{% embed url="<https://app.roboflow.com/workflows/embed/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ3b3JrZmxvd0lkIjoiMmdqakJxMDV3Q01ac1hHM3hkeFAiLCJ3b3Jrc3BhY2VJZCI6ImtyT1RBYm5jRmhvUU1DZExPbGU0IiwidXNlcklkIjoiSW1GTElaU2tHYk55OXpiNFV1cWxNelBScHBRMiIsImlhdCI6MTczODE4ODk5MH0.f72WI5bdjtnwC8iqXF_XiUVarfOktIAH1egpsI0Oh4Q>" fullWidth="false" %}

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-3320b2627ac743a17afb97f63c70993b4cbe3b51%2FCleanShot%202025-01-29%20at%2015.25.03%402x.png?alt=media" alt="" width="563"><figcaption><p>検出、カウント、可視化 Workflow</p></figcaption></figure>

### ブロックの接続

始める前に、ブロックの接続がどのように機能するかを理解しておくことが重要です。

場所にブロックを追加するには、前のブロックを入力として使用する必要があります。たとえば、上に示したワークフローでは、 *Property Definition* ブロックは *Object Detection* ブロックの後に配置されます。これは、model blockを入力として使用するためです。 *Bounding Box Visualization* ブロックは右側にあります。これは、 *Property Definition* ブロックの出力は使用しないものの、model outputは参照するためです。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-79fa8c10219b4a7e8e0696acceae5e297f05f70f%2FCleanShot%202025-01-29%20at%2016.31.28%402x.png?alt=media" alt=""><figcaption><p>Model Comparison Workflow</p></figcaption></figure>

上の例のワークフローでは、4つの異なるパスがあります。各ブランチは実行時に並列で実行され、他のブランチのブロックを入力として必要としないためです。

### Builder Assist

Builder Assist は、ブロックを接続・挿入するときに workflow editor がどれだけサポートするかを制御します。右上の navbar のトグルを使ってモードを切り替えられます。

モードは 3 つあります:

* **Auto** （デフォルト）：ブロックが接続または挿入されると、互換性のある input フィールドと output フィールドを自動的に配線します。ブロックを削除または切断したときには、builder が downstream の参照も修復します。
* **Quick**：推奨される接続とブロックの候補を表示しますが、実際に適用されるのは明示的に承認した場合のみです。builder に変更を任せず、ガイダンスだけ欲しい場合に便利です。
* **Manual**：提案も自動配線もありません。すべての接続を自分で管理します。

選択したモードはローカルに保存されるため、セッションをまたいでも保持されます。

### Workflow の作成

#### Object Detection モデル

まず、 *Object Detection モデル* ブロックを追加します。YOLOv8n を COCO で学習したものなど、公開されている事前学習済みモデルを選ぶこともできますし、 [COCO](https://universe.roboflow.com/microsoft/coco)、またはワークスペース内のファインチューニング済みモデルを選ぶこともできます。ここでは事前学習済みの *yolov8n* モデルを使って、人や車両を検出します。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-bc18512f57a057976473b7d03cc7ee3a884e67e3%2FCleanShot%202025-01-29%20at%2015.30.31%402x.png?alt=media" alt="" width="344"><figcaption></figcaption></figure>

object detection ブロックには、モデルが何に対して推論を行うかを決定する必須の画像パラメータがあります。ほかにもいくつかのオプションパラメータがあり、主要なものは以下で詳しく説明します:

* Class Filter: モデルが返すクラスの一覧。注意: モデルは常に学習済みのクラスのみを返します。これは、不要なクラスを除外するためのものです。
* Confidence: この信頼度未満のオブジェクトは返されません。
* IoU threshold: しきい値が高いほど、重複する予測がより多く返されます。0.9 は、90% 以下の重なりを持つオブジェクトが返されることを意味し、0.1 は、10% を超える重なりを持つオブジェクトが含まれないことを意味します。
* Max Detections: モデルが返すオブジェクトの最大数
* Class Agnostic NMS: 重なりのフィルタリングで、同じクラスのオブジェクトのみを比較して除外するのか、すべてのクラスを対象にするのかを示します

#### Property Definition

property definition ブロックを使用すると、画像サイズ、予測クラス、検出されたオブジェクト数など、データから関連情報を抽出できます。この例では、object detection model によって見つかったオブジェクト数をカウントします。

<figure><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXc507UbRnkEH6XMdrfmwVZbHcK6x6K5THwnt1RmEk8iXSojwvmiA_q6KwRXV9bJudYnW7NMTQKKb9GqGxm_P0VjbuOoGWcDsM5NoQckl9jV4YcjYQFIvYoCgvd_YnQTNJLlwdbZwA?key=yGJPQzp1abf4J7pT0mnBw8w4" alt="" width="375"><figcaption></figcaption></figure>

For the *Data* property, model predictions を参照します。 *Operations*では、Count Items を選択します。この設定により、object detection model によって行われた予測数が返されます。

#### Bounding Box Visualization

モデルの結果を可視化するために、バウンディングボックスの可視化ブロックを追加します。 *画像* パラメータでは入力画像を選択します。予測結果にはモデルの結果を選択します。オプションの構成プロパティを使用して、バウンディングボックスの色とサイズを変更することもできます。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-c02309fdf720d80b86c1de59ed126c7b7d9a2f9d%2FCleanShot%202025-01-29%20at%2015.31.50%402x.png?alt=media" alt="" width="342"><figcaption></figcaption></figure>

#### ラベルの可視化

バウンディングボックスを描画するだけでなく、予測のクラス名も表示したいです。そのためには、 *ラベルの可視化* ブロックをバウンディングボックスの可視化の後に追加します。バウンディングボックスとラベルの両方を同じ画像上に描画するには、参照する入力画像ではなく、 *bounding\_box\_visualization* 画像を参照するように参照入力画像を設定する必要があります。これにより、バウンディングボックスの上にラベルが描画されます。

<figure><img src="https://3740591140-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-M6S9nPJhEX9FYH6clfW%2Fuploads%2Fgit-blob-cdcb7551292e790e706a1451b75bd3dcca6b28eb%2FCleanShot%202025-01-29%20at%2016.17.06%402x.png?alt=media" alt="" width="343"><figcaption></figcaption></figure>

オプションの *Text* パラメータを変更して、表示テキストをクラス名、信頼度、クラス名と信頼度のいずれかに変更できます。

### 変更を保存

Workflow の作成が完了したら、「Save Workflow」をクリックします。Workflow をデプロイしている場合、保存した Workflow は、Workflow がデプロイされたすべてのデバイスで実行を開始します。

これで Workflow が完成したので、テストする段階です。
