Link to this sectionTập dữ liệu TT100K#
Tsinghua-Tencent 100K (TT100K) là một tập dữ liệu chuẩn mực về biển báo giao thông quy mô lớn, được tạo ra từ 100.000 ảnh toàn cảnh từ Tencent Street View. Tập dữ liệu này được thiết kế đặc biệt cho việc phát hiện và phân loại biển báo giao thông trong điều kiện thực tế, cung cấp cho các nhà nghiên cứu và nhà phát triển một nguồn tài nguyên toàn diện để xây dựng các hệ thống nhận diện biển báo giao thông mạnh mẽ.
Tập dữ liệu chứa 100.000 hình ảnh với hơn 30.000 thực thể biển báo giao thông trên 221 danh mục chú thích. Bài báo gốc áp dụng ngưỡng 100 thực thể mỗi lớp cho việc huấn luyện có giám sát, tạo ra một tập con gồm 45 lớp thường được sử dụng; tuy nhiên, cấu hình tập dữ liệu Ultralytics được cung cấp giữ lại tất cả 221 danh mục đã chú thích, trong đó có nhiều danh mục rất thưa thớt. Những hình ảnh này ghi lại sự biến đổi lớn về độ sáng, điều kiện thời tiết, góc nhìn và khoảng cách, khiến nó trở nên lý tưởng để huấn luyện các model cần hoạt động đáng tin cậy trong các tình huống thực tế đa dạng.
Tập dữ liệu này đặc biệt có giá trị cho:
- Hệ thống lái xe tự động
- Hệ thống hỗ trợ lái xe nâng cao (ADAS)
- Các ứng dụng giám sát giao thông
- Quy hoạch đô thị và phân tích giao thông
- Nghiên cứu thị giác máy tính trong các điều kiện thực tế
Link to this sectionTính năng chính#
Tập dữ liệu TT100K mang lại một số ưu điểm chính:
- Quy mô: 100.000 hình ảnh độ phân giải cao (2048×2048 pixel)
- Tính đa dạng: 221 danh mục biển báo giao thông bao gồm các biển báo giao thông Trung Quốc
- Điều kiện thực tế: Sự biến đổi lớn về thời tiết, độ sáng và góc nhìn
- Chú thích phong phú: Mỗi biển báo bao gồm nhãn lớp, bounding box và pixel mask
- Độ bao phủ toàn diện: Bao gồm biển báo cấm, biển báo nguy hiểm, biển báo hiệu lệnh và biển chỉ dẫn
- Phân chia Train/Test: Các tập dữ liệu được phân chia sẵn để đánh giá nhất quán
Link to this sectionCấu trúc tập dữ liệu#
Tập dữ liệu TT100K được chia thành ba tập con:
- Tập huấn luyện (Training Set): Bộ sưu tập chính các hình ảnh cảnh giao thông được sử dụng để huấn luyện các model nhằm phát hiện và phân loại các loại biển báo giao thông khác nhau.
- Tập xác thực (Validation Set): Một tập con được sử dụng trong quá trình phát triển model để theo dõi hiệu suất và tinh chỉnh các siêu tham số.
- Tập kiểm thử (Test Set): Một bộ sưu tập hình ảnh độc lập được sử dụng để đánh giá khả năng phát hiện và phân loại biển báo giao thông của model cuối cùng trong các tình huống thực tế.
Tập dữ liệu TT100K bao gồm 221 danh mục biển báo giao thông được tổ chức thành một số nhóm chính:
Biển báo hạn chế tốc độ (pl, pm)**
- pl_: Biển báo cấm tốc độ (ví dụ: pl5, pl10, pl20, pl30, pl40, pl50, pl60, pl70, pl80, pl100, pl120)
- pm_: Biển báo tốc độ tối thiểu (ví dụ: pm5, pm10, pm20, pm30, pm40, pm50, pm55)
Biển báo cấm (p, pn, pr_)**
- p1-p29: Các biển báo cấm chung (cấm vào, cấm đỗ, cấm dừng, v.v.)
- pn/pne: Biển báo cấm vào và cấm đỗ
- pr: Các biển báo hạn chế khác nhau (ví dụ: pr10, pr20, pr30, pr40, pr50)
Biển báo nguy hiểm (w_)
- w1-w67: Các biển báo nguy hiểm cho các mối nguy, điều kiện và tình huống đường bộ khác nhau
- Bao gồm lối đi cho người đi bộ, khúc cua gấp, đường trơn trượt, động vật, công trường, v.v.
Biển báo hạn chế chiều cao/chiều rộng (ph, pb, pw*)**
- ph_: Biển báo hạn chế chiều cao (ví dụ: ph2, ph2.5, ph3, ph3.5, ph4, ph4.5, ph5)
- pb/pw_: Biển báo hạn chế chiều rộng
Biển báo chỉ dẫn (i, il, io, ip)**
- i1-i15: Các biển báo chỉ dẫn chung
- il_: Thông tin giới hạn tốc độ (il50, il60, il70, il80, il90, il100, il110)
- io: Các biển báo chỉ dẫn khác
- ip: Biển báo phụ (thông tin)
Link to this sectionYAML tập dữ liệu#
Một tệp YAML được sử dụng để định nghĩa cấu hình tập dữ liệu. Nó chứa thông tin về đường dẫn, các lớp và các thông tin liên quan khác của tập dữ liệu. Đối với tập dữ liệu TT100K, tệp TT100K.yaml bao gồm chức năng tự động tải xuống và chuyển đổi.
# 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 sectionCách sử dụng#
Để huấn luyện model YOLO26 trên tập dữ liệu TT100K trong 100 epoch với kích thước hình ảnh 640, bạn có thể sử dụng các đoạn mã dưới đây. Tập dữ liệu sẽ được tự động tải xuống và chuyển đổi sang định dạng YOLO trong lần sử dụng đầu tiên.
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 sectionHình ảnh mẫu và chú thích#
Dưới đây là các ví dụ điển hình từ tập dữ liệu TT100K:
- Môi trường đô thị: Các cảnh đường phố với nhiều biển báo giao thông ở các khoảng cách khác nhau
- Cảnh đường cao tốc: Các biển báo đường cao tốc bao gồm giới hạn tốc độ và chỉ dẫn hướng đi
- Các giao lộ phức tạp: Nhiều biển báo ở vị trí gần nhau với các hướng khác nhau
- Điều kiện đầy thách thức: Biển báo dưới các điều kiện ánh sáng khác nhau (ngày/đêm), thời tiết (mưa/sương mù) và góc nhìn
Tập dữ liệu bao gồm:
- Biển báo cận cảnh: Biển báo lớn, hiển thị rõ ràng chiếm diện tích hình ảnh đáng kể
- Biển báo từ xa: Biển báo nhỏ đòi hỏi khả năng phát hiện chi tiết
- Biển báo bị che khuất một phần: Biển báo bị xe cộ, cây cối hoặc các vật thể khác che khuất một phần
- Nhiều biển báo trên mỗi hình ảnh: Hình ảnh chứa một vài loại biển báo khác nhau
Link to this sectionTrích dẫn và Ghi nhận#
Nếu bạn sử dụng tập dữ liệu TT100K trong công việc nghiên cứu hoặc phát triển, vui lòng trích dẫn bài báo sau:
@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}
}Chúng tôi xin ghi nhận sự hợp tác giữa Đại học Thanh Hoa và Tencent trong việc tạo ra và duy trì nguồn tài nguyên có giá trị này cho cộng đồng thị giác máy tính và lái xe tự động. Để biết thêm thông tin về tập dữ liệu TT100K, hãy truy cập trang web chính thức của tập dữ liệu.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionTập dữ liệu TT100K được sử dụng để làm gì?#
Tập dữ liệu Tsinghua-Tencent 100K (TT100K) được thiết kế đặc biệt cho việc phát hiện và phân loại biển báo giao thông trong điều kiện thực tế. Nó chủ yếu được sử dụng cho:
- Huấn luyện các hệ thống nhận thức lái xe tự động
- Phát triển các Hệ thống Hỗ trợ Lái xe Nâng cao (ADAS)
- Nghiên cứu về phát hiện đối tượng mạnh mẽ trong các điều kiện thay đổi
- Đánh giá các thuật toán nhận diện biển báo giao thông
- Kiểm tra hiệu suất model trên các đối tượng nhỏ trong hình ảnh lớn
Với 100.000 hình ảnh đường phố đa dạng và 221 danh mục biển báo giao thông, nó cung cấp một môi trường thử nghiệm toàn diện cho việc phát hiện biển báo giao thông trong thực tế.
Link to this sectionTT100K có bao nhiêu danh mục biển báo giao thông?#
Tập dữ liệu TT100K chứa 221 danh mục biển báo giao thông khác nhau, bao gồm:
- Giới hạn tốc độ: pl* giới hạn cấm và pm* tốc độ tối thiểu (ví dụ: pl40, pl120, pm30, pm55)
- Biển báo cấm: 29 loại cấm chung (p1-p29) cộng với các hạn chế (pr*, pn, pne)
- Biển báo nguy hiểm: Hơn 60 danh mục nguy hiểm (w1-w67)
- Hạn chế chiều cao/chiều rộng: Chuỗi ph* chiều cao và pw* chiều rộng cho các hạn chế vật lý
- Biển báo chỉ dẫn: i1-i15, il*, io, ip cho việc hướng dẫn và thông tin
Sự bao phủ toàn diện này bao gồm hầu hết các biển báo giao thông được tìm thấy trong mạng lưới đường bộ Trung Quốc.
Link to this sectionLàm thế nào để tôi huấn luyện model YOLO26n bằng tập dữ liệu TT100K?#
Để huấn luyện model YOLO26n trên tập dữ liệu TT100K trong 100 epoch với kích thước hình ảnh 640, hãy sử dụng ví dụ dưới đây.
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)Để biết cấu hình huấn luyện chi tiết, hãy tham khảo tài liệu Training.
Link to this sectionĐiều gì làm cho TT100K trở nên đầy thách thức so với các tập dữ liệu khác?#
TT100K đưa ra một số thách thức độc đáo:
- Biến đổi quy mô: Biển báo dao động từ rất nhỏ (biển báo đường cao tốc ở xa) đến lớn (biển báo đô thị ở gần)
- Điều kiện thực tế: Sự biến đổi cực đoan về ánh sáng, thời tiết và góc nhìn
- Độ phân giải cao: Hình ảnh 2048×2048 pixel yêu cầu sức mạnh xử lý đáng kể
- Mất cân bằng lớp: Một số loại biển báo phổ biến hơn nhiều so với các loại khác
- Cảnh đông đúc: Nhiều biển báo có thể xuất hiện trong một hình ảnh
- Che khuất một phần: Biển báo có thể bị che khuất một phần bởi xe cộ, cây cối hoặc các cấu trúc
Những thách thức này làm cho TT100K trở thành một chuẩn mực có giá trị để phát triển các thuật toán phát hiện mạnh mẽ.
Link to this sectionLàm thế nào để xử lý kích thước hình ảnh lớn trong TT100K?#
Tập dữ liệu TT100K sử dụng hình ảnh 2048×2048 pixel, có thể gây tốn tài nguyên. Dưới đây là các chiến lược được khuyến nghị:
Để huấn luyện:
# 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 scalesKhuyến nghị:
- Bắt đầu với
imgsz=640cho các thí nghiệm ban đầu - Sử dụng
imgsz=1280nếu bạn có đủ bộ nhớ GPU (24GB+) - Cân nhắc các chiến lược chia nhỏ (tiling) cho các biển báo rất nhỏ
- Sử dụng tích lũy gradient để mô phỏng batch size lớn hơn