Viết YAML cho dataset
Viết data.yaml trỏ Ultralytics đến các thư mục và đặt tên cho các lớp, đảm bảo các đường dẫn phân giải được từ mọi nơi, rồi kiểm tra nhanh bằng yolo val.
YAML của dataset là giao ước giữa các thư mục của bạn và mọi lệnh Ultralytics. Đường dẫn sai thì không chạy được gì; thứ tự lớp sai thì mọi thứ vẫn chạy, nhưng mọi dự đoán đều mang tên sai mà không có cảnh báo nào.
Trong bài học này, bạn sẽ viết data.yaml cho dataset thuốc, tìm hiểu chính xác cách Ultralytics phân giải đường dẫn để YAML cũng hoạt động trên máy của đồng đội, rồi xác minh bằng một lệnh đánh giá một dòng, đồng thời tạo baseline mà model của bạn cần vượt qua.
Thực hành
Viết tệp#

Dataset trên Ultralytics Platform có lớp và tập dữ liệu riêng; lệnh huấn luyện trỏ đến dataset bằng URI như data=ul://username/datasets/name. Trên máy cá nhân, YAML đóng vai trò giao ước đó. Lưu nội dung sau thành my_dataset/data.yaml:
path: my_dataset # dataset root: absolute, or relative to where you run yolo
train: images/train # relative to path
val: images/val # relative to path
# test: images/test # optional held-out split
names:
0: pill| Khóa | Bắt buộc | Ý nghĩa |
|---|---|---|
path | Không | Thư mục gốc của dataset; train, val và test là các đường dẫn tương đối với thư mục này. Nếu bỏ qua, thư mục chứa YAML sẽ được dùng |
train, val | Có | Thư mục ảnh, tệp .txt liệt kê đường dẫn ảnh hoặc danh sách gồm một trong hai loại trên |
test | Không | Các ảnh kiểm tra được giữ riêng, chỉ đánh giá bằng split=test |
names | Có | Chỉ số lớp → tên; số lượng lớp được xác định theo độ dài danh sách |
download | Không | URL hoặc script tải dataset khi thiếu ảnh |
train và val trỏ đến các thư mục ảnh; nhãn được tìm thấy bằng cách thay images bằng labels. YAML coco8 là ví dụ tham khảo tối giản có thể chạy được, còn YAML VOC minh họa cấu hình lớn hơn.
Ví dụ thực tế: Kiểm tra nhanh#
Đánh giá bằng model pretrained là cách nhanh nhất để kiểm tra toàn bộ quy trình. Lệnh đọc mọi ảnh và nhãn, báo cáo vấn đề và tính các chỉ số:
yolo val model=yolo26n.pt data=my_dataset/data.yamlval: Scanning my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt: 100%
Class Images Instances Box(P R mAP50 mAP50-95)
all 23 399 0.0256 0.00251 0.001 0.0002Đọc kết quả theo thứ tự:
Scanning my_dataset/labels/val: thư mục mà Ultralytics thực sự phân giải được. Hãy kiểm tra xem đó có phải thư mục bạn muốn hay không.23 images, 0 backgrounds, 0 corrupt: mọi ảnh xác thực đều có tệp nhãn hợp lệ. Nếu có ảnh nền ngoài ý muốn hoặc số lượng tệp hỏng, hãy quay lại bài học trước.399đối tượng: các tệp nhãn chứa 399 viên thuốc.- mAP50-95 là 0.0002: kết quả này đúng, không phải lỗi. COCO không có lớp thuốc nên model pretrained không thể tìm thấy chúng. Điểm số gần bằng không là baseline của bạn. Khi các lớp của bạn có trong COCO, chẳng hạn như người hoặc ô tô, cùng lệnh đó sẽ cho baseline có ý nghĩa.
Đảm bảo đường dẫn phân giải được ở mọi nơi#
Hầu hết lỗi “không tìm thấy ảnh” đều do đường dẫn. Ultralytics phân giải path như sau:
datasets_dir là thiết lập của Ultralytics; yolo settings sẽ in giá trị thiết lập này, còn hướng dẫn về thiết lập chỉ cách thay đổi. Các dataset tích hợp dựa vào cơ chế dự phòng đó: coco8.yaml đặt path: coco8 cùng URL download:, nhờ vậy data=coco8.yaml hoạt động từ bất kỳ thư mục nào.
Quy tắc quyết định:
- Chỉ mình bạn sử dụng và luôn chạy từ thư mục dự án? Đường dẫn tương đối
pathlà phù hợp. - Đồng đội, server, CI hoặc notebook nằm trong các thư mục khác? Hãy dùng
pathtuyệt đối. - Dữ liệu nằm ở nơi khác và cần tự tải về? Thêm
download:kèm URL zip.
Duy trì chỉ số lớp như một quy ước bất biến#
Số nguyên ở đầu mỗi dòng nhãn là chỉ số trong names. Ultralytics kiểm tra phạm vi — Label class 1 exceeds dataset class count 1 — nhưng không thể kiểm tra ý nghĩa. Nếu công cụ gán nhãn xuất 0: forklift, 1: person còn YAML của bạn khai báo 0: person, 1: forklift, quá trình huấn luyện vẫn thành công, mAP khi validation vẫn có vẻ ổn, nhưng mọi dự đoán đều mang tên sai. Hãy duy trì một nguồn dữ liệu chuẩn duy nhất cho danh sách lớp, được công cụ gán nhãn, script chuyển đổi, YAML và code triển khai cùng sử dụng.
Tránh những lỗi này#
Triệu chứng: FileNotFoundError: Dataset 'data.yaml' images not found, missing path '.../datasets/my_dataset/images/val', kèm ghi chú về thư mục tải dataset. Nguyên nhân: bạn chạy lệnh từ thư mục khác, nên path tương đối không tồn tại và Ultralytics tìm trong datasets_dir thay vào đó. Cách khắc phục: chạy từ thư mục dự án hoặc chuyển path thành đường dẫn tuyệt đối.
Hoán đổi hoặc xóa các mục trong names mà không gán nhãn lại sẽ âm thầm thay đổi ý nghĩa của mọi nhãn. Model vẫn huấn luyện và dự đoán các lớp sai mà không báo lỗi. Thêm lớp mới vào cuối với chỉ số còn trống tiếp theo và không bao giờ đánh số lại các lớp hiện có.
val: [images/val_day, images/val_night] gộp cả hai thư mục thành một tập validation và báo cáo một con số. Để xem riêng ngày và đêm — hoặc một tập hồi quy được tuyển chọn bên cạnh mẫu mới từ môi trường production — hãy giữ một YAML cho mỗi tập và validation từng tập. Một lần chia test mà bạn chỉ đánh giá một lần bằng split=test được trình bày trong Chia dataset đúng cách.
Các thiết lập huấn luyện như augmentation và caching là các đối số của train, không phải khóa YAML; tất cả đều có trong tài liệu tham khảo cấu hình.
Hiển thị lời giải
path: /home/you/projects/pills/my_dataset # absolute path to the dataset root
train: images/train
val: images/val
names:
0: pillval: Scanning /home/you/projects/pills/my_dataset/labels/val... 23 images, 0 backgrounds, 0 corrupt
all 23 399 0.0256 0.00251 0.001 0.0002Từ một thư mục khác, phiên bản đường dẫn tương đối gặp lỗi Dataset ... images not found vì my_dataset không tồn tại ở đó và bản dự phòng datasets_dir cũng không có bản sao. Đường dẫn tuyệt đối path loại bỏ bước tìm kiếm đó. mAP50-95 cơ sở xấp xỉ 0: model pretrained không có lớp viên thuốc.