Ultralytics YOLO27:

インスタンスセグメンテーションデータセットの概要#

インスタンスセグメンテーションは、画像内の個々のオブジェクトを識別し、その輪郭を描画するコンピュータビジョンタスクです。このガイドでは、インスタンスセグメンテーションタスク向けに Ultralytics YOLO がサポートするデータセット形式の概要と、モデルのトレーニングに向けたデータセットの準備、変換、使用方法について説明します。

サポートされているデータセット形式#

Ultralytics YOLO形式#

YOLO セグメンテーションモデルのトレーニングに使用するデータセットラベル形式は次のとおりです。

  1. 画像ごとに1つのテキストファイル:データセット内の各画像には、画像ファイルと同じ名前で拡張子が ".txt" の対応するテキストファイルがあります。
  2. オブジェクトごとに1行:テキストファイルの各行は、画像内の1つのオブジェクトインスタンスに対応します。
  3. 行ごとのオブジェクト情報:各行には、オブジェクトインスタンスに関する次の情報が含まれます。
    • オブジェクトクラスインデックス:オブジェクトのクラスを表す整数です(例:person は 0、car は 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/cfg/datasets/coco8-seg.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

trainvaltest フィールドは、トレーニング、検証、テスト画像を指します。それぞれ、ディレクトリ、ディレクトリのリスト、または1行に1つの画像パスを記載した *.txt ファイルを指定できます(./ で始まるパスは *.txt ファイルを基準に解決されます)。*.txt ファイルは、ディレクトリのサブセットでのトレーニング、ラベルのない画像のスキップ、複数のソースの画像の1つの分割への統合に便利です。

`*.txt`ファイルとしての画像パス
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: person

names はクラス名の辞書です。名前の順序は、YOLO データセットファイル内のオブジェクトクラスインデックスの順序と一致している必要があります。

使用方法#

from ultralytics import YOLO

# Load a model
model = YOLO("yolo26n-seg.pt")  # load a pretrained model (recommended for training)

# Train the model
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")
引数デフォルト説明
datastr必須アノテーションまたはセグメンテーションの対象画像を含むディレクトリへのパスです。
det_modelstr'yolo26x.pt'初期オブジェクト検出に使用する YOLO 検出モデルのパスです。
sam_modelstr'sam_b.pt'セグメンテーションに使用する SAM モデルのパスです(SAM、SAM 2、MobileSAM、SAM 3 の重みをサポートします)。
devicestr''計算デバイスです(例: 'cuda:0'、'cpu'、または自動デバイス検出の場合は '')。
conffloat0.25弱い検出結果を除外するための YOLO 検出信頼度しきい値です。
ioufloat0.45重複するボックスを除外するための Non-Maximum Suppression の IoU しきい値です。
imgszint640画像のリサイズに使用する入力サイズです(32 の倍数である必要があります)。
max_detint300メモリ効率を高めるための、画像ごとの検出数の最大値です。
classeslist[int]None検出するクラスインデックスのリストです(例: person と bicycle の場合は [0, 1])。
output_dirstrNoneアノテーションの保存先ディレクトリです(デフォルト: <data>_auto_annotate_labels と同階層)。

auto_annotate 関数は、画像へのパスに加えて、事前トレーニング済みの検出モデル(例:YOLO26YOLO11、その他のモデル)、セグメンテーションモデル(例:SAMSAM 2MobileSAMSAM 3)、モデルを実行するデバイス、アノテーション結果の保存先ディレクトリを指定するオプション引数を受け取ります。

事前トレーニング済みモデルの性能を活用することで、自動アノテーションは高品質なセグメンテーションデータセットの作成に必要な時間と労力を大幅に削減できます。この機能は、大規模な画像コレクションを扱う研究者や開発者に特に役立ちます。手動アノテーションではなく、モデルの開発と評価に集中できるためです。

データセットアノテーションの可視化#

モデルをトレーニングする前に、データセットのアノテーションが正しいことを確認するため、可視化すると便利な場合があります。Ultralytics では、この目的のためのユーティリティ関数を提供しています。

from ultralytics.data.utils import visualize_image_annotations

label_map = {  # Define the label map with all annotated class labels.
    0: "person",
    1: "car",
}

# Visualize
visualize_image_annotations(
    "path/to/image.jpg",  # Input image path.
    "path/to/annotations.txt",  # Annotation file path for the image.
    label_map,
)

この関数はバウンディングボックスを描画し、クラス名でオブジェクトにラベルを付け、読みやすさを向上させるためにテキストの色を調整します。これにより、トレーニング前にアノテーションエラーを特定して修正できます。

セグメンテーションマスクの YOLO 形式への変換#

バイナリ形式のセグメンテーションマスクがある場合は、次の方法で YOLO セグメンテーション形式に変換できます。

from ultralytics.data.converter import convert_segment_masks_to_yolo_seg

# For datasets like COCO with 80 classes
convert_segment_masks_to_yolo_seg(masks_dir="path/to/masks_dir", output_dir="path/to/output_dir", classes=80)

このユーティリティは、バイナリマスク画像を YOLO セグメンテーション形式に変換し、指定した出力ディレクトリに保存します。

FAQ#

  • Ultralytics YOLO は、インスタンスセグメンテーション向けに複数のデータセット形式をサポートしており、主な形式は独自の Ultralytics YOLO 形式です。データセット内の各画像には、オブジェクト情報を複数行(オブジェクトごとに1行)に分け、クラスインデックスと正規化されたバウンディング座標を記載した対応するテキストファイルが必要です。YOLO データセット形式の詳細な手順については、インスタンスセグメンテーションデータセットの概要を参照してください。

  • Ultralytics ツールを使用すれば、COCO 形式のアノテーションを YOLO 形式に簡単に変換できます。convert_coco モジュールの ultralytics.data.converter 関数を使用できます。

    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")  # or sam_model="mobile_sam.pt"

    この関数はアノテーションプロセスを自動化し、より迅速かつ効率的にします。詳細については、自動アノテーションのリファレンスを参照してください。

コメント