Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started
Xây dựng Dataset YOLO Hiệu năng Cao·Xác định·Bài học 2/10
Bài họcngười mới bắt đầu

Xác định bản đặc tả Dataset

Lập kế hoạch về kịch bản, chỉ tiêu số lượng, biến thiên, trường hợp đặc biệt và ảnh nền trước khi thu thập dữ liệu; xác định quy mô kế hoạch theo các mục tiêu số lượng của Ultralytics.

Các nhóm không có bản đặc tả thường kết thúc với 5.000 ảnh ban ngày đủ sáng từ một camera và một model thất bại ngay lúc chạng vạng trong ngày đầu triển khai. Bản đặc tả dataset là danh sách ảnh cần thu thập: mọi kịch bản model phải xử lý, số lượng ảnh cần cho mỗi kịch bản và những trường hợp hiếm cần lấy mẫu nhiều hơn. Viết bản đặc tả chỉ mất một giờ, nhưng nó quyết định công sức thu thập sẽ được phân bổ ở đâu.

Kết quả

Lập bảng kịch bản với chỉ tiêu số lượng bao quát các chiều biến thiên và trường hợp đặc biệt, đồng thời đo mức chênh lệch của mọi dataset đã gán nhãn so với mục tiêu số lượng khi đưa vào sản xuất.

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. Viết từng kịch bản thành một hàng: camera, địa điểm, thời gian và điều kiện, mỗi mục có chỉ tiêu số lượng.

  2. Xác định chỉ tiêu theo mục tiêu sản xuất: ≥1.500 ảnh và ≥10.000 instance được gán nhãn cho mỗi class.

  3. Dành một hàng riêng cho từng trường hợp đặc biệt đã biết và lấy mẫu nhiều hơn cho trường hợp đó.

  4. Dành 0–10% số ảnh làm ảnh nền không có đối tượng.

Thực hành

Vị trí của bản đặc tả#

Bản đặc tả là cầu nối giữa mục tiêu và camera. Bản đặc tả định hướng việc thu thập dữ liệu, và đây là tài liệu bạn quay lại xem khi model đầu tiên không đạt mục tiêu:

Quy trình quay lại bản đặc tả, không phải các thiết lập huấn luyện: mục tiêu không đạt thường có nghĩa là bản đặc tả đã bỏ sót một kịch bản. Hướng dẫn về các bước của một dự án CV mô tả cùng vòng đời này.

Viết từng kịch bản thành một hàng#

Một kịch bản là một tổ hợp các điều kiện ghi hình mà model phải xử lý. Các hàng có chỉ tiêu số lượng giúp nhận ra khoảng trống trước khi có ai cầm camera lên:

Tình huốngCameraĐịa điểmThời điểm trong ngàyĐiều kiệnChỉ tiêuGhi chú
ban-ngày-khu-bốc-dỡcam-1 đến cam-4các khu A–C08:00–17:00bất kỳ1,200giờ cao điểm
ban-đêm-khu-bốc-dỡcam-1 đến cam-4các khu A–C22:00–04:00bất kỳ400ánh sáng đèn natri, ít người hơn
bốc-hàng-trời-mưacam-2, cam-3khu Bbất kỳchỉ trời mưa200hiếm nhưng quan trọng
xếp chồngbất kỳbất kỳbất kỳpallet cao hơn 2 tầng150che khuất người phía sau
nềnbất kỳbất kỳbất kỳkhu bốc dỡ trống150không có đối tượng, không có nhãn

Kịch bản nào không thể ghi thành văn bản thì model sẽ không thấy trong quá trình huấn luyện, và chính kịch bản đó sẽ khiến model thất bại khi đưa vào sản xuất.

Xác định quy mô bản đặc tả theo mục tiêu số lượng#

Các mẹo để đạt kết quả huấn luyện tốt nhất của Ultralytics đưa ra các quy tắc kinh nghiệm cho môi trường sản xuất:

Mục tiêuKhuyến nghị
Số ảnh cho mỗi class≥ 1,500
Số instance được gán nhãn cho mỗi class≥ 10,000
Ảnh nền (không có nhãn)0–10% dataset; COCO có khoảng 1%
Độ đa dạngCác thời điểm, mùa, thời tiết, điều kiện ánh sáng, góc chụp, nguồn ảnh và camera khác nhau

Đây là ngưỡng chuẩn cho một model dùng trong môi trường sản xuất. Vài trăm đối tượng được gán nhãn cho mỗi class là đủ để bắt đầu thử nghiệm, và model đầu tiên đó là cách nhanh nhất để tìm hiểu kịch bản nào cần thêm dữ liệu. Để biết dataset còn cách ngưỡng chuẩn bao xa, hãy đếm dữ liệu. Script này chạy trên COCO128, một phần gồm 128 ảnh của COCO được tự động tải xuống:

from collections import Counter
from pathlib import Path

from ultralytics.data.utils import IMG_FORMATS, check_det_dataset, img2label_paths

IMAGES_PER_CLASS, INSTANCES_PER_CLASS = 1500, 10_000  # Ultralytics production targets

data = check_det_dataset("coco128.yaml")  # downloads COCO128 (~7 MB) on first run; swap in your data YAML
images = [p for p in Path(data["train"]).rglob("*.*") if p.suffix[1:].lower() in IMG_FORMATS]
image_count, instance_count, background = Counter(), Counter(), 0
for label in map(Path, img2label_paths([str(p) for p in images])):
    classes = [int(r.split()[0]) for r in label.read_text().splitlines() if r.strip()] if label.exists() else []
    instance_count.update(classes)
    image_count.update(set(classes))
    background += not classes

print(f"{len(images)} images, {background} background ({background / len(images):.0%}, target 0-10%)")
print(f"{'class':>12} {'images':>7} {'instances':>10} {'of target':>10}")
ranked = instance_count.most_common()
for cls, n in ranked[:3] + ranked[-3:]:  # best and worst covered classes
    coverage = min(image_count[cls] / IMAGES_PER_CLASS, n / INSTANCES_PER_CLASS)
    print(f"{data['names'][cls]:>12} {image_count[cls]:>7} {n:>10} {coverage:>10.1%}")

never_labeled = [name for i, name in data["names"].items() if i not in instance_count]
print(f"{len(never_labeled)} classes in names with zero labels: {never_labeled[:4]} ...")
128 images, 2 background (2%, target 0-10%)
       class  images  instances  of target
      person      61        254       2.5%
         car      12         46       0.5%
         cup      10         36       0.4%
        bear       1          1       0.0%
      banana       1          1       0.0%
        skis       1          1       0.0%
9 classes in names with zero labels: ['fire hydrant', 'parking meter', 'sheep', 'cow'] ...

Cách đọc kết quả:

  • Độ bao phủ là giá trị nhỏ hơn giữa tỷ lệ ảnh và tỷ lệ instance, vì một class cần đạt cả hai. Ngay cả person, class có độ bao phủ tốt nhất, cũng chỉ đạt 2.5% ngưỡng chuẩn cho sản xuất.
  • Các class chỉ có một instance (bear, banana, skis) không thể được học hoặc đánh giá. Trong dataset của bạn, hãy thu thập thêm dữ liệu cho các class này hoặc loại chúng khỏi v1.
  • Các class không có nhãn nào được liệt kê trong YAML nhưng không bao giờ được vẽ. Model vẫn dành năng lực để dự đoán chúng. Hãy xóa chúng khỏi names hoặc thu thập dữ liệu cho chúng trước khi huấn luyện.

Bao quát các chiều biến thiên#

YOLO của Ultralytics phát hiện đối tượng trên lối đi dạo ven sông: người và người đi xe đạp ở gần camera, một con chó và ô tô ở các khoảng cách khác nhau, mỗi đối tượng có bounding box và điểm confidence

Một khung hình đã có người ở gần và xa, xe đạp, một con chó và ô tô. Bản đặc tả thực tế cần chủ động lập kế hoạch cho phạm vi đó. Với mỗi chiều, hãy ghi rõ bản đặc tả có bao quát chiều đó hay không áp dụng vì lý do gì; các hàng còn trống là những kịch bản bạn sẽ chỉ phát hiện ra khi đưa vào sản xuất:

ChiềuVí dụ
Thời gianNgày, đêm, bình minh, hoàng hôn
Thời tiếtNắng, nhiều mây, mưa, sương mù, tuyết
Ánh sángSáng, tối, chói, bóng đổ gắt, nhiều nguồn sáng hỗn hợp
CameraModel, ống kính, độ cao lắp đặt, trường nhìn
Địa lýĐịa điểm, thành phố, quốc gia
Con người và nhân viên vận hànhCa làm, nhóm, đồng phục, thiết bị bảo hộ
Biến thể sản phẩmSKU, phiên bản bao bì, màu sắc
Kích thước đối tượngGần và lớn, tầm trung, xa và nhỏ
Che khuấtRõ, che khuất một phần, che khuất nhiều, phía sau kính
Tình trạng thiết bịỐng kính bẩn hoặc bị mờ, pallet hư hỏng, vạch kẻ sàn bị mòn

Mức độ đa dạng quan trọng hơn số lượng: 1.500 ảnh trải đều trên các hàng này có giá trị hơn 5.000 ảnh chụp từ một camera vào buổi trưa.

Lập kế hoạch cho ảnh nền và các trường hợp biên#

Ảnh nền là các khung hình không có đối tượng được gán nhãn, chẳng hạn như bến bốc dỡ trống. Chúng giúp model học rằng không có gì ở đó và giảm cảnh báo dương tính giả.

Cách lưu trữ ảnh nền

Trong định dạng Ultralytics YOLO, ảnh nền đơn giản là ảnh có file nhãn rỗng hoặc không có file nhãn. Quá trình huấn luyện tính cả hai loại trong dòng quét (… 1200 images, 90 backgrounds, 0 corrupt). Hãy kiểm tra con số đó so với mục tiêu 0–10% trước epoch đầu tiên.

Trường hợp biên gồm che khuất nhiều, đối tượng bị cắt ở mép khung hình, hướng bất thường, đối tượng xếp chồng và các vật thể trông giống nhau, chẳng hạn như cột nâng của xe nâng bên cạnh cột thép. Hãy dành riêng một hàng chỉ tiêu cho từng trường hợp.

Tần suất tự nhiên khiến các trường hợp biên bị thiếu hụt

Nếu cứ 200 khung hình mới có một khung hình cho thấy người đứng sau các pallet xếp chồng, dataset thu thập theo tần suất tự nhiên chỉ có khoảng 7 khung hình như vậy trong 1.500 khung hình — quá ít để học. Hãy chủ động lấy mẫu quá mức các trường hợp biên: số lượng mục tiêu của chúng cần lớn hơn nhiều so với tỷ lệ xuất hiện trong video thực tế.

Đặc tả không cần phải hoàn chỉnh

Bạn sẽ không thể nghĩ ra mọi tình huống trên giấy. Hãy hoàn thiện phần lớn đặc tả, nhanh chóng huấn luyện model đầu tiên và để các lỗi của model cho thấy những tình huống bạn đã bỏ sót.

Dùng thử

Lập bản nháp bảng kịch bản cho dự án với 5–10 hàng, mỗi hàng có chỉ tiêu số lượng, cùng một hàng cho ảnh nền và một hàng cho mỗi trường hợp biên đã biết. Xem xét bảng với người làm việc tại địa điểm triển khai và bổ sung mọi kịch bản họ nêu ra. Sau đó chạy volume_gap.py trên dữ liệu đã gán nhãn hiện có (hoặc COCO128) và ghi lại các lớp được bao phủ tốt nhất và kém nhất. Sản phẩm bàn giao: spec.md gồm bảng và các số liệu về độ bao phủ.

Đ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.
  • Bảng kịch bản có ít nhất 5 hàng, mỗi hàng có chỉ tiêu số lượng, cùng các hàng cho ảnh nền và trường hợp biên.

  • Ít nhất 5 trong 10 chiều đa dạng được bao phủ hoặc được loại trừ rõ ràng.

  • Tổng các chỉ tiêu đạt ít nhất mục tiêu số ảnh và số instance cho mỗi lớp, hoặc phần thiếu hụt được ghi lại như một ngoại lệ v1.

Hiển thị lời giải

Chỉ tiêu được tính dựa trên mục tiêu số instance, không chỉ dựa trên mục tiêu số ảnh. Giả sử hệ thống đếm xe trong bãi đỗ có hai lớp và video thử nghiệm trung bình có 3 ô tô và 0,5 xe tải mỗi ảnh:

LớpSố instance trên mỗi ảnhSố ảnh cần để đạt 10.000 instanceSố ảnh cần để đạt mức sàn 1.500 ảnhKế hoạch
car3.0≈ 3,3001,5003.300 ảnh
truck0.5≈ 20,0001,500Thu thập có mục tiêu tại lối vào khu vực bốc dỡ, nơi xe tải xuất hiện phổ biến hơn 10 lần

Video thông thường đã bao phủ ô tô. Để có đủ xe tải, cần 20.000 ảnh ngẫu nhiên, vì vậy bản đặc tả bổ sung một hàng kịch bản riêng (lối vào khu vực bốc dỡ, các ngày trong tuần từ 06:00–10:00) thay vì thu thập nhiều hơn gấp sáu lần mọi thứ. Thêm một hàng ảnh nền khoảng 5% (bãi trống vào ban đêm) và các hàng trường hợp biên cho tuyết phủ và xe tải bị cắt một phần khỏi khung hình.

Tiếp theo là gì

Sau khi hoàn thành bản đặc tả, bài học tiếp theo sẽ thu thập ảnh để thực sự đáp ứng các yêu cầu trong đó.

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