Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started
Bài họcngười mới bắt đầu

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.

Kết quả

Bạn có thể viết data.yaml để phân giải từ bất kỳ thư mục làm việc nào, duy trì chỉ số lớp nhất quán và đọc dòng quét yolo val để xác nhận dataset đã được kết nối.

Lộ trình cấp tốc
Nếu bạn đã nắm rõ cách thực hiện, đây là phiên bản tóm tắt.
  1. Đặt path thành thư mục gốc của dataset, rồi đặt train/val thành các thư mục ảnh có đường dẫn tương đối với thư mục gốc đó.

  2. Liệt kê names theo dạng chỉ số → tên, khớp chính xác với các tệp nhãn.

  3. Chạy yolo val model=yolo26n.pt data=my_dataset/data.yaml và đọc dòng quét.

  4. Chuyển path thành đường dẫn tuyệt đối trước khi chia sẻ; chỉ thêm lớp mới vào cuối danh sách.

Thực hành

Viết tệp#

Trang hồ sơ Ultralytics Platform liệt kê các dataset của người dùng, có nút Dataset mới

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óaBắt buộcÝ nghĩa
pathKhôngThư 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, valCó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
testKhôngCác ảnh kiểm tra được giữ riêng, chỉ đánh giá bằng split=test
namesCóChỉ số lớp → tên; số lượng lớp được xác định theo độ dài danh sách
downloadKhôngURL 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.yaml
val: 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ự:

  1. 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.
  2. 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.
  3. 399 đối tượng: các tệp nhãn chứa 399 viên thuốc.
  4. 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 path là phù hợp.
  • Đồng đội, server, CI hoặc notebook nằm trong các thư mục khác? Hãy dùng path tuyệ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#

Đường dẫn tương đối tính từ sai thư mục

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.

Đổi thứ tự tên gây thay đổi không thể đảo ngược

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ó.

Các danh sách gộp thành một điểm số

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.

Dùng thử

Viết my_dataset/data.yaml rồi chạy yolo val model=yolo26n.pt data=my_dataset/data.yaml. Ghi lại số lượng ảnh, ảnh nền, ảnh bị lỗi và instance, cùng mAP50-95 cơ sở. Sau đó, chạy cd trong một thư mục khác, chạy lại với đường dẫn trong YAML, đọc lỗi và sửa YAML để lệnh hoạt động từ mọi nơi. Nộp YAML đã sửa và cả hai dòng quét.

Điều kiện hoàn thành
Bạn đã hoàn thành bài học khi tất cả các điều kiện sau đều đúng.
  • yolo val báo cáo YAML của bạn có 23 ảnh, 0 ảnh nền và 0 ảnh bị lỗi.

  • Bạn đã ghi lại mAP50-95 cơ sở của bộ dữ liệu với model pretrained.

  • YAML của bạn hoạt động từ mọi thư mục làm việc vì path là đường dẫn tuyệt đối.

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: pill
val: 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.0002

Từ 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.

Tiếp theo là gì

Dữ liệu đã được kết nối và giá trị cơ sở đã được ghi nhận. Tiếp theo, hãy huấn luyện YOLO26 trên bộ dữ liệu đó.

Đăng nhập để lưu tiến độ