TT100K 데이터셋
칭화-텐센트 10만(TT100K) 은 텐센트 스트리트 뷰 파노라마 10만 장으로 생성된 대규모 교통 표지판 벤치마크 데이터셋입니다. 이 데이터셋은 실제 환경에서의 교통 표지판 탐지 및 분류를 위해 특별히 설계되었으며, 연구자와 개발자에게 견고한 교통 표지판 인식 시스템 구축을 위한 포괄적인 자원을 제공합니다.
이 데이터셋은 221개 범주에 걸쳐 30,000개 이상의 교통 표지판 사례를 포함한 100,000장의 이미지를 포함합니다. 이 이미지들은 조도, 기상 조건, 시야각 및 거리 측면에서 광범위한 변동을 포착하여 다양한 실제 환경에서 안정적으로 작동해야 하는 모델 훈련에 이상적입니다.
이 데이터셋은 특히 다음에 유용합니다:
- 자율 주행 시스템
- 첨단 운전자 보조 시스템(ADAS)
- 교통 모니터링 애플리케이션
- 도시 계획 및 교통 분석
- 실제 환경에서의 컴퓨터 비전 연구
주요 기능
TT100K 데이터셋은 다음과 같은 주요 장점을 제공합니다:
- 규모: 100,000개의 고해상도 이미지 (2048×2048 픽셀)
- 다양성: 중국 교통 표지판을 아우르는 221개 교통 표지판 범주
- 실제 환경 조건: 날씨, 조명, 시야각에 따른 큰 변동
- 풍부한 주석: 각 표지판에는 클래스 레이블, 바운딩 박스, 픽셀 마스크가 포함됩니다.
- 포괄적 적용 범위: 금지 표지판, 경고 표지판, 의무 표지판 및 안내 표지판을 포함합니다.
- 훈련/테스트 분할: 일관된 평가를 위한 사전 정의된 분할
데이터 세트 구조
TT100K 데이터셋은 세 개의 하위 집합으로 분할됩니다:
- 훈련 데이터 세트: 다양한 유형의 교통 표지판을 감지하고 분류하기 위한 모델 훈련에 사용되는 주요 교통 현장 이미지 모음.
- 검증 집합: 모델 개발 과정에서 성능을 모니터링하고 하이퍼파라미터를 조정하기 위해 사용되는 부분 집합.
- 테스트 세트: 실제 환경에서 classify 표지판을 detect classify 최종 모델의 성능을 평가하기 위해 별도로 보관된 이미지 모음.
TT100K 데이터셋에는 여러 주요 그룹으로 분류된 221개의 교통 표지판 범주가 포함됩니다:
속도 제한 표지판 (오전, 오후)
- 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.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 데이터셋에서 YOLO11 100 에포크 동안 훈련시키려면 이미지 크기를 640으로 설정하고 다음 코드 스니펫을 사용할 수 있습니다. 데이터셋은 처음 사용 시 자동으로 다운로드되어 YOLO 변환됩니다.
훈련 예제
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.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)
# Start training from a pretrained *.pt model
# Dataset will auto-download and convert on first run
yolo detect train data=TT100K.yaml model=yolo11n.pt 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}
}
컴퓨터 비전 및 자율주행 커뮤니티를 위해 이 소중한 자료를 구축하고 유지해 주신 칭화대학교와 텐센트의 협업에 감사드립니다. TT100K 데이터셋에 대한 자세한 내용은 공식 데이터셋 웹사이트를 방문해 주십시오.
FAQ
TT100K 데이터셋은 무엇에 사용됩니까?
칭화-텐센트 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 데이터셋을 사용하여 YOLO11n 모델을 어떻게 훈련시킬 수 있나요?
TT100K 데이터셋에서 이미지 크기를 640으로 설정하고 100 에포크 동안 YOLO11n 모델을 훈련하려면 아래 예시를 사용하십시오.
훈련 예제
from ultralytics import YOLO
# Load a model
model = YOLO("yolo11n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="TT100K.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=TT100K.yaml model=yolo11n.pt epochs=100 imgsz=640
자세한 학습 구성은 학습 문서를 참조하세요.
TT100K가 다른 데이터셋에 비해 어려운 점은 무엇인가요?
TT100K는 몇 가지 독특한 도전 과제를 제시합니다:
- 규모 변동: 표지판은 아주 작은 것(멀리 있는 고속도로 표지판)부터 큰 것(가까이 있는 도시 표지판)까지 다양하다
- 실제 환경 조건: 조명, 날씨 및 시야각의 극심한 변화
- 고해상도: 2048×2048 픽셀 이미지는 상당한 처리 능력이 필요합니다
- 클래스 불균형: 일부 신호 유형은 다른 유형보다 훨씬 더 흔합니다
- 복잡한 장면: 단일 이미지에 여러 표지판이 나타날 수 있음
- 부분 차폐: 표지판이 차량, 식생 또는 구조물에 의해 부분적으로 가려질 수 있음
이러한 과제들은 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초기 실험을 위해 - 다음을 사용합니다.
imgsz=1280GPU 충분하다면 (24GB+) - 매우 작은 표지판에 대한 타일링 전략 고려
- 그라디언트 누적을 사용하여 더 큰 배치 크기를 시뮬레이션합니다