Huấn luyện Model với Ultralytics YOLO#
Giới thiệu#
Việc huấn luyện một mô hình deep learning bao gồm việc cung cấp dữ liệu và điều chỉnh các tham số của nó để mô hình có thể đưa ra các dự đoán chính xác. Chế độ Train trong Ultralytics YOLO26 được thiết kế để huấn luyện các mô hình phát hiện đối tượng một cách hiệu quả và tối ưu, tận dụng tối đa năng lực phần cứng hiện đại. Hướng dẫn này nhằm mục đích bao quát tất cả các chi tiết bạn cần để bắt đầu huấn luyện các mô hình của riêng mình bằng bộ tính năng mạnh mẽ của YOLO26. Nếu bạn chưa cài đặt Ultralytics, hãy bắt đầu với Quickstart guide.
Watch: How to Train a YOLO model on Your Custom Dataset in Google Colab.
Tại sao chọn Ultralytics YOLO để huấn luyện?#
Dưới đây là một số lý do thuyết phục để chọn chế độ Train của YOLO26:
- Hiệu suất: Tận dụng tối đa phần cứng của bạn, bất kể bạn đang sử dụng thiết lập đơn GPU hay mở rộng trên nhiều GPU.
- Tính linh hoạt: Huấn luyện trên các bộ dữ liệu tùy chỉnh bên cạnh các bộ dữ liệu có sẵn như COCO, VOC và ImageNet.
- Thân thiện với người dùng: Các giao diện CLI và Python đơn giản nhưng mạnh mẽ mang lại trải nghiệm huấn luyện trực quan.
- Tính linh hoạt của Hyperparameter: Một loạt các hyperparameter có thể tùy chỉnh rộng rãi để tinh chỉnh hiệu suất mô hình. Để kiểm soát sâu hơn, bạn có thể customize the trainer.
- Huấn luyện trên đám mây: Huấn luyện trên các GPU đám mây thông qua Ultralytics Platform với số liệu thời gian thực và tự động lưu điểm kiểm tra (checkpointing).
Các tính năng chính của chế độ Train#
Dưới đây là một số tính năng nổi bật của chế độ Train trên YOLO26:
- Tự động tải xuống tập dữ liệu: Các cấu hình tập dữ liệu có nguồn tải xuống sẽ được tải xuống tự động trong lần sử dụng đầu tiên, ví dụ:
yolo train data=coco8.yaml. Xem phần Datasets overview để biết các định dạng và tập dữ liệu được hỗ trợ. - Hỗ trợ đa GPU: Mở rộng nỗ lực huấn luyện của bạn một cách liền mạch trên nhiều GPU để đẩy nhanh quá trình.
- Cấu hình Hyperparameter: Tùy chọn sửa đổi các hyperparameter thông qua tệp cấu hình YAML hoặc các đối số CLI.
- Trực quan hóa và Giám sát: Theo dõi số liệu huấn luyện theo thời gian thực và trực quan hóa quá trình học tập để có thông tin chi tiết tốt hơn.
Ví dụ Sử dụng#
Huấn luyện mô hình YOLO26n trên tập dữ liệu COCO8 trong 100 epochs với kích thước ảnh 640. Thiết bị huấn luyện có thể được chỉ định bằng đối số device. Nếu không có đối số nào được truyền vào, GPU device=0 sẽ được sử dụng khi có sẵn; nếu không, device='cpu' sẽ được sử dụng. Xem phần Đối số bên dưới để có danh sách đầy đủ các đối số huấn luyện.
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 một script. Thêm một khối if __name__ == "__main__": trước mã nguồn huấn luyện của bạn để giải quyết vấn đề này.
Thiết bị được xác định tự động. Nếu có sẵn GPU, nó sẽ được sử dụng (mặc định là thiết bị CUDA 0); nếu không, quá trình huấn luyện sẽ bắt đầu trên CPU.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.yaml") # build a new model from YAML
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
model = YOLO("yolo26n.yaml").load("yolo26n.pt") # build from YAML and transfer weights
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Huấn luyện đa GPU#
Huấn luyện đa GPU cho phép sử dụng tài nguyên phần cứng có sẵn hiệu quả hơn bằng cách phân phối tải trọng huấn luyện trên nhiều GPU. Tính năng này khả dụng thông qua cả API Python và giao diện dòng lệnh. Để kích hoạt huấn luyện đa GPU, hãy chỉ định các ID thiết bị GPU mà bạn muốn sử dụng.
Để huấn luyện với 2 GPU, thiết bị CUDA 0 và 1, hãy sử dụng các lệnh sau. Mở rộng ra các GPU bổ sung nếu cần.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with 2 GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[0, 1])
# Train the model with the two most idle GPUs
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=[-1, -1])Khi bạn chỉ định nhiều thiết bị (ví dụ: device=[0, 1]), Ultralytics sẽ tự động khởi tạo một thể hiện trình huấn luyện mới và thực thi torch.distributed.run bên dưới. Quá trình này hoạt động liền mạch đối với việc sử dụng CLI tiêu chuẩn và các script Python chưa được sửa đổi.
Tuy nhiên, nếu script của bạn chứa các thành phần tùy chỉnh—chẳng hạn như trình huấn luyện, trình đánh giá (validator), tập dữ liệu hoặc pipeline tăng cường tùy chỉnh—các đố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 trực tiếp script của mình bằng torch.distributed.run:
python -m torch.distributed.run --nproc_per_node 2 your_training_script.pyHuấn luyện trên AMD GPU 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 AMD integration guide để biết hướng dẫn cài đặt và trạng thái hỗ trợ hiện tại cho MIGraphX, DirectML và Ryzen AI NPU.
Huấn luyện trên Intel GPU sử dụng device=xpu:0, hoặc nhiều ID XPU với bản build PyTorch cung cấp XCCL.
Huấn luyện trên NPU Huawei Ascend#
Ultralytics hỗ trợ huấn luyện và đánh giá trên các 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 lẫn nhau bằng cách làm theo Ascend Extension for PyTorch installation guide, sau đó nguồn hóa môi trường CANN trước khi khởi động Ultralytics:
source /usr/local/Ascend/ascend-toolkit/set_env.shfrom ultralytics import YOLO
model = YOLO("yolo26n.pt")
# Train on one Ascend NPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="npu:0")
# Train across two Ascend NPUs with 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, đánh giá, tạo checkpoint và tiếp tục huấn luyện, sử dụng NPU đang hoạt động. AutoBatch khả dụng cho việc huấn luyện trên một NPU duy nhất, trong khi nhiều ID NPU sẽ khởi chạy quá trình huấn luyện phân tán thông qua HCCL. Xem Huawei Ascend integration guide để xuất mô hình và triển khai sau khi huấn luyện.
Huấn luyện trên GPU nhàn rỗi#
Huấn luyện trên GPU nhàn rỗi cho phép tự động chọn các GPU ít được sử dụng nhất trong các hệ thống đa GPU, tối ưu hóa 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 số liệu sử dụng và dung lượng VRAM còn trống.
Để tự động chọn và sử dụng (các) GPU nhàn rỗi nhất cho việc huấn luyện, hãy sử dụng tham số thiết bị -1. Tính năng này đặc biệt hữu ích trong các môi trường điện toán chia sẻ hoặc máy chủ có nhiều người dùng.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train using the single most idle GPU
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device=-1)
# Train using the two most idle GPUs
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ó:
- Phần trăm sử dụng hiện tại thấp hơn
- Bộ nhớ khả dụng cao hơn (VRAM trống)
- Nhiệt độ và mức tiêu thụ điện năng thấp hơn
Tính năng này đặc biệt có giá trị trong môi trường tính 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. Nó tự động thích nghi với các điều kiện thay đổi của hệ thống, đả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 trên Apple Silicon MPS#
Với sự hỗ trợ cho 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 của mình trên các thiết bị sử dụng khung Metal Performance Shaders (MPS) mạnh mẽ. MPS cung cấp cách thức hiệu suất 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.
Để kích hoạt huấn luyện trên chip Apple silicon, bạn nên chỉ định 'mps' làm thiết bị của mình khi bắt đầu quá trình huấn luyện. Dưới đây là ví dụ về cách bạn có thể thực hiện điều này trong Python và thông qua dòng lệnh:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model with MPS
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Bằng cách tận dụng sức mạnh tính toán của các chip Apple silicon, điều này cho phép xử lý các tác vụ huấn luyện hiệu quả hơn. Để biết thêm hướng dẫn chi tiết và các tùy chọn cấu hình nâng cao, vui lòng tham khảo PyTorch MPS documentation.
Tiếp tục huấn luyện bị gián đoạn#
Tiếp tục huấn luyện từ trạng thái đã lưu trước đó là một tính năng quan trọng khi làm việc với các model deep learning. Điều này rất hữu ích trong nhiều trường hợp, chẳng hạn như khi quá trình huấn luyện bị gián đoạn bất ngờ, hoặc khi bạn muốn tiếp tục huấn luyện model với dữ liệu mới hoặc thêm nhiều epoch hơn.
Khi tiếp tục huấn luyện, Ultralytics YOLO tải trọng số từ mô hình được lưu gần nhất và đồng thời khôi phục trạng thái trình tối ưu hóa, bộ lập lịch learning rate và số epoch. Điều này cho phép bạn tiếp tục quá trình huấn luyện một cách liền mạch từ điểm dừng trước đó.
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 tệp .pt chứa trọng số mô hình đã đượ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à thông qua dòng lệnh:
from ultralytics import YOLO
# Load a model
model = YOLO("path/to/last.pt") # load a partially trained model
# Resume training
results = model.train(resume=True)Bằng cách thiết lập resume=True, hàm train sẽ tiếp tục huấn luyện từ điểm dừng trước đó, sử dụng trạng thái được lưu trong tệp 'path/to/last.pt'. Nếu đối số resume bị bỏ qua hoặc được đặt thành False, hàm train sẽ bắt đầu một phiên huấn luyện mới.
Hãy nhớ rằng các checkpoint được lưu vào cuối mỗi epoch theo mặc định, hoặc theo các khoảng thời gian cố định sử dụng đối số save_period, vì vậy bạn phải hoàn thành ít nhất 1 epoch để có thể tiếp tục một phiên huấn luyện.
Cài đặt huấn luyện#
Các thiết lập huấn luyện cho các mô hình YOLO bao gồm nhiều hyperparameter và cấu hình được sử dụng trong quá trình huấn luyện. Các thiết lập này ảnh hưởng đến hiệu suất, tốc độ và accuracy của mô hình. Các thiết lập huấn luyện chính bao gồm kích thước batch (batch size), tốc độ học (learning rate), độ quán tính (momentum) và trọng số suy giảm (weight decay). Ngoài ra, việc lựa chọn bộ tối ưu hóa, loss function và thành phần tập dữ liệu huấn luyện có thể tác động đến quá trình huấn luyện. Việc tinh chỉnh cẩn thận và thử nghiệm với các thiết lập này đóng vai trò quan trọng trong việc tối ưu hóa hiệu suất.
Trình tối ưu hóa MuSGD#
Trong YOLO26, MuSGD là một trình tối ưu hóa 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 kiểu Muon.
Nó được khuyến nghị cho các quá trình huấn luyện YOLO26 dài hơn và các bộ dữ liệu lớn hơn, nơi các cập nhật Muon trực giao có thể giúp ổn định quá trình tối ưu hóa.
Chỉ các trọng số tuyến tính 2D và bộ lọc tích chập 4D (được định hình lại thành 2D) nhận được bản cập nhật kiểu Muon cùng với SGD, trong khi tất cả các tham số khác, chẳng hạn như trọng số chuẩn hóa lô và các hệ số thiên vị, vẫn ở trên SGD tiêu chuẩn.
Khi sử dụng optimizer=auto, Ultralytics sẽ tự động chọn MuSGD cho các lượt huấn luyện dài hơn (thường khi số vòng lặp > 10000). Đối với các lượt ngắn hơn, trình huấn luyện sẽ quay lại sử dụng AdamW.
Ví dụ sử dụng:
yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGDXem phần triển khai trong ultralytics/optim/muon.py và logic tự động chọn trình tối ưu hóa trong BaseTrainer.build_optimizer.
| Đối số | Loại | Mặc định | Mô tả |
|---|---|---|---|
model | str | None | Chỉ định file model dùng để huấn luyện. Chấp nhận đường dẫn đến model được huấn luyện sẵn .pt hoặc file cấu hình .yaml. Rất cần thiết để xác định cấu trúc model hoặc khởi tạo trọng số. |
data | str | None | Đường dẫn đến YAML của tập dữ liệu (ví dụ: coco8.yaml), chứa các đường dẫn đến dữ liệu kiểm định, tên lớp và số lượng lớp. Tác vụ phân loại thay vào đó sẽ nhận một thư mục tập dữ liệu hoặc tên tập dữ liệu có sẵn (ví dụ: imagenet10). |
epochs | int | 100 | Tổng số epoch huấn luyện. Mỗi epoch đại diện cho một lần duyệt qua toàn bộ tập dữ liệu. Điều chỉnh giá trị này có thể ảnh hưởng đến thời gian huấn luyện và hiệu suất của model. |
time | float | None | Thời gian huấn luyện tối đa tính bằng giờ. Nếu được thiết lập, tham số này sẽ ghi đè đối số epochs, cho phép quá trình huấn luyện tự động dừng sau khoảng thời gian chỉ định. Hữu ích cho các kịch bản huấn luyện bị giới hạn thời gian. |
patience | int | 100 | Số lượng epoch chờ đợi mà không có sự cải thiện trong các số liệu xác thực trước khi dừng sớm (early stopping) quá trình huấn luyện. Giúp ngăn chặn hiện tượng quá khớp (overfitting) bằng cách dừng huấn luyện khi hiệu suất chững lại. |
batch | int hoặc float | 16 | Kích thước batch với ba chế độ: đặt dưới dạng số nguyên (ví dụ: batch=16), chế độ tự động cho 60% mức sử dụng bộ nhớ GPU (batch=-1) hoặc chế độ tự động với phân số sử dụng được chỉ định (batch=0.70). |
imgsz | int | 640 | Kích thước ảnh mục tiêu để huấn luyện. Ảnh được đổi kích thước thành hình vuông với các cạnh bằng giá trị đã chỉ định (nếu là rect=False), giữ nguyên tỷ lệ khung hình đối với các model YOLO nhưng không áp dụng cho RT-DETR. Ảnh hưởng đến độ chính xác và độ phức tạp tính toán của model. |
save | bool | True | Cho phép lưu các điểm kiểm tra (checkpoint) huấn luyện và trọng số model cuối cùng. Hữu ích cho việc tiếp tục huấn luyện hoặc triển khai model. |
save_period | int | -1 | Tần suất lưu checkpoint model, được chỉ định theo epoch. Giá trị -1 sẽ vô hiệu hóa tính năng này. Hữu ích để lưu các model trung gian trong các phiên huấn luyện dài. |
cache | bool | False | Cho phép lưu đệm (cache) ảnh tập dữ liệu vào bộ nhớ (True/ram), trên đĩa (disk) hoặc tắt tính năng này (False). Cải thiện tốc độ huấn luyện bằng cách giảm thao tác I/O đĩa đổi lại việc tăng mức sử dụng bộ nhớ. |
device | int hoặc str hoặc list | None | Chỉ định (các) thiết bị tính toán cho việc huấn luyện: một GPU đơn (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) hoặc tự động chọn GPU đang rảnh (device=-1) hoặc nhiều GPU đang rảnh (device=[-1,-1]). |
workers | int | 8 | Số luồng worker để nạp dữ liệu (trên 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à nạp vào model, đặc biệt hữu ích trong các thiết lập đa GPU. |
project | str | None | Tên của thư mục dự án nơi lưu trữ 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. |
name | str | None | Tên của lần chạy huấn luyện. Được sử dụng để tạo thư mục con bên trong thư mục dự án, nơi lưu trữ nhật ký huấn luyện và các kết quả đầu ra. |
exist_ok | bool | False | Nếu True, cho phép ghi đè thư mục dự án/tên hiện có. Hữu ích cho việc thử nghiệm lặp đi lặp lại mà không cần xóa các kết quả trước đó theo cách thủ công. |
save_dir | str | None | Chỉ định thư mục chính xác nơi lưu các kết quả chạy, ghi đè tổ hợp project/name. Đường dẫn được sử dụng nguyên trạng mà không tự động tăng số thứ tự, do đó các lần chạy liên tiếp sẽ sử dụng lại cùng một thư mục. |
pretrained | bool hoặc str | True | Xác định xem có bắt đầu huấn luyện từ trọng số được huấn luyện sẵn hay không. Có thể là giá trị boolean hoặc đường dẫn chuỗi tới trọng số cần tải. pretrained=False tiến hành huấn luyện từ các 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_remap | bool | True | Khi fine-tune trên các dataset khác nhau, sao chép các hàng head phân loại đã pretrained vào model mới bất cứ khi nào tên class khớp nhau, do đó các class trùng lặp giữ nguyên độ lệch đã học cùng với trọng số của chúng khi chiều rộng head không đổi. Áp dụng cho dù số lượng class khác nhau hay trùng khớp với thứ tự class khác. |
optimizer | str | 'auto' | Lựa chọn trình tối ưu hóa (optimizer) cho việc huấn luyện. Các tùy chọn bao gồm SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam, RMSProp hoặc auto để tự động lựa chọn dựa trên cấu hình model. Ảnh hưởng đến tốc độ hội tụ và độ ổn định. |
seed | int | 0 | Đặt hạt giống ngẫu nhiên cho huấn luyện, đảm bảo khả năng tái lập kết quả qua các lần chạy với cùng cấu hình. |
deterministic | bool | True | Buộ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 suất và tốc độ do hạn chế đối với các thuật toán phi tất định. |
verbose | bool | True | Bật đầu ra chi tiết trong quá trình huấn luyện, hiển thị thanh tiến trình, các số liệu theo từng epoch và thông tin huấn luyện bổ sung trong bảng điều khiển. |
single_cls | bool | False | Xử lý tất cả các lớp trong bộ dữ liệu đa lớp thành 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. |
classes | list[int] | None | Chỉ định danh sách ID các lớp để 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. |
rect | bool | False | Bật chiến lược padding tối thiểu — các ảnh trong một batch được padding tối thiểu để đạ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 có thể ảnh hưởng đến độ chính xác của model. |
multi_scale | float | 0.0 | Biến đổi ngẫu nhiên imgsz cho mỗi batch bằng +/- multi_scale (ví dụ: 0.25 -> 0.75x đến 1.25x), làm tròn thành các bội số của sải bước (stride) model; 0.0 tắt tính năng huấn luyện đa tỷ lệ (multi-scale). |
cos_lr | bool | False | Sử dụng bộ lập lịch tốc độ học theo đường cong cosine, điều chỉnh tốc độ học theo đường cong cosine qua các epoch. Giúp quản lý tốc độ học để đạt độ hội tụ tốt hơn. |
close_mosaic | int | 10 | Tắt tăng cường dữ liệu mosaic trong N epoch cuối cùng để ổn định quá trình huấn luyện trước khi hoàn tất. Đặt giá trị thành 0 sẽ tắt tính năng này. |
resume | bool | False | Tiế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 bộ tối ưu hóa và số epoch, giúp quá trình huấn luyện tiếp diễn liền mạch. |
amp | bool | True | Bật huấn luyện Hỗn hợp độ chính xác tự động (AMP), giúp giảm mức sử dụng bộ nhớ và có khả năng tăng tốc độ huấn luyện với tác động tối thiểu đến độ chính xác. |
fraction | float | 1.0 | Chỉ định tỷ lệ của bộ dữ liệu để sử dụng cho việc huấn luyện. Cho phép huấn luyện trên một tập hợp con của toàn bộ dữ liệu, hữu ích cho các thử nghiệm hoặc khi tài nguyên bị giới hạn. |
profile | bool | False | Bật tính năng profiling tốc độ ONNX và TensorRT trong quá trình huấn luyện, hữu ích cho việc tối ưu hóa triển khai model. |
freeze | int hoặc list | None | Đóng băng (freeze) N lớp đầu tiên của model hoặc các lớp được chỉ định theo chỉ mục, làm giảm số lượng tham số có thể huấn luyện. Hữu ích cho việc tinh chỉnh (fine-tuning) hoặc học chuyển giao (transfer learning). |
lr0 | float | 0.01 | Tốc độ học ban đầu (tức là SGD=1E-2, Adam=1E-3). Điều chỉnh giá trị này là tối quan trọng đối với quá trình tối ưu hóa, ảnh hưởng đến tốc độ cập nhật trọng số model. |
lrf | float | 0.01 | Tốc độ học cuối cùng dưới dạng phân số của tốc độ ban đầu = (lr0 * lrf), được sử dụng kết hợp với các bộ lập lịch để điều chỉnh tốc độ học theo thời gian. |
momentum | float | 0.937 | Hệ số động lượng (momentum) cho SGD hoặc beta1 cho các trình tối ưu hóa Adam, ảnh hưởng đến việc kết hợp các gradient trước đó vào bản cập nhật hiện tại. |
weight_decay | float | 0.0005 | Thành phần điều chuẩn (regularization) L2, xử phạt các trọng số lớn để ngăn chặn hiện tượng quá khớp. |
warmup_epochs | float | 3.0 | Số lượng epoch cho quá trình khởi động (warmup) tốc độ học, tăng dần tốc độ học từ một giá trị thấp lên tốc độ học ban đầu để ổn định quá trình huấn luyện ngay từ đầu. |
warmup_momentum | float | 0.8 | Động lượng ban đầu cho giai đoạn khởi động, điều chỉnh dần dần về động lượng đã thiết lập trong suốt thời gian khởi động. |
warmup_bias_lr | float | 0.1 | Tốc độ học cho các tham số bias trong giai đoạn khởi động, giúp ổn định quá trình huấn luyện model trong các epoch đầu tiên. |
distill_model | str | None | Đường dẫn đến điểm kiểm tra của model giáo viên (ví dụ: yolo26x.pt) phục vụ chưng cất kiến thức (knowledge distillation). Khi được thiết lập, model học sinh sẽ được huấn luyện với một tổn thất chưng cất bổ sung được dẫn dắt bởi model giáo viên đã đóng băng. |
dis | float | 6.0 | Trọng số của hàm mất mát chưng cất được thêm vào các hàm mất mát phát hiện tiêu chuẩn. Các giá trị cao hơn sẽ làm tăng ảnh hưởng từ sự dẫn dắt đặc trưng của giáo viên. |
box | float | 7.5 | Trọng số của thành phần tổn thất hộp trong hàm mất mát, ảnh hưởng đến mức độ tập trung vào việc dự đoán chính xác tọa độ hộp bao (bounding box). |
cls | float | 0.5 | Trọng số của loss phân loại trong hàm loss tổng, ảnh hưởng đến tầm 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_pw | float | 0.0 | Số mũ cho trọng số lớp nhằm xử lý mất cân bằng lớp bằng cách sử dụng tần suất lớp nghịch đảo. 0.0 tắt trọng số lớp, 1.0 áp dụng trọng số tần suất nghịch đảo hoàn toàn. Các giá trị từ 0 đến 1 cung cấp trọng số một phần. |
dfl | float | 1.5 | Trọng số của distribution focal loss (DFL), một thành phần định vị bounding box giúp hồi quy khoảng cách các cạnh của hộp. |
pose | float | 12.0 | Trọng số của loss pose trong các model được huấn luyện cho tác vụ ước tính tư thế (pose estimation), ảnh hưởng đến sự chú trọng vào việc dự đoán chính xác các điểm mấu chốt của tư thế. |
kobj | float | 1.0 | Trọng số của loss objectness cho keypoint trong các model ước tính tư thế, cân bằng độ tin cậy phát hiện với độ chính xác của tư thế. |
rle | float | 1.0 | Trọng số của loss ước tính log-likelihood thặng dư trong các model ước tính tư thế, ảnh hưởng đến độ chính xác của việc định vị điểm mấu chốt. |
angle | float | 1.0 | Trọng số của loss góc trong các model obb, ảnh hưởng đến độ chính xác của các dự đoán góc bounding box xoay. |
dlog | float | 1.0 | Trọng số của hàm loss logarithmic bất biến theo tỷ lệ (SILog) trong các model ước lượng độ sâu, thuật ngữ chính thúc đẩy độ chính xác độ sâu. |
dgrad | float | 0.5 | Trọng số của hàm loss gradient trong các model ước lượng độ sâu, phạt các lỗi ở biên độ sâu và khuyến khích ranh giới bề mặt sắc nét hơn. |
dlam | float | 1.0 | Hệ số tập trung phương sai của tổn thất SILog trong các model ước tính độ sâu. 1.0 làm cho tổn thất bất biến theo tỷ lệ hoàn toàn, trong khi 0.0 rút gọn nó thành log-RMSE thông thường. |
nbs | int | 64 | Kích thước batch danh định cho việc chuẩn hóa loss. |
overlap_mask | bool | True | Xác định xem các mask đối tượng nên được hợp nhất thành một mask duy nhất cho việc huấn luyện hay giữ riêng biệt cho từng đối tượng. Trong trường hợp chồng chéo, mask nhỏ hơn sẽ được phủ lên trên mask lớn hơn trong quá trình hợp nhất. |
mask_ratio | int | 4 | Tỷ lệ downsample cho các mask phân đoạn, ảnh hưởng đến độ phân giải của các mask được sử dụng trong quá trình huấn luyện. |
dropout | float | 0.0 | Tỷ lệ dropout cho regularization trong các tác vụ phân loại, ngăn chặn quá khớp bằng cách loại bỏ ngẫu nhiên các đơn vị trong quá trình huấn luyện. |
val | bool | True | Bật tính năng xác thực (validation) trong quá trình huấn luyện, cho phép đánh giá định kỳ hiệu suất của model trên một bộ dữ liệu riêng biệt. |
plots | bool | True | Tạo và lưu các biểu đồ về số liệu huấn luyện và xác thực, cũng như các ví dụ dự đoán, cung cấp thông tin trực quan về hiệu suất của model và tiến trình học tập. |
compile | bool hoặc str | False | Bật biên dịch đồ thị torch.compile của PyTorch 2.x với backend='inductor'. Chấp nhận True → "default", False → tắt, hoặc chế độ chuỗi như "default", "reduce-overhead", "max-autotune-no-cudagraphs". Chuyển về chế độ eager kèm theo cảnh báo nếu không được hỗ trợ. |
channels_last | bool | False | Sử dụng định dạng bộ nhớ channels_last (NHWC) cho các phép tích chập trong quá trình training, giúp tăng tốc các GPU CUDA Tensor Core mà không làm thay đổi kết quả. Tự động bỏ qua trên CPU và MPS, nơi định dạng này không mang lại lợi ích. |
max_det | int | 300 | Chỉ định số lượng đối tượng tối đa được giữ lại trong giai đoạn xác thực của quá trình huấn luyện. |
Đối số batch có thể được cấu hình theo ba cách:
- Fixed Batch Size: Đặt một giá trị số nguyên (ví dụ:
batch=16), chỉ định trực tiếp số lượng ảnh trong mỗi batch. - Auto Mode (60% GPU Memory): Sử dụng
batch=-1để tự động điều chỉnh kích thước batch cho mức sử dụng bộ nhớ CUDA khoảng 60%. - Auto Mode with Utilization Fraction: Đặt một giá trị phân số (ví dụ:
batch=0.70) để điều chỉnh kích thước batch dựa trên phân số chỉ định của việc sử dụng bộ nhớ GPU. - Tự động thử lại khi OOM: Nếu xảy ra lỗi hết bộ nhớ CUDA trong epoch đầu tiên, trainer sẽ tự động giảm một nửa kích thước batch và thử lại (tối đa 3 lần). Điều này chỉ áp dụng cho huấn luyện single-GPU; huấn luyện multi-GPU (DDP) sẽ báo lỗi ngay lập tức.
Cài đặt Augmentation và Siêu tham số#
Các kỹ thuật tăng cường dữ liệu là yếu tố cần thiết để cải thiện tính mạnh mẽ và hiệu suất của các mô hình YOLO bằng cách đưa tính biến đổi vào training data, giúp mô hình khái quát hóa tốt hơn đối với dữ liệu chưa từng thấy. Bảng sau đây phác thảo mục đích và hiệu quả của từng đối số tăng cường dữ liệu:
| Đối số | Loại | Mặc định | Các tác vụ được hỗ trợ | Phạm vi | Mô tả |
|---|---|---|---|---|---|
hsv_h | float | 0.015 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Điều chỉnh màu sắc (hue) của hình ảnh theo một phần của vòng màu, đưa vào sự biến đổi về màu sắc. Giúp model tổng quát hóa trong các điều kiện ánh sáng khác nhau. |
hsv_s | float | 0.7 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Thay đổi độ bão hòa (saturation) của hình ảnh theo một tỷ lệ, ảnh hưởng đến cường độ của màu sắc. Hữu ích để mô phỏng các điều kiện môi trường khác nhau. |
hsv_v | float | 0.4 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Thay đổi giá trị (độ sáng - brightness) của hình ảnh theo một tỷ lệ, giúp model hoạt động tốt trong các điều kiện ánh sáng khác nhau. |
degrees | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 180 | Xoay ảnh ngẫu nhiên trong phạm vi độ được chỉ định, giúp cải thiện khả năng nhận diện đối tượng của model ở các hướng khác nhau. |
translate | float | 0.1 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Dịch chuyển ảnh theo chiều ngang và dọc dựa trên một phần kích thước ảnh, hỗ trợ việc học cách phát hiện các đối tượng bị che khuất một phần. |
scale | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0 - 1 | Thay đổi tỷ lệ ảnh theo hệ số tăng, mô phỏng các đối tượng ở những khoảng cách khác nhau so với camera. |
shear | float | 0 | detect, segment, semantic, depth, pose, obb | -180 - +180 | Cắt nghiêng ảnh theo một độ nhất định, bắt chước hiệu ứng khi đối tượng được quan sát từ các góc độ khác nhau. |
perspective | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 0.001 | Áp dụng biến đổi phối cảnh ngẫu nhiên lên ảnh, nâng cao khả năng hiểu các đối tượng trong không gian 3D của model. |
flipud | float | 0 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Lật ngược ảnh theo chiều dọc với xác suất được chỉ định, giúp tăng độ biến thiên dữ liệu mà không làm ảnh hưởng đến đặc điểm của đối tượng. |
fliplr | float | 0.5 | detect, segment, semantic, depth, classify, pose, obb | 0.0 - 1.0 | Lật ảnh từ trái sang phải với xác suất được chỉ định, hữu ích cho việc học các đối tượng đối xứng và tăng sự đa dạng cho tập dữ liệu. |
bgr | float | 0 | detect, segment, semantic, depth, pose, obb | 0.0 - 1.0 | Đổi kênh màu của ảnh từ RGB sang BGR với xác suất được chỉ định, hữu ích để tăng tính ổn định đối với các trường hợp thứ tự kênh không chính xác. |
mosaic | float | 1 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Kế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 đối tượng khác nhau. Rất hiệu quả cho việc hiểu các cảnh phức tạp. |
mixup | float | 0 | detect, segment, semantic, pose, obb | 0.0 - 1.0 | Trộn hai ảnh và nhãn tương ứng của chúng để tạo thành một ảnh hỗn hợp. Cải thiện khả năng khái quát hóa của model bằng cách đưa vào nhiễu nhãn và biến thiên hình ảnh. |
cutmix | float | 0 | detect, segment, pose, obb | 0.0 - 1.0 | Kết hợp các phần của hai ảnh, tạo ra một sự trộn lẫn cục bộ trong khi vẫn duy trì các vùng riêng biệt. Nâng cao độ bền của model bằng cách tạo ra các tình huống che khuất. |
copy_paste | float | 0 | segment | 0.0 - 1.0 | Sao chép và dán các đối tượng qua lại giữa các ảnh để tăng số lượng đối tượng hiện diện. |
copy_paste_mode | str | flip | segment | - | Chỉ định chiến lược copy-paste cần sử dụng. Các tùy chọn bao gồm 'flip' và 'mixup'. |
auto_augment | str | randaugment | classify | - | Áp dụng một chính sách tăng cường dữ liệu được xác định trước ('randaugment', 'autoaugment' hoặc 'augmix') để nâng cao hiệu suất model thông qua sự đa dạng trực quan. |
erasing | float | 0.4 | classify | 0.0 - 1.0 | Xóa ngẫu nhiên các vùng của ảnh trong quá trình huấn luyện để khuyến khích model tập trung vào các đặc trưng ít rõ ràng hơn. |
augmentations | list | None | detect, segment, semantic, pose, obb | - | Các phép biến đổi Albumentations tùy chỉnh cho việc tăng cường dữ liệu nâng cao (chỉ hỗ trợ Python API). Chấp nhận một danh sách các đối tượng biến đổi cho các nhu cầu tăng cường chuyên biệt. |
Những cài đặt này có thể được điều chỉnh để đáp ứng các yêu cầu cụ thể của tập dữ liệu và tác vụ hiện tại. Thử nghiệm với các giá trị khác nhau có thể giúp tìm ra chiến lược tăng cường tối ưu nhất mang lại hiệu suất model tốt nhất.
Để biết thêm thông tin về các hoạt động tăng cường dữ liệu huấn luyện, hãy xem reference section.
Ghi nhật ký (Logging)#
Khi huấn luyện một mô hình YOLO26, bạn có thể thấy việc theo dõi hiệu suất của mô hình theo thời gian là rất hữu ích. Đây là lúc các trình ghi nhật ký (logger) phát huy tác dụng. Ultralytics YOLO hỗ trợ ba loại logger - Comet, ClearML và TensorBoard.
Để sử dụng một công cụ ghi nhật ký, hãy chọn nó từ menu thả xuống trong đoạn mã ở trên và chạy lệnh. Công cụ được chọn sẽ được cài đặt và khởi tạo.
Comet#
Comet là một nền tảng cho phép các nhà khoa học dữ liệu và lập trình viê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ư mô hình. Nó cung cấp các tính năng như số liệu thời gian thực, sự khác biệt mã nguồn (code diffs) và theo dõi hyperparameter.
Để sử dụng Comet:
# pip install comet_ml
import comet_ml
comet_ml.init()Hãy nhớ đăng nhập vào tài khoản Comet của bạn trên trang web của họ để lấy API key. Bạn sẽ cần thêm key này vào các biến môi trường hoặc script của mình để ghi nhật ký các thử nghiệm.
ClearML#
ClearML là một nền tảng mã nguồn mở tự động hóa việc theo dõi các thí nghiệm và hỗ trợ chia sẻ tài nguyên hiệu quả. Nó được thiết kế để giúp các nhóm quản lý, thực thi và tái tạo công việc ML của họ một cách hiệu quả hơn.
Để sử dụng ClearML:
# pip install clearml
import clearml
clearml.browser_login()Sau khi chạy script này, bạn sẽ cần đăng nhập vào tài khoản ClearML của mình 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. Nó cho phép bạn trực quan hóa biểu đồ TensorFlow của mình, vẽ biểu đồ các số liệu định lượng về việc thực thi biểu đồ và hiển thị dữ liệu bổ sung như hình ảnh đi qua nó.
Để sử dụng TensorBoard trong Google Colab:
load_ext tensorboard
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryĐể sử dụng TensorBoard cục bộ, hãy chạy lệnh dưới đây và xem kết quả tại localhost:6006.
tensorboard --logdir ultralytics/runs # replace with 'runs' directoryLệnh này sẽ tải TensorBoard và trỏ nó đến thư mục nơi các nhật ký huấn luyện của bạn được lưu.
Sau khi thiết lập công cụ ghi nhật ký, bạn có thể tiến hành huấn luyện model. Tất cả các chỉ số huấn luyện sẽ được tự động ghi lại trên nền tảng bạn đã chọn, và bạn có thể truy cập các nhật ký này để theo dõi hiệu suất của model theo thời gian, so sánh các model khác nhau, và xác định các lĩnh vực cần cải thiện.
Các bước tiếp theo#
Validate mô hình đã huấn luyện của bạn dựa trên dữ liệu chưa từng thấy (held-out data) để kiểm tra độ chính xác trong thế giới thực, sau đó export nó sang ONNX, TensorRT hoặc định dạng triển khai khác. Huấn luyện trên dữ liệu của riêng bạn thay vì COCO8? Hãy định dạng nó trước bằng Datasets guide.
Câu hỏi thường gặp#
Tôi có thể huấn luyện mà không cần GPU cục bộ không?#
Có. Ultralytics Platform cloud training bao gồm các tín dụng miễn phí để bắt đầu. Tải lên tập dữ liệu của bạn, chọn một mô hình và GPU, và huấn luyện trực tiếp từ trình duyệt.
Làm cách nào để huấn luyện một mô hình object detection bằng Ultralytics YOLO26?#
Để huấn luyện một model phát hiện đối tượng sử dụng Ultralytics YOLO26, bạn có thể sử dụng Python API hoặc CLI. Dưới đây là ví dụ cho cả hai:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="coco8.yaml", epochs=100, imgsz=640)Để biết thêm chi tiết, vui lòng tham khảo phần Train Settings.
Các tính năng chính của chế độ huấn luyện (Train mode) trong Ultralytics YOLO26 là gì?#
Các tính năng chính của chế độ huấn luyện trong Ultralytics YOLO26 bao gồm:
- Tự động tải xuống tập dữ liệu: Tự động tải xuống các tập dữ liệu tiêu chuẩn như COCO, VOC, và ImageNet.
- Hỗ trợ nhiều GPU: Mở rộng quy mô 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 các siêu tham số thông qua tệp YAML hoặc các tham số CLI.
- Trực quan hóa và Giám sát: Theo dõi thời gian thực các chỉ số huấn luyện để có thông tin chi tiết tốt hơn.
Các tính năng này giúp việc huấn luyện trở nê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 Key Features of Train Mode.
Làm thế nào để tôi tiếp tục huấn luyện từ một phiên bị gián đoạn trong Ultralytics YOLO26?#
Để 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.
from ultralytics import YOLO
# Load the partially trained model
model = YOLO("path/to/last.pt")
# Resume training
results = model.train(resume=True)Kiểm tra phần về Resuming Interrupted Trainings để biết thêm thông tin.
Làm thế nào để tôi huấn luyện một model trên tập dữ liệu bị mất cân bằng?#
Mất cân bằng lớp (class imbalance) 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 của bạn. Điều này có thể khiến mô hình hoạt động kém hiệu quả trên các lớp hiếm. Ultralytics YOLO hỗ trợ trọng số lớp (class weighting) thông qua đối số cls_pw để giải quyết vấn đề này.
Đối số cls_pw kiểm soát sức mạnh trọng số lớp dựa trên tần suất lớp nghịch đảo:
cls_pw=0.0(mặc định): Vô hiệu hóa trọng số lớpcls_pw=1.0: Áp dụng trọng số tần suất nghịch đảo đầy đủ- Các giá trị nằm trong khoảng từ
0.0đến1.0: Cung cấp trọng số một phần cho tình trạng mất cân bằng vừa phải
Trọng số lớp được tính toán dưới dạng (1.0 / class_counts) ^ cls_pw và được chuẩn hóa sao cho giá trị trung bình của chúng bằng 1.0.
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n.pt")
# Train with full class weighting for severely imbalanced data
results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=1.0)
# Or use partial weighting (0.25) for moderate imbalance
results = model.train(data="custom.yaml", epochs=100, imgsz=640, cls_pw=0.25)Bắt đầu với cls_pw=0.25 cho các tập dữ liệu 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 kém hiệu quả. Bạn có thể kiểm tra trọng số lớp đã tính toán trong nhật ký huấn luyện để xác minh sự phân phối trọng số.
Tôi có thể huấn luyện model YOLO26 trên chip Apple silicon không?#
Có, Ultralytics YOLO26 hỗ trợ huấn luyện trên các chip Apple silicon sử dụng framework Metal Performance Shaders (MPS). Hãy chỉ định 'mps' làm thiết bị huấn luyện của bạn.
from ultralytics import YOLO
# Load a pretrained model
model = YOLO("yolo26n.pt")
# Train the model on Apple silicon chip (M1/M2/M3/M4)
results = model.train(data="coco8.yaml", epochs=100, imgsz=640, device="mps")Để biết thêm chi tiết, vui lòng tham khảo phần Apple Silicon MPS Training.
Các cài đặt huấn luyện phổ biến là gì, và làm thế nào để tôi cấu hình chúng?#
Ultralytics YOLO26 cho phép bạn cấu hình nhiều cài đặt huấn luyện khác nhau như kích thước batch, tốc độ học (learning rate), số epoch, và nhiều cài đặt khác thông qua các tham số. Dưới đây là tổng quan ngắn gọn:
| Đối số | Mặc định | Mô tả |
|---|---|---|
model | None | Đường dẫn đến tệp model để huấn luyện. |
data | None | Đường dẫn đến YAML của tập dữ liệu (ví dụ: coco8.yaml), hoặc một thư mục hoặc tên tập dữ liệu (ví dụ: imagenet10) dùng cho việc phân loại. |
epochs | 100 | Tổng số epoch huấn luyện. |
batch | 16 | Kích thước batch, có thể điều chỉnh dưới dạng số nguyên hoặc chế độ tự động. |
imgsz | 640 | Kích thước ảnh mục tiêu để huấn luyện. |
device | None | (Các) thiết bị tính toán dùng cho việc huấn luyện như cpu, 0, 0,1 hoặc mps. |
save | True | Cho phép lưu lại các checkpoint huấn luyện và trọng số model cuối cùng. |
Để có hướng dẫn chi tiết về các thiết lập huấn luyện, hãy xem phần Train Settings.