インスタンスセグメンテーションデータセットの概要#
インスタンスセグメンテーションは、画像内の個々の物体を識別し、その領域を区分するコンピュータビジョンタスクです。このガイドでは、インスタンスセグメンテーションタスク向けにUltralytics YOLOがサポートするデータセット形式の概要と、モデルのトレーニングに向けたデータセットの準備、変換、使用方法を説明します。
サポートされているデータセット形式#
Ultralytics YOLO形式#
YOLOセグメンテーションモデルのトレーニングに使用するデータセットのラベル形式は、次のとおりです。
- 画像ごとに1つのテキストファイル:データセット内の各画像に、画像ファイルと同じ名前で拡張子が「.txt」のテキストファイルが対応します。
- 物体ごとに1行:テキストファイルの各行は、画像内の1つの物体インスタンスに対応します。
- 各行に物体情報を記載:各行には、物体インスタンスに関する次の情報が含まれます。
- 物体クラスのインデックス:物体のクラスを表す整数(例:人は0、車は1など)。
- 物体ポリゴンの座標:物体のマスクの輪郭を示す
(x, y)の点で、値は0~1に正規化されています。
セグメンテーションデータセットファイルにおける1行の形式は、次のとおりです。
<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>この形式では、<class-index>は物体のクラスインデックスで、<x1> <y1> <x2> <y2> ... <xn> <yn>は物体のセグメンテーションマスクを表す正規化済みポリゴン座標です(値は画像の幅と高さに対する[0, 1]です)。座標はスペースで区切られます。
以下は、3点のセグメントと5点のセグメントで構成された2つの物体を含む、1枚の画像に対するYOLOデータセット形式の例です。
0 0.681 0.485 0.670 0.487 0.676 0.487
1 0.504 0.000 0.501 0.004 0.498 0.004 0.493 0.010 0.492 0.0104- 各行の長さは同じである必要はありません。
- 各セグメンテーションラベルには、最低3つの
(x, y)点が必要です:<class-index> <x1> <y1> <x2> <y2> <x3> <y3> - すべてのオブジェクトにポリゴンが必要です。検出形式の行(
<class-index> <x_center> <y_center> <width> <height>)にはポリゴンが含まれておらず、ボックス数とポリゴン数が一致しないセグメンテーションデータセットは、ラベルの読み込み時にValueErrorで拒否されます。
データセットのYAML形式#
Ultralyticsフレームワークでは、学習用のセグメンテーションモデルのデータセットおよびモデル設定を定義するために、YAMLファイル形式を使用します。以下は、セグメンテーションデータセットの定義に使用するYAML形式の例です。
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg
# Example usage: yolo train data=coco8-seg.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco8-seg ← downloads here (1 MB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: coco8-seg # dataset root dir
train: images/train # train images (relative to 'path') 4 images
val: images/val # val images (relative to 'path') 4 images
test: # test images (optional)
# Classes
names:
0: person
1: bicycle
2: car
3: motorcycle
4: airplane
5: bus
6: train
7: truck
8: boat
9: traffic light
10: fire hydrant
11: stop sign
12: parking meter
13: bench
14: bird
15: cat
16: dog
17: horse
18: sheep
19: cow
20: elephant
21: bear
22: zebra
23: giraffe
24: backpack
25: umbrella
26: handbag
27: tie
28: suitcase
29: frisbee
30: skis
31: snowboard
32: sports ball
33: kite
34: baseball bat
35: baseball glove
36: skateboard
37: surfboard
38: tennis racket
39: bottle
40: wine glass
41: cup
42: fork
43: knife
44: spoon
45: bowl
46: banana
47: apple
48: sandwich
49: orange
50: broccoli
51: carrot
52: hot dog
53: pizza
54: donut
55: cake
56: chair
57: couch
58: potted plant
59: bed
60: dining table
61: toilet
62: tv
63: laptop
64: mouse
65: remote
66: keyboard
67: cell phone
68: microwave
69: oven
70: toaster
71: sink
72: refrigerator
73: book
74: clock
75: vase
76: scissors
77: teddy bear
78: hair drier
79: toothbrush
# Download script/URL (optional)
download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.ziptrain、val、testの各フィールドは、学習、検証、テスト用画像を指定します。各フィールドには、ディレクトリ、ディレクトリのリスト、または1行につき1つの画像パスを記載した*.txtファイルを指定できます(./で始まるパスは、*.txtファイルを基準に解決されます)。*.txtファイルを使うと、ディレクトリ内の一部だけを学習に使用したり、ラベルのない画像を除外したり、複数のソースの画像を1つの分割にまとめたりできます。
path: datasets/coco8-seg # dataset root
train: train.txt # a directory, a list e.g. [images/a, images/b], or a *.txt file
val: val.txt
names:
0: personnamesはクラス名の辞書です。クラス名の順序は、YOLOデータセットファイル内のオブジェクトクラスインデックスの順序と一致させてください。
使用方法#
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n-seg.pt") # 事前トレーニング済みモデルを読み込みます(トレーニングにはこちらを推奨します)
# モデルをトレーニングする
results = model.train(data="coco8-seg.yaml", epochs=100, imgsz=640)サポート対象のデータセット#
Ultralytics YOLOは、インスタンスセグメンテーションタスク向けにさまざまなデータセットをサポートしています。以下は、最もよく使用されるデータセットの一覧です。これらのデータセットの多くはUltralytics Platformでもホストされており、画像やアノテーションの閲覧、データセット統計の確認、クラウド学習用のクローン作成ができます。
- Carparts-seg:自動車部品のセグメンテーションに特化したデータセットで、自動車関連の用途に最適です。さまざまな車両が含まれており、個々の車両部品に詳細なアノテーションが付けられています。
- COCO:物体検出、セグメンテーション、キャプション生成向けの包括的なデータセットです。幅広いカテゴリにわたる20万枚以上のラベル付き画像を収録しています。
- COCO8-seg:セグメンテーションモデルの学習をすばやくテストするために設計された、COCOのコンパクトな8枚の画像サブセットです。
ultralyticsリポジトリでのCIチェックやワークフロー検証に最適です。 - COCO128-seg:インスタンスセグメンテーションタスク向けの小規模なデータセットで、セグメンテーションアノテーション付きのCOCO画像128枚のサブセットが含まれています。
- Crack-seg:さまざまな表面のひび割れのセグメンテーションに特化したデータセットです。インフラの保守や品質管理に不可欠で、構造上の弱点を検出するモデルの学習に役立つ詳細な画像を提供します。
- Package-seg:さまざまな種類や形状の包装材のセグメンテーションに特化したデータセットです。物流や倉庫の自動化に特に有用で、荷物の取り扱いや仕分けを行うシステムの開発に役立ちます。
独自のデータセットを追加する#
独自のデータセットをお持ちで、Ultralytics YOLO形式を使ってセグメンテーションモデルを学習したい場合は、「Ultralytics YOLO形式」で前述した形式に準拠していることを確認してください。アノテーションを必要な形式に変換し、YAML設定ファイルでパス、クラス数、クラス名を指定します。images/とlabels/は同じ階層にある別々のフォルダーとし、サブフォルダー構造を一致させてください。画像フォルダー内にラベルの.txtファイルを置くと、モデルがラベルを認識できなくなる場合があります。
ラベル形式の移植または変換#
COCOデータセット形式からYOLO形式への変換#
以下のコードスニペットを使用すると、一般的なCOCOデータセット形式からYOLO形式にラベルを簡単に変換できます。
from ultralytics.data.converter import convert_coco
convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)この変換ツールを使うと、COCOデータセットやCOCO形式の任意のデータセットをUltralytics YOLO形式に変換できます。
使用するデータセットがモデルと互換性があり、必要な形式規則に準拠していることを必ず再確認してください。セグメンテーションモデルの学習を成功させるには、データセットが適切にフォーマットされていることが重要です。
自動アノテーション#
自動アノテーションは、学習済みの検出モデルを使ってセグメンテーションデータセットを生成できる重要な機能です。手動でラベル付けする必要なく、多数の画像にすばやく正確にアノテーションを付けられるため、時間と労力を節約できます。
検出モデルを使用したセグメンテーションデータセットの生成#
Ultralyticsフレームワークを使ってデータセットに自動アノテーションを付けるには、以下のようにauto_annotate関数を使用します。
from ultralytics.data.annotator import auto_annotate
auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt")| 引数 | 種類 | デフォルト | 説明 |
|---|---|---|---|
data | str | 必須 | アノテーションまたはセグメンテーションの対象画像を含むディレクトリへのパス。 |
det_model | str | 'yolo26x.pt' | 初期の物体検出に使用するYOLO検出モデルのパス。 |
sam_model | str | 'sam_b.pt' | セグメンテーションに使用するSAMモデルのパス(SAM、SAM 2、MobileSAM、SAM 3の重みに対応)。 |
device | str | '' | 計算デバイス(例:'cuda:0'、'cpu'、またはデバイスを自動検出する場合は'')。 |
conf | float | 0.25 | 信頼度の低い検出結果を除外するためのYOLO検出信頼度しきい値。 |
iou | float | 0.45 | 重複するボックスを除外するための非最大値抑制のIoUしきい値。 |
imgsz | int | 640 | 画像のリサイズに使用する入力サイズ(必要に応じて32の倍数に切り上げられます)。 |
max_det | int | 300 | メモリ効率を高めるための、画像ごとの検出数の最大値。 |
classes | list[int] | None | 検出するクラスインデックスのリスト(例:人物と自転車の場合は[0, 1])。 |
output_dir | str | None | アノテーションの保存ディレクトリ(デフォルト:兄弟ディレクトリの<data>_auto_annotate_labels)。 |
auto_annotate関数には画像のパスを指定します。また、学習済みの検出モデル(例:YOLO26、YOLO11、その他のモデル)、セグメンテーションモデル(例:SAM、SAM 2、MobileSAM、SAM 3)、モデルを実行するデバイス、アノテーション結果を保存する出力ディレクトリも、オプション引数で指定できます。
学習済みモデルの能力を活用することで、自動アノテーションは高品質なセグメンテーションデータセットの作成に必要な時間と労力を大幅に削減できます。この機能は、大規模な画像コレクションを扱う研究者や開発者に特に有用です。手動アノテーションではなく、モデルの開発や評価に注力できます。
データセットのアノテーションを可視化する#
モデルを学習する前に、データセットのアノテーションを可視化して正しいことを確認すると役立つ場合があります。Ultralyticsは、この目的のためのユーティリティ関数を提供しています。この関数が読み取るのは検出形式のボックスラベル(<class-index> <x_center> <y_center> <width> <height>)のみであり、セグメンテーションのポリゴンラベルファイルは解析できません。
from ultralytics.data.utils import visualize_image_annotations
label_map = { # アノテーション済みのクラスラベルをすべて含むラベルマップを定義します。
0: "person",
1: "car",
}
# Visualize
visualize_image_annotations(
"path/to/image.jpg", # 入力画像のパス。
"path/to/annotations.txt", # 画像のアノテーションファイルのパス。
label_map,
)この関数はバウンディングボックスを描画し、クラス名でオブジェクトにラベルを付け、読みやすくなるようにテキストの色を調整します。学習前にアノテーションの誤りを見つけて修正するのに役立ちます。
セグメンテーションマスクのYOLO形式への変換#
各ピクセル値がクラスインデックス + 1(0は背景)を表すグレースケールマスク画像がある場合は、以下を使用してYOLOセグメンテーション形式に変換できます。
from ultralytics.data.converter import convert_segment_masks_to_yolo_seg
# COCOのように80クラスを持つデータセットの場合
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)このユーティリティは、マスク画像をYOLOセグメンテーション形式に変換し、指定された出力ディレクトリに保存します。
よくある質問#
Ultralytics YOLOは、インスタンスセグメンテーション向けに複数のデータセット形式をサポートしており、主な形式は独自のUltralytics YOLO形式です。データセット内の各画像には、複数行(オブジェクトごとに1行)でオブジェクト情報を記述した対応するテキストファイルが必要です。このファイルには、クラスインデックスと正規化されたポリゴン座標を記載します。YOLOデータセット形式の詳細な手順については、インスタンスセグメンテーションデータセットの概要をご覧ください。
Ultralyticsのツールを使うと、COCO形式のアノテーションをYOLO形式に簡単に変換できます。
ultralytics.data.converterモジュールのconvert_coco関数を使用できます。from ultralytics.data.converter import convert_coco convert_coco(labels_dir="path/to/coco/annotations/", use_segments=True)このスクリプトは、COCOデータセットのアノテーションを必要なYOLO形式に変換し、YOLOモデルの学習に使用できるようにします。詳細については、ラベル形式の移植または変換をご覧ください。
UltralyticsでYOLOモデルを学習するためのYAMLファイルを準備するには、データセットのパスとクラス名を定義する必要があります。以下はYAML設定の例です。
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license # COCO8-seg dataset (first 8 images from COCO train2017) by Ultralytics # Documentation: https://docs.ultralytics.com/datasets/segment/coco8-seg # Example usage: yolo train data=coco8-seg.yaml # parent # ├── ultralytics # └── datasets # └── coco8-seg ← downloads here (1 MB) # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..] path: coco8-seg # dataset root dir train: images/train # train images (relative to 'path') 4 images val: images/val # val images (relative to 'path') 4 images test: # test images (optional) # Classes names: 0: person 1: bicycle 2: car 3: motorcycle 4: airplane 5: bus 6: train 7: truck 8: boat 9: traffic light 10: fire hydrant 11: stop sign 12: parking meter 13: bench 14: bird 15: cat 16: dog 17: horse 18: sheep 19: cow 20: elephant 21: bear 22: zebra 23: giraffe 24: backpack 25: umbrella 26: handbag 27: tie 28: suitcase 29: frisbee 30: skis 31: snowboard 32: sports ball 33: kite 34: baseball bat 35: baseball glove 36: skateboard 37: surfboard 38: tennis racket 39: bottle 40: wine glass 41: cup 42: fork 43: knife 44: spoon 45: bowl 46: banana 47: apple 48: sandwich 49: orange 50: broccoli 51: carrot 52: hot dog 53: pizza 54: donut 55: cake 56: chair 57: couch 58: potted plant 59: bed 60: dining table 61: toilet 62: tv 63: laptop 64: mouse 65: remote 66: keyboard 67: cell phone 68: microwave 69: oven 70: toaster 71: sink 72: refrigerator 73: book 74: clock 75: vase 76: scissors 77: teddy bear 78: hair drier 79: toothbrush # Download script/URL (optional) download: https://github.com/ultralytics/assets/releases/download/v0.0.0/coco8-seg.zipデータセットに合わせてパスとクラス名を更新してください。詳細については、データセットのYAML形式のセクションをご覧ください。
Ultralytics YOLOの自動アノテーション機能を使うと、学習済みの検出モデルでデータセットのセグメンテーションアノテーションを生成できます。これにより、手動でラベル付けする必要性を大幅に減らせます。以下のように
auto_annotate関数を使用できます。from ultralytics.data.annotator import auto_annotate auto_annotate(data="path/to/images", det_model="yolo26x.pt", sam_model="sam_b.pt") # または sam_model="mobile_sam.pt"この関数はアノテーションプロセスを自動化し、より迅速かつ効率的にします。詳細については、自動アノテーションのリファレンスをご覧ください。