Meet YOLO26: next-gen vision AI.

Link to this sectionTT100K データセット#

Tsinghua-Tencent 100K (TT100K) は、10万枚のTencentストリートビューパノラマから作成された大規模な交通標識ベンチマークデータセットです。このデータセットは、現実世界における交通標識の検出と分類を目的として特別に設計されており、堅牢な交通標識認識システムを構築するための包括的なリソースを研究者や開発者に提供します。

このデータセットには、221の注釈カテゴリーにまたがる3万件以上の交通標識インスタンスを含む10万枚の画像が収録されています。オリジナルの論文では教師あり学習のためにクラスごとに100インスタンスという閾値を適用し、一般的に使用される45クラスのサブセットを作成していますが、提供されているUltralyticsデータセット設定では221の注釈付きカテゴリーすべてが保持されており、その多くは非常にまばらなデータとなっています。これらの画像は、照明、気象条件、視野角、距離といった大きな変動を捉えており、多様な現実世界のシナリオで確実に機能する必要があるモデルのトレーニングに理想的です。

このデータセットは特に以下の用途に有効です。

  • 自動運転システム
  • 先進運転支援システム (ADAS)
  • 交通監視アプリケーション
  • 都市計画および交通分析
  • 現実世界におけるコンピュータビジョン研究

Link to this section主な特徴#

TT100K データセットにはいくつかの主要な利点があります。

  • 規模: 10万枚の高解像度画像 (2048×2048ピクセル)
  • 多様性: 中国の交通標識を網羅する221の交通標識カテゴリー
  • 現実世界の条件: 天候、照明、視野角の大きな変動
  • 豊富な注釈: 各標識にはクラスラベル、BBox、ピクセルマスクが含まれる
  • 包括的な網羅性: 禁止標識、警告標識、規制標識、案内標識を含む
  • Train/Test分割: 一貫した評価のための事前定義された分割

Link to this sectionデータセットの構造#

TT100K データセットは3つのサブセットに分割されています。

  1. トレーニングセット: さまざまな種類の交通標識を検出および分類するモデルをトレーニングするために使用される、交通シーン画像の主要コレクションです。
  2. 検証セット: モデル開発中にパフォーマンスを監視し、ハイパーパラメータを調整するために使用されるサブセットです。
  3. テストセット: 現実世界のシナリオで交通標識を検出および分類する最終モデルの能力を評価するために使用される、評価用の画像コレクションです。

TT100K データセットには、いくつかの主要なグループに整理された221の交通標識カテゴリーが含まれています。

制限速度標識 (pl, pm)**

  1. pl_: 禁止速度制限 (例: pl5, pl10, pl20, pl30, pl40, pl50, pl60, pl70, pl80, pl100, pl120)
  2. pm_: 最低速度制限 (例: pm5, pm10, pm20, pm30, pm40, pm50, pm55)

禁止標識 (p, pn, pr_)**

  1. p1-p29: 一般的な禁止標識 (進入禁止、駐車禁止、停車禁止など)
  2. pn/pne: 進入禁止および駐車禁止標識
  3. pr: 様々な制限標識 (例: pr10, pr20, pr30, pr40, pr50)

警告標識 (w_)

  1. w1-w67: 様々な道路の危険、状態、状況に関する警告標識
  2. 横断歩道、急カーブ、路面凍結、動物、工事などを含みます。

高さ/幅制限標識 (ph, pb, pw*)**

  1. ph_: 高さ制限標識 (例: ph2, ph2.5, ph3, ph3.5, ph4, ph4.5, ph5)
  2. pb/pw_: 幅制限標識

案内標識 (i, il, io, ip)**

  1. i1-i15: 一般的な案内標識
  2. il_: 速度制限案内 (il50, il60, il70, il80, il90, il100, il110)
  3. io: その他の案内標識
  4. ip: 情報板

Link to this sectionデータセット YAML#

データセット構成を定義するためにYAML (Yet Another Markup Language) ファイルが使用されます。これには、データセットのパス、クラス、およびその他の関連情報が含まれています。TT100K データセットの場合、TT100K.yaml ファイルには自動ダウンロードと変換機能が含まれています。

ultralytics/cfg/datasets/TT100K.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# Tsinghua-Tencent 100K (TT100K) dataset https://cg.cs.tsinghua.edu.cn/traffic-sign/ by Tsinghua University
# Documentation: https://cg.cs.tsinghua.edu.cn/traffic-sign/tutorial.html
# Paper: Traffic-Sign Detection and Classification in the Wild (CVPR 2016)
# License: CC BY-NC 2.0 license for non-commercial use only
# Example usage: yolo train data=TT100K.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── TT100K ← downloads here (~18 GB)

# 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: TT100K # dataset root dir
train: images/train # train images (relative to 'path') 6105 images
val: images/val # val images (relative to 'path') 7641 images (original 'other' split)
test: images/test # test images (relative to 'path') 3071 images

# Classes (221 traffic sign categories, 45 with sufficient training instances)
names:
  0: i1
  1: i10
  2: i11
  3: i12
  4: i13
  5: i14
  6: i15
  7: i2
  8: i3
  9: i4
  10: i5
  11: il100
  12: il110
  13: il50
  14: il60
  15: il70
  16: il80
  17: il90
  18: io
  19: ip
  20: p1
  21: p10
  22: p11
  23: p12
  24: p13
  25: p14
  26: p15
  27: p16
  28: p17
  29: p18
  30: p19
  31: p2
  32: p20
  33: p21
  34: p22
  35: p23
  36: p24
  37: p25
  38: p26
  39: p27
  40: p28
  41: p3
  42: p4
  43: p5
  44: p6
  45: p7
  46: p8
  47: p9
  48: pa10
  49: pa12
  50: pa13
  51: pa14
  52: pa8
  53: pb
  54: pc
  55: pg
  56: ph1.5
  57: ph2
  58: ph2.1
  59: ph2.2
  60: ph2.4
  61: ph2.5
  62: ph2.8
  63: ph2.9
  64: ph3
  65: ph3.2
  66: ph3.5
  67: ph3.8
  68: ph4
  69: ph4.2
  70: ph4.3
  71: ph4.5
  72: ph4.8
  73: ph5
  74: ph5.3
  75: ph5.5
  76: pl10
  77: pl100
  78: pl110
  79: pl120
  80: pl15
  81: pl20
  82: pl25
  83: pl30
  84: pl35
  85: pl40
  86: pl5
  87: pl50
  88: pl60
  89: pl65
  90: pl70
  91: pl80
  92: pl90
  93: pm10
  94: pm13
  95: pm15
  96: pm1.5
  97: pm2
  98: pm20
  99: pm25
  100: pm30
  101: pm35
  102: pm40
  103: pm46
  104: pm5
  105: pm50
  106: pm55
  107: pm8
  108: pn
  109: pne
  110: po
  111: pr10
  112: pr100
  113: pr20
  114: pr30
  115: pr40
  116: pr45
  117: pr50
  118: pr60
  119: pr70
  120: pr80
  121: ps
  122: pw2
  123: pw2.5
  124: pw3
  125: pw3.2
  126: pw3.5
  127: pw4
  128: pw4.2
  129: pw4.5
  130: w1
  131: w10
  132: w12
  133: w13
  134: w16
  135: w18
  136: w20
  137: w21
  138: w22
  139: w24
  140: w28
  141: w3
  142: w30
  143: w31
  144: w32
  145: w34
  146: w35
  147: w37
  148: w38
  149: w41
  150: w42
  151: w43
  152: w44
  153: w45
  154: w46
  155: w47
  156: w48
  157: w49
  158: w5
  159: w50
  160: w55
  161: w56
  162: w57
  163: w58
  164: w59
  165: w60
  166: w62
  167: w63
  168: w66
  169: w8
  170: wo
  171: i6
  172: i7
  173: i8
  174: i9
  175: ilx
  176: p29
  177: w29
  178: w33
  179: w36
  180: w39
  181: w4
  182: w40
  183: w51
  184: w52
  185: w53
  186: w54
  187: w6
  188: w61
  189: w64
  190: w65
  191: w67
  192: w7
  193: w9
  194: pax
  195: pd
  196: pe
  197: phx
  198: plx
  199: pmx
  200: pnl
  201: prx
  202: pwx
  203: w11
  204: w14
  205: w15
  206: w17
  207: w19
  208: w2
  209: w23
  210: w25
  211: w26
  212: w27
  213: pl0
  214: pl4
  215: pl3
  216: pm2.5
  217: ph4.4
  218: pn40
  219: ph3.3
  220: ph2.6

# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
  import json
  import shutil
  from pathlib import Path

  from PIL import Image

  from ultralytics.utils import TQDM
  from ultralytics.utils.downloads import download

  def tt100k2yolo(dir):
      """Convert TT100K annotations to YOLO format with images/{split} and labels/{split} structure."""
      data_dir = dir / "data"
      anno_file = data_dir / "annotations.json"

      print("Loading annotations...")
      with open(anno_file, encoding="utf-8") as f:
          data = json.load(f)

      # Build class name to index mapping from yaml
      names = yaml["names"]
      class_to_idx = {v: k for k, v in names.items()}

      # Create directories
      for split in ["train", "val", "test"]:
          (dir / "images" / split).mkdir(parents=True, exist_ok=True)
          (dir / "labels" / split).mkdir(parents=True, exist_ok=True)

      print("Converting annotations to YOLO format...")
      skipped = 0
      for img_id, img_data in TQDM(data["imgs"].items(), desc="Processing"):
          img_path_str = img_data["path"]
          if "train" in img_path_str:
              split = "train"
          elif "test" in img_path_str:
              split = "test"
          else:
              split = "val"

          # Source and destination paths
          src_img = data_dir / img_path_str
          if not src_img.exists():
              continue

          dst_img = dir / "images" / split / src_img.name

          # Get image dimensions
          try:
              with Image.open(src_img) as img:
                  img_width, img_height = img.size
          except Exception as e:
              print(f"Error reading {src_img}: {e}")
              continue

          # Copy image to destination
          shutil.copy2(src_img, dst_img)

          # Convert annotations
          label_file = dir / "labels" / split / f"{src_img.stem}.txt"
          lines = []

          for obj in img_data.get("objects", []):
              category = obj["category"]
              if category not in class_to_idx:
                  skipped += 1
                  continue

              bbox = obj["bbox"]
              xmin, ymin = bbox["xmin"], bbox["ymin"]
              xmax, ymax = bbox["xmax"], bbox["ymax"]

              # Convert to YOLO format (normalized center coordinates and dimensions)
              x_center = ((xmin + xmax) / 2.0) / img_width
              y_center = ((ymin + ymax) / 2.0) / img_height
              width = (xmax - xmin) / img_width
              height = (ymax - ymin) / img_height

              # Clip to valid range
              x_center = max(0, min(1, x_center))
              y_center = max(0, min(1, y_center))
              width = max(0, min(1, width))
              height = max(0, min(1, height))

              cls_idx = class_to_idx[category]
              lines.append(f"{cls_idx} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")

          # Write label file
          if lines:
              label_file.write_text("".join(lines), encoding="utf-8")

      if skipped:
          print(f"Skipped {skipped} annotations with unknown categories")
      print("Conversion complete!")

  # Download
  dir = Path(yaml["path"])  # dataset root dir
  urls = ["https://cg.cs.tsinghua.edu.cn/traffic-sign/data_model_code/data.zip"]
  download(urls, dir=dir, curl=True, threads=1)

  # Convert
  tt100k2yolo(dir)

Link to this section使用方法#

TT100K データセットで YOLO26 モデルを100 epochs、画像サイズ640でトレーニングするには、以下のコードスニペットを使用できます。データセットは最初に使用される際に自動的にダウンロードされ、YOLO形式に変換されます。

学習例
from ultralytics import YOLO

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

# Train the model - dataset will auto-download on first run
results = model.train(data="TT100K.yaml", epochs=100, imgsz=640)

Link to this sectionサンプル画像とアノテーション#

以下は、TT100K データセットの典型的な例です。

  1. 都市環境: さまざまな距離に複数の交通標識がある街並みのシーン
  2. 高速道路のシーン: 速度制限や方向指示器を含む高速道路の標識
  3. 複雑な交差点: さまざまな向きで近くに配置された複数の標識
  4. 困難な条件: 異なる照明 (昼/夜)、天候 (雨/霧)、視野角下での標識

データセットには以下が含まれます。

  1. クローズアップ標識: 画像の大部分を占める、はっきりと目に見える大きな標識
  2. 遠くの標識: 高精度な検出能力を必要とする小さな標識
  3. 部分的に隠れた標識: 車両、木、またはその他の物体によって部分的に遮られた標識
  4. 1画像あたりの複数標識: 複数の異なる標識タイプが含まれる画像

Link to this section引用と謝辞#

研究や開発作業で TT100K データセットを使用する場合は、以下の論文を引用してください。

引用
@InProceedings{Zhu_2016_CVPR,
    author = {Zhu, Zhe and Liang, Dun and Zhang, Songhai and Huang, Xiaolei and Li, Baoli and Hu, Shimin},
    title = {Traffic-Sign Detection and Classification in the Wild},
    booktitle = {The IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
    month = {June},
    year = {2016}
}

コンピュータビジョンおよび自動運転コミュニティのためにこの貴重なリソースを作成・維持してくださった清華大学とTencentのコラボレーションに感謝いたします。TT100K データセットの詳細については、公式データセットウェブサイトをご覧ください。

Link to this sectionよくある質問 (FAQ)#

Link to this sectionTT100K データセットは何に使用されますか?#

Tsinghua-Tencent 100K (TT100K) データセットは、現実世界における交通標識の検出と分類を目的として特別に設計されています。主に以下の目的で使用されます。

  1. 自動運転認識システムのトレーニング
  2. 先進運転支援システム (ADAS) の開発
  3. さまざまな条件下での堅牢な物体検出の研究
  4. 交通標識認識アルゴリズムのベンチマーク
  5. 大きな画像内の小さな物体に対するモデルパフォーマンスのテスト

10万枚の多様なストリートビュー画像と221の交通標識カテゴリーにより、現実世界の交通標識検出のための包括的なテストベッドを提供します。

Link to this sectionTT100K には何種類の交通標識カテゴリーがありますか?#

TT100K データセットには、以下を含む221種類の交通標識カテゴリーが含まれています。

  1. 速度制限: pl* 禁止制限および pm* 最低速度 (例: pl40, pl120, pm30, pm55)
  2. 禁止標識: 29の一般的禁止タイプ (p1-p29) および制限 (pr*, pn, pne)
  3. 警告標識: 60以上の警告カテゴリー (w1-w67)
  4. 高さ/幅制限: 物理的な制限のための ph* 高さおよび pw* 幅シリーズ
  5. 案内標識: ガイダンスと情報のための i1-i15, il*, io, ip

この包括的な網羅性には、中国の道路網で見られるほとんどの交通標識が含まれています。

Link to this sectionTT100K データセットを使用して YOLO26n モデルをトレーニングするにはどうすればよいですか?#

TT100K データセットで YOLO26n モデルを100エポック、画像サイズ640でトレーニングするには、以下の例を使用してください。

学習例
from ultralytics import YOLO

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

# Train the model
results = model.train(data="TT100K.yaml", epochs=100, imgsz=640)

詳細な学習設定については、学習のドキュメントを参照してください。

Link to this sectionTT100K が他のデータセットと比較して難しい点は何ですか?#

TT100K にはいくつかの独自の課題があります。

  1. スケールの変動: 標識の範囲は非常に小さいもの(遠くの高速道路標識)から大きいもの(近くの都市標識)まで様々です
  2. 現実世界の条件: 照明、天候、視野角の極端な変動
  3. 高解像度: 2048×2048ピクセルの画像は、かなりの処理能力を必要とします
  4. クラスの不均衡: 一部の標識タイプは他のものよりもはるかに一般的です
  5. 密なシーン: 1枚の画像に複数の標識が表示される場合があります
  6. 部分的な遮蔽: 標識が車両、植物、または構造物によって部分的に遮られる場合があります

これらの課題により、TT100K は堅牢な検出アルゴリズムを開発するための価値あるベンチマークとなっています。

Link to this sectionTT100K の大きな画像サイズをどのように扱えばよいですか?#

TT100K データセットは2048×2048ピクセルの画像を使用しており、リソースを大量に消費する可能性があります。推奨される戦略は以下の通りです。

トレーニング用:

# Option 1: Resize to standard YOLO size
model.train(data="TT100K.yaml", imgsz=640, batch=16)

# Option 2: Use larger size for better small object detection
model.train(data="TT100K.yaml", imgsz=1280, batch=4)

# Option 3: Multi-scale training
model.train(data="TT100K.yaml", imgsz=640, scale=0.5)  # trains at varying scales

推奨事項:

  • 最初の実験では imgsz=640 から始める
  • 十分なGPUメモリ (24GB以上) がある場合は imgsz=1280 を使用する
  • 非常に小さな標識については、タイル戦略を検討する
  • 勾配累積を使用して、より大きなバッチサイズをシミュレートする

コメント