Ultralytics YOLO27:
Get Started

Huấn luyện model với Ultralytics YOLO#

Ultralytics YOLO ecosystem and integrations

Giới thiệu#

Huấn luyện model deep learning bao gồm việc cung cấp dữ liệu cho model và điều chỉnh các tham số để model có thể đưa ra dự đoán chính xác. Chế độ train trong Ultralytics YOLO26 được thiết kế để huấn luyện model phát hiện đối tượng hiệu quả, đồng thời tận dụng tối đa khả năng của phần cứng hiện đại. Hướng dẫn này trình bày mọi thông tin bạn cần để bắt đầu huấn luyện model của riêng mình bằng bộ tính năng mạnh mẽ của YOLO26. Nếu chưa cài đặt Ultralytics, hãy bắt đầu với hướng dẫn Quickstart.

Xem bản xem trước YOLO27 chưa phát hành để biết các ví dụ huấn luyện dự kiến.



Xem: Cách huấn luyện model YOLO trên dataset tùy chỉnh của bạn trong Google Colab.

Vì sao nên chọn Ultralytics YOLO để huấn luyện?#

Sau đây là một số lý do thuyết phục để chọn chế độ Train của YOLO26:

  • Hiệu quả: Tận dụng tối đa phần cứng, dù bạn sử dụng cấu hình một GPU hay mở rộng quy mô trên nhiều GPU.
  • Tính linh hoạt: Huấn luyện trên dataset tùy chỉnh bên cạnh các dataset có sẵn như COCO, VOC và ImageNet.
  • Dễ sử dụng: Giao diện CLI và Python đơn giản nhưng mạnh mẽ, giúp quá trình huấn luyện thuận tiện.
  • Linh hoạt về siêu tham số: Có nhiều siêu tham số có thể tùy chỉnh để tinh chỉnh hiệu năng model. Để kiểm soát sâu hơn, bạn có thể tùy chỉnh trainer.
  • Huấn luyện trên cloud: Huấn luyện trên GPU cloud thông qua Ultralytics Platform với các chỉ số theo thời gian thực và chức năng lưu checkpoint tự động.

Các tính năng chính của chế độ Train#

Sau đây là một số tính năng đáng chú ý của chế độ Train trong YOLO26:

  • Tự động tải dataset: Các cấu hình dataset có nguồn tải xuống sẽ được tự động tải về trong lần sử dụng đầu tiên, ví dụ: yolo train data=coco8.yaml. Xem tổng quan về Datasets để biết các định dạng và dataset được hỗ trợ.
  • Hỗ trợ nhiều GPU: Mở rộng quy mô huấn luyện liền mạch trên nhiều GPU để rút ngắn thời gian xử lý.
  • Cấu hình siêu tham số: Có thể sửa đổi siêu tham số thông qua file cấu hình YAML hoặc tham số CLI.
  • Trực quan hóa và giám sát: Theo dõi các chỉ số huấn luyện theo thời gian thực và trực quan hóa quá trình học để có thêm thông tin chi tiết.

Ví dụ sử dụng#

Huấn luyện YOLO26n trên dataset COCO8 trong 100 epoch với kích thước ảnh 640. Có thể chỉ định thiết bị huấn luyện bằng tham số device. Nếu không truyền tham số, GPU device=0 sẽ được sử dụng khi khả dụng; nếu không, device='cpu' sẽ được dùng. Xem mục Arguments bên dưới để biết danh sách đầy đủ các tham số huấn luyện.

Lỗi đa xử lý trên Windows

Trên Windows, bạn có thể gặp RuntimeError khi khởi chạy quá trình huấn luyện dưới dạng script. Thêm khối if __name__ == "__main__": trước mã huấn luyện để khắc phục.

Ví dụ huấn luyện với một GPU và CPU

Thiết bị được xác định tự động. Nếu có GPU, GPU sẽ được sử dụng (CUDA device 0 mặc định); nếu không, quá trình huấn luyện sẽ bắt đầu trên CPU.

from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.yaml")  # tạo model mới từ YAML
model = YOLO("yolo26n.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
model = YOLO("yolo26n.yaml").load("yolo26n.pt")  # tạo từ YAML và chuyển trọng số

# Huấn luyện model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

Huấn luyện nhiều GPU#

Huấn luyện nhiều GPU giúp sử dụng hiệu quả hơn các tài nguyên phần cứng hiện có bằng cách phân bổ tải huấn luyện trên nhiều GPU. Tính năng này có thể sử dụng qua cả Python API và giao diện dòng lệnh. Để bật huấn luyện nhiều GPU, hãy chỉ định ID của các GPU bạn muốn sử dụng.

Ví dụ huấn luyện nhiều GPU

Để huấn luyện bằng 2 GPU, tức CUDA device 0 và 1, hãy sử dụng các lệnh sau. Mở rộng cho các GPU bổ sung nếu cần.

from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)

# Huấn luyện model bằng 2 GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])

# Huấn luyện model bằng hai GPU ít bận nhất
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])
Hỗ trợ nhiều GPU trên Windows

Huấn luyện nhiều GPU không hoạt động trên Windows với các PyTorch wheel chính thức dành cho torch>=2.4. Ultralytics khởi chạy DDP thông qua torch.distributed.run, bước rendezvous của thành phần này tạo một TCPStore sử dụng backend libuv theo mặc định kể từ PyTorch 2.4, trong khi các wheel Windows chính thức được build mà không có libuv. Quá trình huấn luyện thoát ngay lập tức với:

RuntimeError: use_libuv was requested but PyTorch was built without libuv support

Việc đặt USE_LIBUV=0 không khắc phục được vấn đề này vì rendezvous trực tiếp tạo TCPStore và luồng thực thi đó không đọc biến này. Hãy huấn luyện trên Linux hoặc WSL2 để sử dụng nhiều GPU, hoặc huấn luyện bằng một GPU với device=0 trên Windows.

Huấn luyện nhiều GPU với mã tùy chỉnh

Khi chỉ định nhiều thiết bị (ví dụ: device=[0, 1]), Ultralytics sẽ tạo nội bộ một trainer instance mới và thực thi torch.distributed.run ở bên dưới. Cách này hoạt động liền mạch với cách sử dụng CLI tiêu chuẩn và các Python script không chỉnh sửa.

Tuy nhiên, nếu script của bạn có các thành phần tùy chỉnh—chẳng hạn như trainer, validator, dataset hoặc pipeline tăng cường dữ liệu tùy chỉnh—thì những đối tượng này không thể được tuần tự hóa và chuyển tự động sang các tiến trình con DDP. Trong trường hợp này, bạn phải khởi chạy script trực tiếp bằng torch.distributed.run:

python -m torch.distributed.run --nproc_per_node 2 your_training_script.py

Huấn luyện trên GPU AMD sử dụng bản build PyTorch ROCm với cú pháp device=0 hoặc device=cuda:0 tiêu chuẩn. Xem hướng dẫn tích hợp AMD để biết cách cài đặt ROCm, huấn luyện nhiều GPU, lưu ý về AMP và suy luận MIGraphX với các model đã export.

Huấn luyện trên GPU Intel sử dụng device=xpu:0 hoặc nhiều XPU ID với bản build PyTorch có cung cấp XCCL.

Huấn luyện trên NPU Huawei Ascend#

Ultralytics hỗ trợ huấn luyện và xác thực trên NPU Huawei Ascend thông qua torch_npu. Cài đặt các phiên bản CANN, PyTorch và torch_npu tương thích với nhau theo hướng dẫn cài đặt Ascend Extension for PyTorch, sau đó nạp môi trường CANN trước khi khởi chạy Ultralytics:

source /usr/local/Ascend/ascend-toolkit/set_env.sh
Ví dụ huấn luyện trên NPU Ascend
from ultralytics import YOLO

model = YOLO("yolo26n.pt")

# Huấn luyện trên một NPU Ascend
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")

# Huấn luyện trên hai NPU Ascend với HCCL
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0,1")

Các tính năng huấn luyện tiêu chuẩn, bao gồm AMP, xác thực, lưu checkpoint và tiếp tục huấn luyện, đều sử dụng NPU đang hoạt động. AutoBatch khả dụng khi huấn luyện trên một NPU, trong khi nhiều NPU ID sẽ khởi chạy huấn luyện phân tán thông qua HCCL. Xem hướng dẫn tích hợp Huawei Ascend để biết cách export và triển khai model sau khi huấn luyện.

Huấn luyện trên GPU ít bận#

Tính năng huấn luyện trên GPU ít bận tự động chọn các GPU có mức sử dụng thấp nhất trong hệ thống nhiều GPU, giúp tối ưu việc sử dụng tài nguyên mà không cần chọn GPU thủ công. Tính năng này xác định các GPU khả dụng dựa trên chỉ số mức sử dụng và dung lượng VRAM còn trống.

Ví dụ huấn luyện trên GPU ít bận

Để tự động chọn và sử dụng GPU ít bận nhất cho quá trình huấn luyện, hãy dùng tham số device -1. Tính năng này đặc biệt hữu ích trong môi trường điện toán dùng chung hoặc trên máy chủ có nhiều người dùng.

from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)

# Huấn luyện bằng GPU ít bận nhất
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)

# Huấn luyện bằng hai GPU ít bận nhất
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])

Thuật toán tự động chọn ưu tiên các GPU có:

  1. Phần trăm mức sử dụng hiện tại thấp hơn
  2. Dung lượng bộ nhớ khả dụng cao hơn (VRAM còn trống)

Tính năng này đặc biệt hữu ích trong môi trường điện toán dùng chung hoặc khi chạy nhiều tác vụ huấn luyện trên các model khác nhau. Tính năng tự động thích ứng với các điều kiện hệ thống thay đổi, đảm bảo phân bổ tài nguyên tối ưu mà không cần can thiệp thủ công.

Huấn luyện MPS trên Apple Silicon#

Nhờ hỗ trợ chip Apple silicon được tích hợp trong các model Ultralytics YOLO, giờ đây bạn có thể huấn luyện model trên các thiết bị sử dụng framework Bộ đổ bóng hiệu năng cao Metal (MPS). MPS cung cấp phương thức hiệu năng cao để thực thi các tác vụ tính toán và xử lý hình ảnh trên silicon tùy chỉnh của Apple.

Để bật huấn luyện trên chip Apple silicon, hãy chỉ định 'mps' làm thiết bị khi bắt đầu quá trình huấn luyện. Dưới đây là ví dụ thực hiện việc này bằng Python và dòng lệnh:

Ví dụ huấn luyện MPS
from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)

# Huấn luyện model bằng MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")

Tận dụng sức mạnh tính toán của chip Apple silicon giúp xử lý các tác vụ huấn luyện hiệu quả hơn. Để biết hướng dẫn chi tiết hơn và các tùy chọn cấu hình nâng cao, hãy tham khảo tài liệu PyTorch MPS.

Tiếp tục quá trình huấn luyện bị gián đoạn#

Khả năng tiếp tục huấn luyện từ trạng thái đã lưu trước đó là một tính năng thiết yếu khi làm việc với các model deep learning. Tính năng này hữu ích trong nhiều tình huống, chẳng hạn khi quá trình huấn luyện bị gián đoạn ngoài dự kiến hoặc khi bạn muốn tiếp tục huấn luyện model với dữ liệu mới hay thêm nhiều epoch.

Khi tiếp tục huấn luyện, Ultralytics YOLO tải trọng số từ model được lưu gần nhất, đồng thời khôi phục trạng thái optimizer, bộ lập lịch learning rate, số epoch và dataset. Nhờ đó, bạn có thể tiếp tục quá trình huấn luyện liền mạch từ điểm đã dừng. Truyền rõ ràng data= cùng với resume để tiếp tục trên một dataset khác thay vì dataset của checkpoint.

Bạn có thể dễ dàng tiếp tục huấn luyện trong Ultralytics YOLO bằng cách đặt đối số resume thành True khi gọi phương thức train, đồng thời chỉ định đường dẫn đến file .pt chứa trọng số model đã được huấn luyện một phần.

Dưới đây là ví dụ về cách tiếp tục quá trình huấn luyện bị gián đoạn bằng Python và qua command line:

Ví dụ tiếp tục huấn luyện
from ultralytics import YOLO

# Tải model
model = YOLO("path/to/last.pt")  # tải model đã được huấn luyện một phần

# Tiếp tục huấn luyện
results = model.train(resume=True)

Khi đặt resume=True, hàm train sẽ tiếp tục huấn luyện từ điểm đã dừng, sử dụng trạng thái được lưu trong file 'path/to/last.pt'. Nếu bỏ qua đối số resume hoặc đặt thành False, hàm train sẽ bắt đầu một phiên huấn luyện mới.

Theo mặc định, checkpoint được lưu vào cuối mỗi epoch hoặc theo các khoảng cố định bằng đối số save_period, vì vậy bạn phải hoàn thành ít nhất 1 epoch để tiếp tục một lượt huấn luyện.

Thiết lập Train#

Các thiết lập huấn luyện cho model YOLO bao gồm nhiều siêu tham số và cấu hình được sử dụng trong quá trình huấn luyện. Những thiết lập này ảnh hưởng đến hiệu suất, tốc độ và độ chính xác của model. Các thiết lập huấn luyện chính gồm batch size, learning rate, momentum và weight decay. Ngoài ra, lựa chọn optimizer, hàm loss và thành phần dataset huấn luyện cũng có thể ảnh hưởng đến quá trình huấn luyện. Việc tinh chỉnh cẩn thận và thử nghiệm các thiết lập này là yếu tố thiết yếu để tối ưu hiệu suất.

Optimizer MuSGD#

Trong YOLO26, MuSGD là optimizer lai kết hợp các cập nhật SGD tiêu chuẩn với các cập nhật trực giao hóa kiểu Muon.

Optimizer này được khuyến nghị cho các lượt huấn luyện YOLO26 kéo dài và dataset lớn hơn, trong đó các cập nhật Muon được trực giao hóa có thể giúp ổn định quá trình tối ưu hóa.

Chỉ trọng số tuyến tính 2D và các bộ lọc tích chập 4D (được định hình lại thành 2D) mới nhận cập nhật kiểu Muon cùng với SGD; các tham số khác, chẳng hạn trọng số batch normalization và các thành phần bias, vẫn dùng SGD tiêu chuẩn.

Khi sử dụng optimizer=auto, Ultralytics tự động chọn MuSGD cho các lượt huấn luyện kéo dài (thường là khi số vòng lặp > 10000). Với các lượt ngắn hơn, trainer chuyển sang AdamW. Ở chế độ auto, trainer cũng chọn learning rate, vì vậy lr0 do người dùng cung cấp sẽ bị bỏ qua. Để tự kiểm soát các thiết lập này, hãy chọn rõ optimizer, chẳng hạn optimizer=AdamW lr0=0.001.

Ví dụ sử dụng:

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

Xem phần triển khai trong ultralytics/optim/muon.py và logic tự động chọn optimizer trong BaseTrainer.build_optimizer.

Đối sốKiểuMặc địnhMô tả
modelstrNoneChỉ định file model dùng để huấn luyện. Chấp nhận đường dẫn đến model pretrained .pt hoặc file cấu hình .yaml. Đây là thiết lập thiết yếu để xác định cấu trúc model hoặc khởi tạo trọng số.
datastrNoneĐường dẫn đến YAML của dataset (ví dụ: coco8.yaml), chứa đường dẫn đến dữ liệu validation và dữ liệu huấn luyện, tên lớp cùng số lượng lớp. Với phân loại, thay vào đó hãy cung cấp thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ: imagenet10).
epochsint100Tổng số epoch huấn luyện. Mỗi epoch là một lượt duyệt qua toàn bộ dataset. Điều chỉnh giá trị này có thể ảnh hưởng đến thời lượng huấn luyện và hiệu năng model.
timefloatNoneThời gian huấn luyện tối đa tính bằng giờ. Nếu được đặt, giá trị này sẽ ghi đè đối số epochs, cho phép tự động dừng huấn luyện sau khoảng thời gian đã chỉ định. Hữu ích trong các tình huống bị giới hạn thời gian huấn luyện.
patienceint100Số epoch chờ mà không có cải thiện về metric validation trước khi dừng sớm quá trình huấn luyện. Giúp ngăn overfitting bằng cách dừng huấn luyện khi hiệu năng chững lại.
batchint hoặc float16Batch size, với ba chế độ: đặt bằng số nguyên (ví dụ: batch=16), chế độ tự động sử dụng 60% bộ nhớ GPU (batch=-1), hoặc chế độ tự động với tỷ lệ sử dụng được chỉ định (batch=0.70).
imgszint640Kích thước hình ảnh mục tiêu dùng cho huấn luyện. Hình ảnh được thay đổi kích thước thành hình vuông có cạnh bằng giá trị đã chỉ định (nếu rect=False), giữ nguyên tỷ lệ khung hình với model YOLO nhưng không áp dụng với RT-DETR. Ảnh hưởng đến độ chính xác và độ phức tạp tính toán của model.
saveboolTrueBật lưu checkpoint huấn luyện và trọng số model cuối cùng. Hữu ích để tiếp tục huấn luyện hoặc triển khai model.
save_periodint-1Tần suất lưu checkpoint model, tính theo epoch. Giá trị -1 sẽ tắt tính năng này. Hữu ích để lưu các model trung gian trong những phiên huấn luyện kéo dài.
cachebool hoặc strFalseBật cache hình ảnh dataset trong bộ nhớ (True/ram), trên ổ đĩa (disk) hoặc tắt cache (False). Tăng tốc độ huấn luyện bằng cách giảm I/O ổ đĩa, đổi lại cần nhiều bộ nhớ hơn.
deviceint hoặc str hoặc listNoneChỉ định (các) thiết bị tính toán dùng để huấn luyện: một GPU (device=0), nhiều GPU (device=[0,1]), CPU (device=cpu), MPS cho Apple silicon (device=mps), Huawei Ascend NPU (device=npu:0 hoặc device=npu:0,1), Intel XPU (device=xpu:0), hoặc tự động chọn GPU đang rảnh (device=-1) hay nhiều GPU đang rảnh (device=[-1,-1]).
workersint8Số luồng worker dùng để tải dữ liệu (cho mỗi RANK nếu huấn luyện đa GPU). Ảnh hưởng đến tốc độ tiền xử lý dữ liệu và đưa dữ liệu vào model; đặc biệt hữu ích trong cấu hình nhiều GPU.
projectstrNoneTên thư mục project nơi lưu kết quả huấn luyện. Cho phép lưu trữ có tổ chức các thử nghiệm khác nhau.
namestrNoneTên lần chạy huấn luyện. Dùng để tạo thư mục con trong thư mục project, nơi lưu log và kết quả huấn luyện.
exist_okboolFalseNếu là True, cho phép ghi đè thư mục project/name hiện có. Hữu ích khi thử nghiệm lặp lại mà không cần xóa thủ công các kết quả trước đó.
save_dirstrNoneChỉ định chính xác thư mục lưu kết quả lần chạy, ghi đè tổ hợp project/name. Đường dẫn được sử dụng nguyên trạng, không tự động tăng số; vì vậy các lần chạy liên tiếp sẽ dùng lại cùng thư mục.
pretrainedbool hoặc strTrueXác định có bắt đầu huấn luyện từ trọng số pretrained hay không. Có thể là giá trị boolean hoặc đường dẫn dạng chuỗi đến trọng số cần tải. pretrained=False huấn luyện từ trọng số được khởi tạo ngẫu nhiên trong khi vẫn giữ nguyên kiến trúc model.
cls_remapboolTrueKhi fine-tune trên nhiều dataset, sao chép các hàng của classification head pretrained sang model mới ở những vị trí tên lớp trùng khớp, nhờ đó các lớp trùng nhau giữ lại bias đã học và cả trọng số nếu chiều rộng của head không đổi. Áp dụng khi số lượng lớp khác nhau, hoặc khi số lượng lớp giống nhau nhưng thứ tự lớp khác nhau.
optimizerstr'auto'Lựa chọn optimizer dùng để huấn luyện. Các tùy chọn gồm SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp hoặc auto để chọn AdamW hoặc MuSGD dựa trên số lần lặp huấn luyện. Ảnh hưởng đến tốc độ và độ ổn định hội tụ.
seedint0Đặt seed ngẫu nhiên cho quá trình huấn luyện, đảm bảo có thể tái lập kết quả giữa các lần chạy với cùng cấu hình.
deterministicboolTrueBuộc sử dụng thuật toán tất định, đảm bảo khả năng tái lập nhưng có thể ảnh hưởng đến hiệu năng và tốc độ do hạn chế sử dụng thuật toán không tất định.
verboseboolTrueBật đầu ra chi tiết trong quá trình huấn luyện, hiển thị thanh tiến trình, metric theo từng epoch và thông tin huấn luyện bổ sung trong console.
single_clsboolFalseCoi tất cả lớp trong dataset đa lớp là một lớp duy nhất trong quá trình huấn luyện. Hữu ích cho các tác vụ phân loại nhị phân hoặc khi tập trung vào sự hiện diện của đối tượng thay vì phân loại.
classeslist[int]NoneChỉ định danh sách ID lớp cần huấn luyện. Hữu ích để lọc và chỉ tập trung vào một số lớp nhất định trong quá trình huấn luyện.
rectboolFalseBật chiến lược đệm tối thiểu — hình ảnh trong một batch chỉ được đệm vừa đủ để đạt kích thước chung, với cạnh dài nhất bằng imgsz. Có thể cải thiện hiệu suất và tốc độ nhưng ảnh hưởng đến độ chính xác của model. YOLO trainer tiêu chuẩn sử dụng rect=True để xác thực các tác vụ phát hiện, phân đoạn, tư thế và OBB, bất kể thiết lập này.
multi_scalefloat0.0Thay đổi ngẫu nhiên imgsz theo từng batch trong phạm vi +/- multi_scale (ví dụ: 0.25 -> 0.75x đến 1.25x), làm tròn theo bội số stride của model; 0.0 sẽ tắt huấn luyện đa tỷ lệ.
cos_lrboolFalseSử dụng bộ lập lịch learning rate cosine, điều chỉnh learning rate theo đường cong cosine qua các epoch. Giúp quản lý learning rate để hội tụ tốt hơn.
close_mosaicint10Tắt mosaic data augmentation trong N epoch cuối để ổn định quá trình huấn luyện trước khi kết thúc. Đặt thành 0 để tắt tính năng này.
resumeboolFalseTiếp tục huấn luyện từ checkpoint được lưu gần nhất. Tự động tải trọng số model, trạng thái optimizer và số epoch để tiếp tục huấn luyện liền mạch.
ampbool hoặc strTrueĐặt độ chính xác huấn luyện: True hoặc "fp16" sử dụng FP16, "bf16" sử dụng BF16 trên các thiết bị CUDA được hỗ trợ, còn False hoặc "fp32" sử dụng FP32.
quantizeint hoặc strNoneĐặt thành 8 (hoặc "int8") để thực hiện huấn luyện nhận biết lượng tử hóa INT8 (QAT), trong đó fine-tune với lượng tử hóa giả trong vòng lặp để trọng số tương thích với quá trình export INT8. Xem Huấn luyện nhận biết lượng tử hóa.
fractionfloat, int hoặc list1.0Tập con của dataset, biểu thị bằng tỷ lệ/số lượng hoặc danh sách [train, val, test]. 1 nghĩa là dùng toàn bộ split, số nguyên lớn hơn 1 là số lượng hình ảnh, và chỉ mục test tùy chọn mới chấp nhận 0/0.0 để biểu thị không dùng test. Danh sách hai phần tử sẽ giữ nguyên toàn bộ tập test.
profileboolFalseBật profiling tốc độ ONNX và TensorRT trong quá trình huấn luyện, hữu ích để tối ưu triển khai model.
freezeint hoặc listNoneĐóng băng N layer đầu tiên của model hoặc các layer cụ thể theo chỉ số hay tên module (23.cv2, không có tiền tố model.), qua đó giảm số lượng tham số có thể huấn luyện. Hữu ích cho fine-tune hoặc transfer learning.
lr0float0.01Learning rate ban đầu (tức SGD=1E-2, Adam=1E-3). Bị bỏ qua với optimizer='auto' mặc định; hãy chỉ định rõ optimizer để sử dụng giá trị này.
lrffloat0.01Learning rate cuối cùng tính theo tỷ lệ của learning rate ban đầu = (lr0 * lrf), được dùng cùng với các scheduler để điều chỉnh learning rate theo thời gian.
momentumfloat0.937Hệ số momentum cho SGD hoặc beta1 cho optimizer Adam, ảnh hưởng đến mức độ gradient trước đó được đưa vào cập nhật hiện tại.
weight_decayfloat0.0005Thành phần regularization L2, phạt các trọng số lớn để ngăn overfitting.
warmup_epochsfloat3.0Số epoch warmup learning rate, trong đó learning rate tăng dần từ giá trị thấp lên learning rate ban đầu để ổn định quá trình huấn luyện ở giai đoạn đầu.
warmup_momentumfloat0.8Momentum ban đầu cho giai đoạn warmup, được điều chỉnh dần đến momentum đã đặt trong suốt thời gian warmup.
warmup_bias_lrfloat0.1Learning rate cho các tham số bias trong giai đoạn warmup, giúp ổn định quá trình huấn luyện model ở các epoch đầu. Tự động đặt thành 0.0 với optimizer='auto' mặc định; hãy chỉ định rõ optimizer để sử dụng giá trị này.
distill_modelstrNoneĐường dẫn đến checkpoint của model teacher (ví dụ: yolo26x.pt) để chưng cất tri thức. Khi được đặt, model student sẽ được huấn luyện với loss chưng cất bổ sung, dựa trên hướng dẫn từ model teacher đã đóng băng.
disfloat6.0Trọng số của loss chưng cất được cộng vào các loss phát hiện tiêu chuẩn. Giá trị cao hơn làm tăng ảnh hưởng của hướng dẫn đặc trưng từ teacher.
boxfloat7.5Trọng số của thành phần box loss trong hàm loss, quyết định mức độ ưu tiên cho việc dự đoán chính xác tọa độ bounding box.
clsfloat0.5Trọng số của classification loss trong hàm loss tổng thể, ảnh hưởng đến mức độ quan trọng của việc dự đoán đúng lớp so với các thành phần khác.
cls_pwfloat0.0Số mũ dùng để gán trọng số lớp nhằm xử lý mất cân bằng lớp dựa trên tần suất lớp nghịch đảo. 0.0 tắt việc gán trọng số lớp, còn 1.0 áp dụng đầy đủ trọng số tần suất nghịch đảo. Các giá trị từ 0 đến 1 áp dụng trọng số một phần.
dflfloat1.5Trọng số của thành phần hồi quy khoảng cách box: distribution focal loss (DFL) khi detection head sử dụng reg_max > 1, hoặc loss L1 trên khoảng cách box chuẩn hóa với YOLO26 không dùng DFL (reg_max: 1).
posefloat12.0Trọng số của pose loss trong các model được huấn luyện để ước lượng tư thế, ảnh hưởng đến mức độ ưu tiên cho việc dự đoán chính xác keypoint tư thế.
kobjfloat1.0Trọng số của keypoint objectness loss trong các model ước lượng tư thế, cân bằng độ tin cậy phát hiện với độ chính xác tư thế.
rlefloat1.0Trọng số của loss ước lượng log-likelihood phần dư trong các model ước lượng tư thế, ảnh hưởng đến độ chính xác khi định vị keypoint.
anglefloat1.0Trọng số của angle loss trong model OBB, ảnh hưởng đến độ chính xác của dự đoán góc hộp giới hạn định hướng.
dlogfloat1.0Trọng số của loss logarit bất biến tỷ lệ (SILog) trong các model ước lượng độ sâu, thành phần chính thúc đẩy độ chính xác độ sâu.
dgradfloat0.5Trọng số của gradient loss trong các model ước lượng độ sâu, phạt lỗi tại các cạnh độ sâu và khuyến khích ranh giới bề mặt sắc nét hơn.
dlamfloat1.0Hệ số tập trung phương sai của SILog loss trong các model ước lượng độ sâu. 1.0 làm cho loss bất biến tỷ lệ hoàn toàn, trong khi 0.0 rút gọn loss thành log-RMSE thuần.
nbsint64Batch size danh nghĩa dùng để chuẩn hóa loss.
overlap_maskboolTrueXác định có gộp mask của các đối tượng thành một mask duy nhất khi huấn luyện hay giữ riêng mask cho từng đối tượng. Nếu các mask chồng lấn, khi gộp thì mask nhỏ hơn sẽ được đặt lên trên mask lớn hơn.
mask_ratioint4Tỷ lệ giảm mẫu cho mask phân đoạn, ảnh hưởng đến độ phân giải của mask được sử dụng trong quá trình huấn luyện. Không làm thay đổi độ phân giải của mask dự đoán.
dropoutfloat0.0Tỷ lệ dropout dùng để regularization trong các tác vụ phân loại, ngăn overfitting bằng cách ngẫu nhiên loại bỏ các unit trong quá trình huấn luyện.
valboolTrueBật validation trong quá trình huấn luyện, cho phép đánh giá định kỳ hiệu năng model trên một dataset riêng.
nmsbool, không bắt buộcNoneChọn detection head dùng để suy luận khi validation theo epoch, chọn checkpoint và dừng sớm. None hoặc True sử dụng one-to-many với NMS; False sử dụng head không cần NMS nếu có. Cả hai head vẫn giữ nguyên các loss huấn luyện.
plotsboolTrueTạo và lưu biểu đồ metric huấn luyện và validation, cùng các ví dụ dự đoán, cung cấp thông tin trực quan về hiệu năng model và tiến trình học.
compilebool hoặc strFalseBật biên dịch đồ thị torch.compile của PyTorch 2.x bằng backend='inductor'. Chấp nhận True → "default", False → tắt, hoặc chế độ dạng chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Nếu không được hỗ trợ, sẽ chuyển về chế độ eager kèm cảnh báo.
channels_lastboolNoneSử dụng định dạng bộ nhớ channels_last (NHWC) cho convolution trong quá trình huấn luyện. None tự động bật định dạng này trên CUDA với PyTorch 1.11 trở lên, ngoại trừ Windows vì đo được tốc độ chậm hơn. False tắt định dạng này, còn True yêu cầu bật rõ ràng. Huấn luyện trên CPU hoặc MPS luôn dùng NCHW (True sẽ bị bỏ qua kèm cảnh báo).
max_detint300Số lượng detection tối đa trên mỗi hình ảnh trong quá trình validation huấn luyện. Với detect, segment, pose và OBB, giá trị mặc định 300 chỉ tăng lên bằng số đối tượng được gán nhãn lớn nhất trong train/val khi số lượng đó vượt quá 300. Các giá trị khác được giữ nguyên; nếu vượt giới hạn sẽ có cảnh báo.
Lưu ý về thiết lập batch size

Có thể cấu hình đối số batch theo ba cách:

  • Batch Size cố định: Đặt một giá trị số nguyên (ví dụ: batch=16) để chỉ định trực tiếp số ảnh trong mỗi batch.
  • Chế độ tự động (60% bộ nhớ GPU): Dùng batch=-1 để tự động điều chỉnh batch size nhằm sử dụng khoảng 60% bộ nhớ CUDA.
  • Chế độ tự động với tỷ lệ sử dụng: Đặt một giá trị tỷ lệ (ví dụ: batch=0.70) để điều chỉnh batch size dựa trên tỷ lệ sử dụng bộ nhớ GPU được chỉ định.
  • Tự động thử lại khi OOM: Nếu xảy ra lỗi CUDA hết bộ nhớ trong epoch đầu tiên, trainer tự động giảm một nửa batch size rồi thử lại (tối đa 3 lần). Tính năng này chỉ áp dụng cho huấn luyện trên một GPU; huấn luyện đa GPU (DDP) sẽ báo lỗi ngay lập tức.
  • Không tìm thấy cấu hình phù hợp: Nếu không có batch size ứng viên nào tạo được profile khả dụng, AutoBatch sẽ đưa ra RuntimeError rõ ràng thay vì âm thầm chuyển về một giá trị mặc định không liên quan.

Thiết lập augmentation và siêu tham số#

Các kỹ thuật augmentation đóng vai trò thiết yếu trong việc cải thiện độ bền vững và hiệu suất của model YOLO bằng cách tạo biến thiên trong dữ liệu huấn luyện, giúp model tổng quát hóa tốt hơn trên dữ liệu chưa từng gặp. Bảng sau trình bày mục đích và tác động của từng đối số augmentation:

Đối sốKiểuMặc địnhCác tác vụ được hỗ trợPhạm viMô tả
hsv_hfloat0.015detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Điều chỉnh sắc độ của ảnh theo một phần vòng màu, tạo ra biến thiên màu sắc. Giúp model khái quát hóa trong các điều kiện chiếu sáng khác nhau. Với classify, tùy chọn này chỉ áp dụng khi auto_augment=None.
hsv_sfloat0.7detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Thay đổi độ bão hòa của ảnh theo một tỷ lệ, ảnh hưởng đến cường độ màu sắc. Hữu ích để mô phỏng các điều kiện môi trường khác nhau. Với classify, tùy chọn này chỉ áp dụng khi auto_augment=None.
hsv_vfloat0.4detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Điều chỉnh giá trị (độ sáng) của ảnh theo một tỷ lệ, giúp model hoạt động tốt trong nhiều điều kiện chiếu sáng khác nhau. Với classify, tùy chọn này chỉ áp dụng khi auto_augment=None.
degreesfloat0detect, segment, semantic, depth, pose, obb0.0 - 180Xoay ngẫu nhiên ảnh trong phạm vi độ được chỉ định, cải thiện khả năng nhận diện đối tượng ở nhiều hướng khác nhau của model.
translatefloat0.1detect, segment, semantic, depth, pose, obb0.0 - 1.0Dịch chuyển ảnh theo chiều ngang và chiều dọc một phần so với kích thước ảnh, hỗ trợ model học cách phát hiện các đối tượng chỉ hiển thị một phần.
scalefloat | tuple0.5detect, segment, semantic, depth, classify, pose, obb0 - 1 hoặc tuple (min, max) được chỉ định tường minh (không áp dụng cho classify).Thay đổi tỷ lệ ảnh theo hệ số khuếch đại, mô phỏng đối tượng ở các khoảng cách khác nhau so với camera.
shearfloat0detect, segment, semantic, depth, pose, obb-180 - +180Biến dạng xiên ảnh theo số độ được chỉ định, mô phỏng hiệu ứng khi quan sát đối tượng từ các góc khác nhau.
perspectivefloat0detect, segment, semantic, depth, pose, obb0.0 - 0.001Áp dụng phép biến đổi phối cảnh ngẫu nhiên lên ảnh, cải thiện khả năng hiểu đối tượng trong không gian 3D của model.
flipudfloat0detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Lật ngược ảnh theo xác suất được chỉ định, tăng độ biến thiên của dữ liệu mà không làm thay đổi đặc điểm của đối tượng.
fliplrfloat0.5detect, segment, semantic, depth, classify, pose, obb0.0 - 1.0Lật ảnh theo chiều ngang với xác suất được chỉ định, hữu ích để model học về các đối tượng đối xứng và tăng tính đa dạng của dataset.
bgrfloat0detect, segment, semantic, depth, pose, obb0.0 - 1.0Đảo thứ tự kênh ảnh từ RGB sang BGR với xác suất được chỉ định, hữu ích để tăng khả năng chống chịu khi thứ tự kênh không chính xác.
mosaicfloat1detect, segment, semantic, pose, obb0.0 - 1.0Kết hợp bốn ảnh huấn luyện thành một, mô phỏng các bố cục cảnh và tương tác giữa các đối tượng khác nhau. Đặc biệt hiệu quả trong việc hiểu các cảnh phức tạp.
mixupfloat0detect, segment, semantic, pose, obb0.0 - 1.0Trộn hai ảnh và nhãn tương ứng để tạo ảnh tổng hợp. Tăng khả năng khái quát hóa của model bằng cách tạo nhiễu nhãn và biến thiên thị giác.
cutmixfloat0detect, segment, semantic, pose, obb0.0 - 1.0Kết hợp các phần của hai ảnh, tạo hiệu ứng trộn một phần trong khi vẫn giữ các vùng riêng biệt. Tăng độ bền vững của model bằng cách tạo ra các tình huống che khuất.
copy_pastefloat0segment, semantic, obb0.0 - 1.0Tỷ lệ đối tượng đủ điều kiện được dán; flip phản chiếu chúng trong ảnh, còn mixup cũng dùng giá trị này làm xác suất áp dụng giữa các ảnh.
copy_paste_modestrflipsegment, semantic, obb-Chỉ định chiến lược copy-paste cần sử dụng. Các tùy chọn gồm 'flip' và 'mixup'.
auto_augmentstrrandaugmentclassify-Áp dụng chính sách tăng cường được xác định trước ('randaugment', 'autoaugment' hoặc 'augmix') để cải thiện hiệu năng model thông qua sự đa dạng thị giác.
erasingfloat0.4classify0.0 - 1.0Xóa ngẫu nhiên các vùng ảnh trong quá trình huấn luyện để khuyến khích model tập trung vào những đặc trưng ít rõ ràng hơn.
augmentationslistNonedetect, segment, semantic, depth, pose, obb-Các phép biến đổi Albumentations tùy chỉnh để tăng cường dữ liệu nâng cao (chỉ dùng được qua Python API). Nhận danh sách các đối tượng transform cho nhu cầu tăng cường chuyên biệt.

Có thể điều chỉnh các thiết lập này để đáp ứng yêu cầu cụ thể của dataset và tác vụ. Thử nghiệm các giá trị khác nhau có thể giúp tìm ra chiến lược augmentation tối ưu, mang lại hiệu suất model tốt nhất.

Thông tin

Để biết thêm thông tin về các thao tác augmentation trong quá trình huấn luyện, hãy xem phần tham khảo.

Ghi log#

Các metric huấn luyện, biểu đồ và checkpoint luôn được ghi vào thư mục của lượt chạy; Ultralytics cũng truyền dữ liệu đến mọi công cụ theo dõi thí nghiệm mà bạn đã cài đặt và bật: Comet, ClearML, TensorBoard, MLflow, Weights & Biases và DVCLive. Có thể bật hoặc tắt từng logger thông qua các thiết lập Ultralytics, chẳng hạn yolo settings tensorboard=True. Dưới đây là ba cấu hình phổ biến nhất.

Comet#

Comet là nền tảng cho phép nhà khoa học dữ liệu và nhà phát triển theo dõi, so sánh, giải thích và tối ưu hóa các thí nghiệm cũng như model. Nền tảng này cung cấp các chức năng như metric theo thời gian thực, so sánh khác biệt mã nguồn và theo dõi siêu tham số.

Cách sử dụng Comet:

Ví dụ
# pip install comet_ml
import comet_ml

comet_ml.login()

Hãy đăng nhập vào tài khoản Comet trên trang web của họ và lấy API key. Bạn cần thêm khóa này vào biến môi trường hoặc script để ghi log các thí nghiệm.

ClearML#

ClearML là nền tảng mã nguồn mở tự động hóa việc theo dõi thí nghiệm và hỗ trợ chia sẻ tài nguyên hiệu quả. Nền tảng này được thiết kế để giúp các nhóm quản lý, thực thi và tái tạo quy trình ML hiệu quả hơn.

Cách sử dụng ClearML:

Ví dụ
# pip install clearml
import clearml

clearml.browser_login()

Sau khi chạy script này, bạn cần đăng nhập vào tài khoản ClearML trên trình duyệt và xác thực phiên làm việc.

TensorBoard#

TensorBoard là bộ công cụ trực quan hóa dành cho TensorFlow. Công cụ này cho phép bạn trực quan hóa đồ thị TensorFlow, vẽ các metric định lượng về quá trình thực thi đồ thị và hiển thị dữ liệu bổ sung như hình ảnh đi qua đồ thị.

Cách sử dụng TensorBoard trong Google Colab:

Ví dụ
%load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directory

Để sử dụng TensorBoard trên máy cục bộ, hãy chạy lệnh dưới đây và xem kết quả tại localhost:6006.

Ví dụ
tensorboard --logdir ultralytics/runs # replace with 'runs' directory

Lệnh này sẽ khởi chạy TensorBoard và trỏ đến thư mục lưu các log huấn luyện.

Sau khi thiết lập logger, bạn có thể bắt đầu huấn luyện model. Tất cả metric huấn luyện sẽ tự động được ghi vào nền tảng bạn chọn; bạn có thể truy cập các log này để theo dõi hiệu suất model theo thời gian, so sánh các model khác nhau và xác định những điểm cần cải thiện.

Tiếp theo là gì#

Đánh giá model đã huấn luyện trên dữ liệu giữ lại để kiểm tra độ chính xác trong thực tế, sau đó xuất model sang ONNX, TensorRT hoặc định dạng triển khai khác. Bạn đang huấn luyện trên dữ liệu của riêng mình thay vì COCO8? Trước tiên, hãy định dạng dữ liệu theo hướng dẫn về Dataset.

Câu hỏi thường gặp#

  • Có. Huấn luyện trên đám mây của Ultralytics Platform cung cấp tín dụng miễn phí để bạn bắt đầu. Tải dataset lên, chọn model và GPU, rồi huấn luyện trực tiếp trên trình duyệt.

  • Để huấn luyện model phát hiện đối tượng bằng Ultralytics YOLO26, bạn có thể dùng Python API hoặc CLI. Dưới đây là ví dụ cho cả hai cách:

    Ví dụ huấn luyện với một GPU và CPU
    from ultralytics import YOLO
    
    # Tải model
    model = YOLO("yolo26n.pt")  # tải model đã huấn luyện trước (được khuyến nghị khi huấn luyện)
    
    # Huấn luyện model
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640)

    Để biết thêm chi tiết, hãy xem phần Thiết lập huấn luyện.

  • Các tính năng chính của chế độ Train trong Ultralytics YOLO26 gồm:

    • Tự động tải dataset: Tự động tải các dataset tiêu chuẩn như COCO, VOC và ImageNet.
    • Hỗ trợ đa GPU: Mở rộng huấn luyện trên nhiều GPU để xử lý nhanh hơn.
    • Cấu hình siêu tham số: Tùy chỉnh siêu tham số thông qua file YAML hoặc đối số CLI.
    • Trực quan hóa và giám sát: Theo dõi metric huấn luyện theo thời gian thực để có được thông tin chuyên sâu hơn.

    Các tính năng này giúp quá trình huấn luyện hiệu quả và có thể tùy chỉnh theo nhu cầu của bạn. Để biết thêm chi tiết, hãy xem phần Các tính năng chính của chế độ Train.

  • Để tiếp tục huấn luyện từ một phiên bị gián đoạn, hãy đặt đối số resume thành True và chỉ định đường dẫn đến checkpoint được lưu gần nhất.

    Ví dụ tiếp tục huấn luyện
    from ultralytics import YOLO
    
    # Tải model đã được huấn luyện một phần
    model = YOLO("path/to/last.pt")
    
    # Tiếp tục huấn luyện
    results = model.train(resume=True)

    Xem phần Tiếp tục huấn luyện bị gián đoạn để biết thêm thông tin.

  • Mất cân bằng lớp xảy ra khi một số lớp có ít mẫu hơn đáng kể so với các lớp khác trong dữ liệu huấn luyện. Điều này có thể khiến model hoạt động kém trên các lớp hiếm. Ultralytics YOLO hỗ trợ gán trọng số cho lớp thông qua đối số cls_pw để xử lý vấn đề này.

    Đối số cls_pw điều khiển mức độ gán trọng số cho lớp dựa trên tần suất lớp nghịch đảo:

    • cls_pw=0.0 (mặc định): Tắt tính năng gán trọng số cho lớp
    • cls_pw=1.0: Áp dụng đầy đủ trọng số theo tần suất nghịch đảo
    • Các giá trị từ 0.0 đến 1.0: Cung cấp mức gán trọng số một phần để xử lý tình trạng mất cân bằng vừa phải

    Trọng số lớp được tính bằng (1.0 / class_counts) ^ cls_pw và chuẩn hóa sao cho giá trị trung bình bằng 1.0.

    Huấn luyện trên dataset mất cân bằng
    from ultralytics import YOLO
    
    # Tải model pretrained
    model = YOLO("yolo26n.pt")
    
    # Huấn luyện với trọng số lớp đầy đủ cho dữ liệu mất cân bằng nghiêm trọng
    results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0)
    
    # Hoặc dùng trọng số một phần (0.25) cho tình trạng mất cân bằng vừa phải
    results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)
    Mẹo

    Bắt đầu với cls_pw=0.25 cho các dataset mất cân bằng vừa phải và tăng lên 1.0 nếu các lớp hiếm vẫn có hiệu suất kém. Bạn có thể kiểm tra trọng số lớp đã tính trong log huấn luyện để xác minh phân bố trọng số.

  • Có, Ultralytics YOLO26 hỗ trợ huấn luyện trên chip Apple silicon bằng framework Metal Performance Shaders (MPS). Hãy chỉ định 'mps' làm thiết bị huấn luyện.

    Ví dụ huấn luyện MPS
    from ultralytics import YOLO
    
    # Tải model pretrained
    model = YOLO("yolo26n.pt")
    
    # Huấn luyện model trên chip Apple silicon (M1/M2/M3/M4)
    results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")

    Để biết thêm chi tiết, hãy xem phần Huấn luyện MPS trên Apple Silicon.

  • Ultralytics YOLO26 cho phép bạn cấu hình nhiều thiết lập huấn luyện như batch size, learning rate, số epoch và các thiết lập khác thông qua đối số. Sau đây là tổng quan ngắn:

    Đối sốMặc địnhMô tả
    modelNoneĐường dẫn đến file model dùng để huấn luyện.
    dataNoneĐường dẫn đến YAML của dataset (ví dụ: coco8.yaml), hoặc thư mục hay tên dataset (ví dụ: imagenet10) dành cho phân loại.
    epochs100Tổng số epoch huấn luyện.
    batch16Batch size, có thể đặt dưới dạng số nguyên hoặc chế độ tự động.
    imgsz640Kích thước ảnh mục tiêu dùng để huấn luyện.
    deviceNoneThiết bị tính toán dùng để huấn luyện, chẳng hạn cpu, 0, 0,1 hoặc mps.
    saveTrueBật tính năng lưu checkpoint huấn luyện và trọng số model cuối cùng.

    Để xem hướng dẫn chuyên sâu về thiết lập huấn luyện, hãy tham khảo phần Thiết lập huấn luyện.

Bình luận