TT100Kデータセット
Tsinghua-Tencent 100K (TT100K)は、10万枚のTencent Street Viewパノラマ画像から作成された大規模な交通標識ベンチマークデータセットです。このデータセットは、実環境下での交通標識の検出と分類を目的として特別に設計されており、堅牢な交通標識認識システムを構築するための包括的なリソースを研究者や開発者に提供します。
このデータセットには、10万枚の画像が含まれており、221の注釈カテゴリにわたる3万件以上の交通標識インスタンスが収められています。オリジナルの論文では、教師あり学習のためにクラスごとに100インスタンスのしきい値を適用し、一般的に使用される45クラスのサブセットを生成していますが、提供されているUltralyticsデータセット設定では、非常に出現頻度の低いものも含め、221の注釈付きカテゴリすべてを保持しています。これらの画像には、照明、気象条件、画角、距離の大きな変化が含まれており、多様な実環境シナリオで確実に動作する必要があるモデルのトレーニングに最適です。
このデータセットは、特に以下の用途において価値があります。
- 自動運転システム
- 先進運転支援システム (ADAS)
- 交通監視アプリケーション
- 都市計画および交通分析
- 実環境下におけるコンピュータビジョンの研究
主な特徴
TT100Kデータセットには、いくつかの主要な利点があります。
- スケール: 10万枚の高解像度画像 (2048×2048ピクセル)
- 多様性: 中国の交通標識を網羅する221の交通標識カテゴリ
- 実環境条件: 天候、照明、画角の大きな変化
- 豊富な注釈: 各標識にはクラスラベル、bbox、ピクセルマスクが含まれます
- 包括的な網羅性: 禁止標識、警告標識、規制標識、案内標識が含まれます
- 学習/テスト分割: 一貫した評価のための事前定義された分割
データセットの構造
TT100Kデータセットは、3つのサブセットに分割されています。
- 学習セット: さまざまな種類の交通標識を検出および分類するモデルの学習に使用される、交通シーン画像の主要コレクションです。
- 検証セット: モデル開発中にパフォーマンスを監視し、ハイパーパラメータを調整するために使用されるサブセットです。
- テストセット: 実環境シナリオにおいて交通標識を検出および分類する最終的なモデルの能力を評価するために使用される、非公開の画像コレクションです。
TT100Kデータセットには、いくつかの主要なグループに整理された221の交通標識カテゴリが含まれています。
制限速度標識 (pl, pm)**
- pl_: 最高速度制限禁止標識 (pl5, pl10, pl20, pl30, pl40, pl50, pl60, pl70, pl80, pl100, pl120)
- pm_: 最低速度制限標識 (pm5, pm10, pm20, pm30, pm40, pm50, pm55)
禁止標識 (p, pn, pr_)**
- p1-p28: 一般的な禁止標識 (進入禁止、駐車禁止、停車禁止など)
- pn/pne: 進入禁止および駐車禁止標識
- pr: 様々な規制標識 (pr10, pr20, pr30, pr40, pr50など)
警告標識 (w_)
- w1-w66: 様々な道路の危険、状況、状態に対する警告標識
- 横断歩道、急カーブ、滑りやすい道路、動物、工事中などが含まれます。
高さ/幅制限標識 (ph, pb)**
- ph_: 高さ制限標識 (ph2, ph2.5, ph3, ph3.5, ph4, ph4.5, ph5など)
- pb_: 幅制限標識
案内標識 (i, il, io, ip)**
- i1-i15: 一般的な案内標識
- il_: 速度制限情報 (il60, il80, il100, il110)
- io: その他の案内標識
- ip: 情報板
データセットYAML
データセットの設定を定義するためにYAML (Yet Another Markup Language) ファイルが使用されます。これには、データセットのパス、クラス、およびその他の関連情報が含まれています。TT100Kデータセットの場合、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: pl5
1: pl10
2: pl15
3: pl20
4: pl25
5: pl30
6: pl40
7: pl50
8: pl60
9: pl70
10: pl80
11: pl90
12: pl100
13: pl110
14: pl120
15: pm5
16: pm10
17: pm13
18: pm15
19: pm20
20: pm25
21: pm30
22: pm35
23: pm40
24: pm46
25: pm50
26: pm55
27: pm8
28: pn
29: pne
30: ph4
31: ph4.5
32: ph5
33: ps
34: pg
35: ph1.5
36: ph2
37: ph2.1
38: ph2.2
39: ph2.4
40: ph2.5
41: ph2.8
42: ph2.9
43: ph3
44: ph3.2
45: ph3.5
46: ph3.8
47: ph4.2
48: ph4.3
49: ph4.8
50: ph5.3
51: ph5.5
52: pb
53: pr10
54: pr100
55: pr20
56: pr30
57: pr40
58: pr45
59: pr50
60: pr60
61: pr70
62: pr80
63: pr90
64: p1
65: p2
66: p3
67: p4
68: p5
69: p6
70: p7
71: p8
72: p9
73: p10
74: p11
75: p12
76: p13
77: p14
78: p15
79: p16
80: p17
81: p18
82: p19
83: p20
84: p21
85: p22
86: p23
87: p24
88: p25
89: p26
90: p27
91: p28
92: pa8
93: pa10
94: pa12
95: pa13
96: pa14
97: pb5
98: pc
99: pg
100: ph1
101: ph1.3
102: ph1.5
103: ph2
104: ph3
105: ph4
106: ph5
107: pi
108: pl0
109: pl4
110: pl5
111: pl8
112: pl10
113: pl15
114: pl20
115: pl25
116: pl30
117: pl35
118: pl40
119: pl50
120: pl60
121: pl65
122: pl70
123: pl80
124: pl90
125: pl100
126: pl110
127: pl120
128: pm2
129: pm8
130: pm10
131: pm13
132: pm15
133: pm20
134: pm25
135: pm30
136: pm35
137: pm40
138: pm46
139: pm50
140: pm55
141: pn
142: pne
143: po
144: pr10
145: pr100
146: pr20
147: pr30
148: pr40
149: pr45
150: pr50
151: pr60
152: pr70
153: pr80
154: ps
155: w1
156: w2
157: w3
158: w5
159: w8
160: w10
161: w12
162: w13
163: w16
164: w18
165: w20
166: w21
167: w22
168: w24
169: w28
170: w30
171: w31
172: w32
173: w34
174: w35
175: w37
176: w38
177: w41
178: w42
179: w43
180: w44
181: w45
182: w46
183: w47
184: w48
185: w49
186: w50
187: w51
188: w52
189: w53
190: w54
191: w55
192: w56
193: w57
194: w58
195: w59
196: w60
197: w62
198: w63
199: w66
200: i1
201: i2
202: i3
203: i4
204: i5
205: i6
206: i7
207: i8
208: i9
209: i10
210: i11
211: i12
212: i13
213: i14
214: i15
215: il60
216: il80
217: il100
218: il110
219: io
220: ip
# 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)使用方法
TT100Kデータセットを使用してYOLO26モデルを100 エポック学習させ、画像サイズを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)サンプル画像とアノテーション
以下は、TT100Kデータセットの典型的な例です。
- 都市環境: 様々な距離に複数の交通標識がある街中のシーン
- 高速道路シーン: 速度制限や方向指示を含む、高速走行用の道路標識
- 複雑な交差点: さまざまな向きで密集して配置された複数の標識
- 困難な条件: 異なる照明(昼/夜)、天候(雨/霧)、および画角の下での標識
このデータセットには以下が含まれます:
- クローズアップ標識: 画像の大部分を占める、はっきりと見える大きな標識
- 遠方の標識: 細かな検出能力を必要とする小さな標識
- 部分的に隠れた標識: 車両、木、またはその他の物体によって部分的に遮られた標識
- 画像ごとの複数の標識: 複数の異なる種類の標識が含まれる画像
引用と謝辞
研究や開発業務で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データセットの詳細については、公式データセットウェブサイトをご覧ください。
FAQ
TT100Kデータセットは何に使用されますか?
Tsinghua-Tencent 100K (TT100K) データセットは、実環境下での交通標識の検出と分類を目的として特別に設計されています。主に以下の目的で使用されます。
- 自動運転認識システムの学習
- 先進運転支援システム (ADAS) の開発
- 様々な条件下における堅牢な物体検出の研究
- 交通標識認識アルゴリズムのベンチマーク
- 大きな画像内の小さな物体に対するモデル性能のテスト
10万枚の多様なストリートビュー画像と221の交通標識カテゴリにより、実環境の交通標識検出のための包括的なテストベッドを提供します。
TT100Kにはいくつの交通標識カテゴリがありますか?
TT100Kデータセットには、以下を含む221の異なる交通標識カテゴリが含まれています。
- 速度制限: pl5からpl120(最高速度制限)、およびpm5からpm55(最低速度制限)
- 禁止標識: 28種類以上の一般的な禁止タイプ (p1-p28) と、規制 (pr*, pn, pne)
- 警告標識: 60種類以上の警告カテゴリ (w1-w66)
- 高さ/幅制限: 物理的な規制のためのph*およびpb*シリーズ
- 案内標識: ガイダンスおよび情報のためのi1-i15、il*、io、ip
この包括的な網羅性には、中国の道路網で見られるほとんどの交通標識が含まれています。
TT100Kデータセットを使用して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)詳細なトレーニング設定については、トレーニングドキュメントを参照してください。
TT100Kが他のデータセットと比較して困難である理由はなぜですか?
TT100Kは、いくつかのユニークな課題を提示します。
- スケールの変動: 標識は、非常に小さいもの(遠くの高速道路標識)から大きいもの(都市部のクローズアップ標識)まで多岐にわたります
- 実環境条件: 照明、天候、および画角の極端な変動
- 高解像度: 2048×2048ピクセルの画像には、大きな処理能力が必要です
- クラスの不均衡: 一部の標識タイプは他の標識よりもはるかに一般的です
- 密集したシーン: 1枚の画像に複数の標識が現れることがあります
- 部分的な遮蔽: 標識が車両、植物、または構造物によって部分的に隠れることがあります
これらの課題により、TT100Kは堅牢な検出アルゴリズムを開発するための貴重なベンチマークとなっています。
TT100Kの大きな画像サイズをどのように扱えばよいですか?
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を使用する - 非常に小さな標識にはタイル化戦略を検討する
- 勾配累積を使用して、より大きなバッチサイズをシミュレートする