Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started
Xây dựng Dataset YOLO Hiệu năng Cao·Huấn luyện và lặp lại·Bài học 9/10
Bài họcngười mới bắt đầu

Fine-Tune Đầu Tiên và Vòng Lặp Cải Tiến

Fine-tune trọng số YOLO26 đã pretrained với các thiết lập mặc định, xếp hạng lớp theo AP cùng số lượng lỗi bỏ sót và nhầm lẫn, rồi biến lớp yếu nhất thành bước khắc phục dataset tiếp theo.

Lần chạy thực hành trong bài học này đạt 0.66 mAP50, nghe có vẻ như vấn đề về learning rate. Nhưng bảng theo từng lớp cho thấy điều ngược lại: cup có 14 đối tượng được gán nhãn trong val và model không phát hiện được đối tượng nào. Đây là vấn đề dữ liệu, và không hyperparameter nào có thể khắc phục được. Hãy xem lần chạy đầu tiên là bước chẩn đoán giúp xác định lớp cần khắc phục tiếp theo.

Kết quả

Fine-tune một baseline, xếp hạng lớp theo AP kèm số lượng đối tượng bị bỏ sót hoặc nhầm lẫn, rồi ghi lại một hành động xử lý dataset với quy mô tính bằng số ảnh.

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. Fine-tune checkpoint YOLO26 pretrained cho tác vụ của bạn bằng thiết lập mặc định.

  2. Xếp hạng lớp theo AP50-95 và đếm số đối tượng bị bỏ sót, nhầm lẫn ở từng lớp.

  3. Đối tượng bị bỏ sót thường cho thấy độ bao phủ chưa đủ hoặc thiếu nhãn; nhầm lẫn thường cho thấy vấn đề ở định nghĩa lớp.

  4. Khắc phục dữ liệu, huấn luyện lại với cùng thiết lập và cách chia tập, rồi so sánh.

Thực hành

Bắt đầu từ trọng số pretrained#

Huấn luyện từ đầu học mọi đặc trưng từ dữ liệu mới, trong khi transfer learning fine-tune mạng pretrained cho tác vụ mới

Fine-tune bắt đầu từ các trọng số đã nhận diện được cạnh, kết cấu và hình dạng, nên hội tụ nhanh hơn và cần ít dữ liệu hơn nhiều so với huấn luyện từ các trọng số ngẫu nhiên. Chọn checkpoint YOLO26 phù hợp với tác vụ của bạn:

Tác vụCheckpoint pretrainedPretrained trên
Phát hiệnyolo26n.ptCOCO
Phân đoạnyolo26n-seg.ptCOCO
Ngữ nghĩayolo26n-sem.ptCityscapes
Poseyolo26n-pose.ptKeypoint COCO
OBByolo26n-obb.ptDOTAv1
Phân loạiyolo26n-cls.ptImageNet
Độ sâuyolo26n-depth.ptTập dữ liệu độ sâu lớn gồm cảnh trong nhà và ngoài trời

Backbone và neck được giữ nguyên; task head được khởi tạo lại một phần để khớp với số lớp của bạn. Huấn luyện từ đầu chỉ đáng cân nhắc khi dataset rất lớn và miền dữ liệu cực kỳ khác biệt. Hãy bắt đầu với model nano (n) để nhanh chóng có baseline, rồi chỉ tăng kích thước model khi vòng lặp xử lý dữ liệu không còn cải thiện kết quả. Hướng dẫn fine-tune giải thích chi tiết những gì diễn ra bên trong.

Chạy baseline#

Huấn luyện với thiết lập mặc định; mục tiêu của lần chạy đầu tiên là tạo baseline, không phải lập kỷ lục. Lần chạy này huấn luyện trên tập thực hành được chia trong Chia Dataset Đúng Cách, trước tiên là ghi file YAML dữ liệu:

from ultralytics import YOLO
from ultralytics.data.utils import check_det_dataset
from ultralytics.utils import YAML

names = check_det_dataset("coco128.yaml")["names"]  # # tập thực hành giữ nguyên tên lớp của COCO
YAML.save("practice.yaml", {"path": "datasets/practice", "train": "train.txt", "val": "val.txt", "test": "test.txt", "names": names})

model = YOLO("yolo26n.pt")  # # pretrained trên COCO; dùng checkpoint dành cho tác vụ của bạn
model.train(data="practice.yaml", epochs=3, imgsz=320)  # # một lần chạy thực tế: epochs=100, imgsz=640
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95)
                   all         20        143      0.614        0.6      0.664      0.486

Thư mục lần chạy (runs/detect/train/) hiện chứa weights/best.pt. Chỉ có ba tham số đáng cân nhắc trong lần chạy đầu tiên:

Đối sốMặc địnhKhi nào nên thay đổi
epochs100Giảm số lượng với dataset nhỏ; tăng lên 200–300 với dataset rất lớn
imgsz640Dùng 1024 hoặc 1280 nếu có nhiều đối tượng nhỏ trong khung hình
batch16-1 để tự động chọn batch size; giảm giá trị khi gặp lỗi hết bộ nhớ

Huấn Luyện Model Đầu Tiên trình bày chi tiết lệnh huấn luyện và log trực tiếp.

Xếp hạng lớp và phân tích lỗi bỏ sót#

mAP tổng thể che khuất vị trí vấn đề. Xếp hạng lớp theo AP50-95 và dùng ma trận nhầm lẫn để phân loại lỗi của từng lớp thành đối tượng model bỏ sót hoàn toàn và đối tượng model nhận nhầm thành lớp khác:

from ultralytics import YOLO

model = YOLO("runs/detect/train/weights/best.pt")  # your fine-tuned checkpoint
metrics = model.val(data="practice.yaml", imgsz=320, verbose=False)  # same data YAML and imgsz as training

matrix = metrics.confusion_matrix.matrix  # rows: predicted class, columns: true class; last row = background
for ap, cls in sorted(zip(metrics.box.ap, metrics.box.ap_class_index))[:5]:  # weakest five classes first
    total, missed, correct = matrix[:, cls].sum(), matrix[-1, cls], matrix[cls, cls]
    print(f"{model.names[cls]:>8}  AP50-95={ap:.3f}  {total:2.0f} labeled: {correct:2.0f} found, "
          f"{missed:2.0f} missed, {total - correct - missed:2.0f} called another class")
     car  AP50-95=0.000   4 labeled:  0 found,  4 missed,  0 called another class
    fork  AP50-95=0.000   1 labeled:  0 found,  0 missed,  1 called another class
 handbag  AP50-95=0.025   1 labeled:  1 found,  0 missed,  0 called another class
     cup  AP50-95=0.039  14 labeled:  0 found, 10 missed,  4 called another class
    sink  AP50-95=0.075   1 labeled:  1 found,  0 missed,  0 called another class

Mỗi loại lỗi gợi ý một cách khắc phục dataset khác nhau:

  • Quá ít instance trong val (fork, handbag, sink, mỗi lớp có 1 instance): AP chỉ là nhiễu. Đừng xử lý một lớp cho đến khi val có ít nhất vài chục instance của lớp đó; trước tiên hãy thu thập thêm nhóm dữ liệu val.
  • Bị bỏ sót (car 4 trên 4, cup 10 trên 14): model hoàn toàn không nhìn thấy đối tượng. Kiểm tra độ bao phủ của tình huống đó trong train và tìm nhãn bị thiếu bằng suspect_labels.py.
  • Bị nhận nhầm thành lớp khác (cup 4 trên 14): định nghĩa các lớp bị chồng lấn. Mở các ảnh đó, làm rõ định nghĩa và nêu trường hợp tương tự trong hướng dẫn.

cup là phát hiện có thể hành động ở đây: có 14 instance được gán nhãn nhưng không instance nào được tìm thấy.

Đọc dữ liệu phản hồi từ thư mục lần chạy#

Biểu đồ huấn luyện trên Ultralytics Platform cho model phân đoạn: các thẻ tổng hợp mAP50, mAP50-95, precision và recall phía trên các đường cong precision, recall và mAP50-95 theo từng epoch

Mỗi lần chạy huấn luyện đều ghi các file này, và Ultralytics Platform hiển thị trực tiếp cùng các đường cong trong khi huấn luyện trên cloud:

FileThông tin file cho biết về dữ liệu
confusion_matrix_normalized.pngCác lớp bị nhầm lẫn với nhau hoặc bị bỏ sót và nhận thành nền
BoxPR_curve.pngPrecision-recall theo từng lớp; đường cong thấp cho thấy lớp yếu
val_batch0_pred.jpgDự đoán trên ảnh val thực tế; tìm các lỗi bỏ sót có tính hệ thống
labels.jpgSố lượng lớp và kích thước bbox mà model đã được huấn luyện
results.pngCác đường cong loss và metric; val loss tăng trong khi train loss giảm là dấu hiệu overfitting

Validation và Chẩn đoán giải thích từng biểu đồ; ở đây, câu hỏi luôn là dữ liệu còn thiếu điều gì.

Vòng lặp ưu tiên dữ liệu#

Một vòng lặp điển hình: chọn lớp yếu nhất có đủ instance trong val, kiểm tra khoảng 50 ảnh chứa lớp đó, khắc phục dữ liệu, huấn luyện lại với cùng thiết lập và cách chia tập, rồi so sánh AP theo từng lớp. Sau đó chuyển sang lớp yếu tiếp theo.

Mỗi lần huấn luyện lại chỉ thay đổi một thứ

Nếu bạn thêm 300 ảnh và tăng imgsz trong cùng lần huấn luyện lại, bạn sẽ không thể biết thay đổi nào đã làm điểm số biến động. Giữ nguyên cài đặt và lần chia tách khi lặp lại với dữ liệu, để mỗi lần so sánh chỉ cô lập một thay đổi dữ liệu.

Khi nào nên điều chỉnh hyperparameter#

Sau hai hoặc ba vòng lặp xử lý dữ liệu, khi các lớp yếu còn lại không còn có thể quy về độ bao phủ, nhãn hoặc định nghĩa, việc tinh chỉnh có thể giúp cải thiện thêm vài điểm cuối cùng. Hướng dẫn fine-tune trình bày về đóng băng layer, learning rate và lựa chọn optimizer. Tuy nhiên, nếu tinh chỉnh trước khi dữ liệu đúng, bạn sẽ mất hàng tuần tối ưu một model trên dataset sai.

Khi model vượt qua acceptance_test.py trên tập test đã khóa, YOLO của Ultralytics trong môi trường Production trình bày về export và serving, còn Theo dõi Tình trạng và Độ chính xác và Tự động hóa Vòng lặp Huấn luyện lại trong Xây dựng với Ultralytics Platform trình bày về vòng lặp huấn luyện lại.

Dùng thử

Fine-tune checkpoint YOLO26 dành cho tác vụ của bạn bằng thiết lập mặc định, rồi chạy rank_classes.py trên best.pt. Bỏ qua các lớp có quá ít instance trong val, kiểm tra khoảng 50 ảnh của lớp yếu nhất còn lại và xác định lỗi của lớp đó là bị bỏ sót hay nhầm lẫn. Sản phẩm bàn giao: một hành động xử lý dataset (thu thập, gán nhãn lại hoặc định nghĩa lại) kèm số lượng ảnh bị ảnh hưởng.

Đ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.
  • Baseline với thiết lập mặc định đã tạo ra best.pt và bảng xếp hạng theo từng lớp.

  • Đã xác định lớp yếu nhất có đủ instance trong val, cùng số lượng lỗi bỏ sót và nhầm lẫn.

  • Một hành động với dataset được ghi kèm số lượng ảnh mà hành động đó ảnh hưởng, và chưa có hyperparameter nào thay đổi.

Hiển thị lời giải

Từ lần chạy thử, cup là lớp cần xử lý: có 14 mẫu được gán nhãn trong val, phát hiện đúng 0, bỏ sót 10, nhận nhầm thành lớp khác 4. Kế hoạch định lượng:

Phát hiệnHành động với datasetQuy mô
Bỏ sót 10/14 cốcKiểm tra độ bao phủ trong train: đếm số ảnh train có cốc theo từng ngày-camera; thu thập ảnh cốc ở những nhóm chưa có ảnh nào40 ảnh mới có cốc, trải đều qua 4 ngày-camera
Nhận nhầm 4/14 thành lớp khácMở chúng trong val_batch0_pred.jpg và ma trận nhầm lẫn; nếu chúng bị nhận nhầm thành wine glass hoặc bowl, hãy thêm cả hai lớp dễ nhầm này vào định nghĩa cupGán nhãn lại khoảng 30 ảnh train theo quy tắc mới
Các lớp có 1 instanceChưa xử lý; hãy thêm các nhóm val có chứa chúngĐợt thu thập tiếp theo

Sau đó, huấn luyện lại với epochs, imgsz và giữ nguyên cách chia tập, chạy lại rank_classes.py, rồi so sánh AP của cup trước và sau. Nếu AP tăng, dữ liệu là nút thắt; nếu không, hãy kiểm tra 50 ảnh tiếp theo trước khi đụng đến hyperparameter.

Tiếp theo là gì

Bài học cuối cùng gói gọn toàn bộ khóa học thành checklist một trang mà bạn có thể thực hiện cùng khách hàng ở mỗi buổi kickoff dự án.

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