7つのビジョンタスク
出力の行を分類、検出、インスタンスセグメンテーション、セマンティックセグメンテーション、深度推定、姿勢推定、OBBのいずれかに対応させ、最初に使うYOLO26の重みを選びます。
タスクの選択は、学習前に行う判断の中で最もコストがかかります。ボックスで十分なのにセグメンテーションを選ぶと、ラベル付けの費用が膨らみます。ドローンから見た船に直立ボックスを使うと、ボックスの大部分が水になります。Ultralytics YOLOは1つのAPIで7つのタスクをサポートするため、選択の基準はツールではなく、必要な出力です。
実践的
7つのタスクの概要#

表は出力の列を基準に確認してください。仕様の出力の行で一致させるのは、この列です。
| タスク | 出力 | 答えられる質問 | YOLO26の重み |
|---|---|---|---|
| 分類 | 画像ごとに1つのラベルと確率 | 「この画像は何ですか?」 | yolo26n-cls.pt |
| 検出 | 物体ごとのクラス、ボックス、信頼度 | 「何がどこにありますか?」 | yolo26n.pt |
| インスタンスセグメンテーション | オブジェクトごとのクラスとピクセルマスク | 「各オブジェクトの正確な形状は?」 | yolo26n-seg.pt |
| セマンティックセグメンテーション | すべてのピクセルに1つのクラス | 「各ピクセルはどの種類の領域?」 | yolo26n-sem.pt |
| 深度推定 | すべてのピクセルの距離(メートル単位) | 「各ピクセルはどれくらい離れている?」 | yolo26n-depth.pt |
| 姿勢推定 | 人またはオブジェクトごとのボックスとキーポイント | 「体はどのような姿勢?」 | yolo26n-pose.pt |
| 回転境界ボックス | オブジェクトごとの回転ボックス | 「何がどこにあり、どの角度?」 | yolo26n-obb.pt |
混同しやすい組み合わせが2つあります。インスタンスセグメンテーションとセマンティックセグメンテーション:インスタンスセグメンテーションでは各オブジェクトを個別に分けます(車3台、マスク3つ)。セマンティックセグメンテーションではクラスごとにピクセルを分類するだけです(「車」の領域は1つで、個数は分かりません)。検出とOBB:どちらもオブジェクトごとに1つのボックスを返しますが、OBBはオブジェクトに合わせて回転します。これは上方視点の画像でオブジェクトが斜めに配置されている場合に重要です。
1つのAPI、7種類の出力#
タスクを切り替えても、ツールを切り替える必要はありません。返される内容は重みファイルによって決まり、Resultsオブジェクトには対応する属性が格納されます。
from ultralytics import YOLO
image = "https://ultralytics.com/images/bus.jpg"
outputs = ["probs", "boxes", "masks", "semantic_mask", "depth", "keypoints", "obb"]
for suffix in ["-cls", "", "-seg", "-sem", "-depth", "-pose", "-obb"]:
weights = f"yolo26n{suffix}.pt"
model = YOLO(weights)
result = model(image, verbose=False)[0]
filled = [name for name in outputs if getattr(result, name) is not None]
print(f"{weights:18} task={model.task:9} -> {', '.join(filled)}")yolo26n-cls.pt task=classify -> probs
yolo26n.pt task=detect -> boxes
yolo26n-seg.pt task=segment -> boxes, masks
yolo26n-sem.pt task=semantic -> semantic_mask
yolo26n-depth.pt task=depth -> depth
yolo26n-pose.pt task=pose -> boxes, keypoints
yolo26n-obb.pt task=obb -> obb右側の列を確認してください。セグメンテーションと姿勢推定は、検出にもう1つの出力を加えたものなので、ボックスも返します。一方、セマンティックセグメンテーションと深度推定は、オブジェクトごとの出力を返しません。代わりに、すべてのピクセルを表します。後続のコードではこれらの属性のうち1つだけを読み取るため、仕様の出力欄にはその属性を記載してください。
実際のタスク選び#
1回の予測で何を表す必要があるかを起点にして、判断に必要な情報を得られる最も低コストのタスクを選びます。
- 画像全体に1つのラベル → 分類。
- オブジェクトを個別に分ける必要はなく、すべてのピクセルにクラスが必要 → セマンティックセグメンテーション。
- すべてのピクセルの距離が必要 → 深度推定。
- 各オブジェクトについて知りたい場合:
- 数を数える、位置を特定する、またはフィルタリングするために位置を知りたい → 検出(フレーム間で同一性を追跡するにはトラッキングを追加)。
- 正確な形状、境界、または面積を知りたい → インスタンスセグメンテーション。
- 姿勢を知りたい → 姿勢推定。
- 上方視点の画像での回転を知りたい → OBB。
2つのタスクがどちらも適している場合は、ラベル付けと実行のコストが低いほうを選びます。ほとんどの製品では検出が標準です。ボックスはすばやく描画して確認でき、トラッキングを組み合わせれば、次の高速道路の映像のように、カウント、エリアアラート、交通量分析にも活用できます。

深度:「どれくらい離れているか」に答えるタスク#
深度推定は、画像と同じサイズのマップを返し、各ピクセルについて距離をメートル単位で示します。クラスもボックスもありません。距離が判断の基準になる場合に使用します。たとえば、障害物を避けるロボット、近くに物体があると減速する車両、積み上げた物の大まかな体積推定などです。
from ultralytics import YOLO
model = YOLO("yolo26n-depth.pt")
result = model("https://ultralytics.com/images/bus.jpg", verbose=False)[0]
depth = result.depth.data # meters, one value per pixel
print(f"depth map {tuple(depth.shape)}, nearest {float(depth.min()):.1f} m, farthest {float(depth.max()):.1f} m")depth map (1080, 810), nearest 2.0 m, farthest 14.9 m単眼カメラは、遠近感や物体の大きさなど、学習で得た手掛かりから深度を推定するため、安全性が重要な距離に使用する前に、実際のシーンで誤差を測定してください。深度推定は検出と組み合わせると効果的です。まず物体を検出し、そのボックス内の深度マップを読み取ります。
よくある落とし穴#
| 混同例 | 症状 | より適した選択 |
|---|---|---|
| ボックスで十分なのにセグメンテーションを使用 | 後続のコードでマスクを読み取ることがない | 検出 |
| 上方視点の画像に直立ボックスを使用 | ボックスの大部分が背景になり、隣接オブジェクト同士が互いに抑制される | OBB |
| 複数のオブジェクトがあるシーンに分類を使用 | ラベルが小さな1つのオブジェクトによって決まる | 検出とルール |
| 個数が必要なのにセマンティックセグメンテーションを使用 | 接触しているオブジェクトが1つの領域に統合される | インスタンスセグメンテーション |
| 距離の代用としてボックスのサイズを使用 | オブジェクトのサイズが変わるとルールが機能しなくなる | 深度推定、または検出と深度推定の組み合わせ |
| 存在確認に姿勢推定を使用 | キーポイントを一度も読み取らない | 検出 |
出力が詳細になるほど、あらゆる段階でコストが増えます。マスクやキーポイントは描画にもレビューにも時間がかかり、より厳密なラベル付けルールも必要です。意思決定ルールに答えられる最も低コストのタスクから始め、実際に利用する側が追加の詳細を必要とする場合に限ってアップグレードします。
解答を表示
フォークリフトの仕様の場合、答えはyolo26n.ptを使用した検出で、result.boxesから読み取ります。
判断に必要なのは、フォークリフトと人がどこにいるかです。これにより、コードで両者の距離がどれくらい近いかを判定できます。ボックスで十分です。インスタンスセグメンテーションを使ってもアラートは変わらず、ラベル付けのコストが増えるだけです。ボックスの下端から地面上の位置がすでに分かるためです。姿勢は判断に関係しないので、姿勢推定は不要です。深度推定を使えば画像上の位置をメートル単位に変換しやすくなりますが、固定カメラをキャリブレーションすれば、深度推定なしでも床面をマッピングできます。カメラが真下を向いていて、フォークリフトが急な斜め角度で映る場合に限り、OBBを試す価値があります。