YOLO Vision 2026:

Tinh chỉnh siêu tham số hiệu quả với Ray Tune và YOLO26#

Tinh chỉnh siêu tham số là yếu tố quan trọng để đạt hiệu năng model tối đa bằng cách tìm ra tập siêu tham số tối ưu. Quy trình này bao gồm việc chạy các trial với những siêu tham số khác nhau và đánh giá hiệu năng của từng trial.

Tăng tốc tinh chỉnh với Ultralytics YOLO26 và Ray Tune#

Ultralytics YOLO26 tích hợp Ray Tune để tinh chỉnh siêu tham số, đơn giản hóa việc tối ưu hóa các siêu tham số của model YOLO26. Với Ray Tune, bạn có thể sử dụng các chiến lược tìm kiếm nâng cao, khả năng chạy song song và dừng sớm để đẩy nhanh quá trình tinh chỉnh.

Ray Tune#

Ray Tune hyperparameter optimization workflow

Ray Tune là thư viện tinh chỉnh siêu tham số được thiết kế nhằm đạt hiệu quả và tính linh hoạt cao. Thư viện này hỗ trợ nhiều chiến lược tìm kiếm, khả năng chạy song song và các chiến lược dừng sớm, đồng thời tích hợp liền mạch với các framework machine learning phổ biến, bao gồm Ultralytics YOLO26.

Tích hợp với Weights & Biases#

YOLO26 cũng cho phép tích hợp tùy chọn với Weights & Biases để giám sát quá trình tinh chỉnh.

Cài đặt#

Để cài đặt các package bắt buộc, hãy chạy:

Cài đặt
# Install and update Ultralytics and Ray Tune packages
pip install -U ultralytics "ray[tune]" optuna

# Optionally install and enable W&B for per-trial logging
pip install wandb
yolo settings wandb=True

Cách sử dụng#

Cách sử dụng
from ultralytics import YOLO

# Load a YOLO26n model
model = YOLO("yolo26n.pt")

# Start tuning hyperparameters for YOLO26n training on the COCO8 dataset
result_grid = model.tune(data="coco8.yaml", use_ray=True)

Tham số của phương thức tune()#

Phương thức tune() trong YOLO26 cung cấp interface dễ sử dụng để tinh chỉnh siêu tham số với Ray Tune. Phương thức này chấp nhận một số đối số cho phép bạn tùy chỉnh quá trình tinh chỉnh. Dưới đây là giải thích chi tiết cho từng tham số:

ParameterKiểuMô tảGiá trị mặc định
datastrYAML của dataset để chạy tuner, trong đó chỉ định đường dẫn đến dữ liệu validation và dữ liệu training cùng các thiết lập riêng khác của dataset. Với bài toán classification, tham số này nhận thư mục dataset hoặc tên dataset tích hợp sẵn (ví dụ: imagenet10).
spacedict, optionalMột dictionary định nghĩa không gian tìm kiếm siêu tham số cho Ray Tune. Mỗi key tương ứng với tên một siêu tham số, còn value chỉ định khoảng giá trị cần khám phá trong quá trình tinh chỉnh. Nếu không được cung cấp, YOLO26 sẽ sử dụng không gian tìm kiếm mặc định với nhiều siêu tham số khác nhau.
grace_periodint, optionalThời gian ân hạn tính theo epoch cho bộ lập lịch ASHA trong Ray Tune. Bộ lập lịch sẽ không dừng bất kỳ trial nào trước số epoch này, cho phép model trải qua tối thiểu một khoảng training trước khi quyết định dừng sớm.10
gpu_per_trialint, optionalSố GPU mà Ray phân bổ cho mỗi trial. Hãy thiết lập rõ ràng tham số này để sử dụng training trên GPU; nếu bỏ qua, các trial sẽ không được cấp tài nguyên GPU.None
iterationsint, optionalSố trial tối đa cần chạy trong quá trình tinh chỉnh. Tham số này giúp kiểm soát tổng số tổ hợp siêu tham số được kiểm thử, đảm bảo quá trình tinh chỉnh không chạy vô hạn.300
search_algstr or Searcher, optionalChiến lược tìm kiếm Ray Tune cần sử dụng. Bạn có thể truyền trực tiếp một object searcher của Ray hoặc sử dụng chuỗi được hỗ trợ như optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax hoặc random. Các searcher dạng chuỗi tự động sử dụng metric mặc định của task và mode="max". Mặc định sử dụng TPE đa biến của Optuna với các đề xuất nhận biết khả năng chạy song song."optuna"
**train_argsdict, optionalCác đối số bổ sung truyền cho phương thức train() trong quá trình tinh chỉnh. Những đối số này có thể bao gồm các thiết lập như số epoch training, batch size và các cấu hình khác dành riêng cho training.{}

Bằng cách tùy chỉnh các tham số này, bạn có thể tinh chỉnh quy trình tối ưu hóa siêu tham số cho phù hợp với nhu cầu cụ thể và tài nguyên tính toán hiện có.

Mô tả không gian tìm kiếm mặc định#

Bảng sau liệt kê các tham số không gian tìm kiếm mặc định để tinh chỉnh siêu tham số trong YOLO26 với Ray Tune. Mỗi tham số có một khoảng giá trị cụ thể được định nghĩa bởi tune.uniform().

ParameterPhạm viMô tả
lr0tune.uniform(1e-5, 1e-2)Learning rate ban đầu, kiểm soát kích thước bước trong quá trình tối ưu hóa. Giá trị cao hơn giúp training nhanh hơn nhưng có thể gây mất ổn định.
lrftune.uniform(0.01, 1.0)Hệ số learning rate cuối, xác định mức độ learning rate giảm xuống vào cuối quá trình training.
momentumtune.uniform(0.7, 0.98)Hệ số momentum cho optimizer, giúp tăng tốc training và vượt qua các cực tiểu cục bộ.
weight_decaytune.uniform(0.0, 0.001)Tham số regularization, ngăn overfitting bằng cách phạt các giá trị weight lớn.
warmup_epochstune.uniform(0.0, 5.0)Số epoch có learning rate tăng dần để ổn định giai đoạn training ban đầu.
warmup_momentumtune.uniform(0.0, 0.95)Giá trị momentum ban đầu, tăng dần trong giai đoạn warmup.
boxtune.uniform(1.0, 20.0)Trọng số của thành phần box loss, cân bằng độ chính xác localization của model.
clstune.uniform(0.1, 4.0)Trọng số của thành phần classification loss, cân bằng độ chính xác dự đoán class của model.
cls_pwtune.uniform(0.0, 1.0)Mức độ weighting cho class, từ tắt (0.0) đến weighting theo tần suất nghịch đảo hoàn toàn (1.0).
dfltune.uniform(0.4, 12.0)Trọng số của thành phần hồi quy khoảng cách box, nhấn mạnh việc localization bounding box chính xác.
hsv_htune.uniform(0.0, 0.1)Khoảng augmentation hue, tạo ra biến thiên màu sắc để giúp model tổng quát hóa.
hsv_stune.uniform(0.0, 0.9)Khoảng augmentation saturation, thay đổi cường độ màu để cải thiện độ robust.
hsv_vtune.uniform(0.0, 0.9)Khoảng augmentation value (độ sáng), giúp model hoạt động trong nhiều điều kiện ánh sáng khác nhau.
degreestune.uniform(0.0, 45.0)Khoảng augmentation rotation tính theo độ, cải thiện khả năng nhận dạng các object bị xoay.
translatetune.uniform(0.0, 0.9)Khoảng augmentation translation, dịch chuyển ảnh theo chiều ngang và chiều dọc.
scaletune.uniform(0.0, 0.95)Khoảng augmentation scaling, mô phỏng object ở các khoảng cách khác nhau.
sheartune.uniform(0.0, 10.0)Khoảng augmentation shear tính theo độ, mô phỏng các thay đổi phối cảnh.
perspectivetune.uniform(0.0, 0.001)Khoảng augmentation perspective, mô phỏng các thay đổi góc nhìn 3D.
flipudtune.uniform(0.0, 1.0)Xác suất augmentation lật dọc, giúp tăng tính đa dạng của dataset.
fliplrtune.uniform(0.0, 1.0)Xác suất augmentation lật ngang, hữu ích với các object đối xứng.
bgrtune.uniform(0.0, 1.0)Xác suất augmentation hoán đổi channel BGR, giúp model bất biến với màu sắc.
mosaictune.uniform(0.0, 1.0)Xác suất augmentation Mosaic, kết hợp bốn ảnh thành một sample training.
mixuptune.uniform(0.0, 1.0)Xác suất augmentation MixUp, trộn hai ảnh cùng các label tương ứng.
cutmixtune.uniform(0.0, 1.0)Xác suất augmentation CutMix, kết hợp các vùng ảnh trong khi vẫn duy trì các đặc trưng cục bộ.
copy_pastetune.uniform(0.0, 1.0)Ở chế độ flip, đây là tỷ lệ object đủ điều kiện được sao chép vào ảnh; ở chế độ mixup, đây cũng là xác suất thực hiện augmentation này.
close_mosaictune.randint(0, 11)Tắt Mosaic trong N epoch cuối để ổn định training trước khi hoàn tất.

Ví dụ về không gian tìm kiếm tùy chỉnh#

Trong ví dụ này, chúng ta minh họa cách sử dụng không gian tìm kiếm tùy chỉnh để tinh chỉnh siêu tham số với Ray Tune và YOLO26. Bằng cách cung cấp không gian tìm kiếm tùy chỉnh, bạn có thể tập trung quá trình tinh chỉnh vào những siêu tham số cụ thể cần quan tâm.

Cách sử dụng
from ray import tune

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Run Ray Tune on the model
result_grid = model.tune(
    data="coco8.yaml",
    space={"lr0": tune.uniform(1e-5, 1e-2)},
    epochs=50,
    use_ray=True,
)

Trong đoạn code trên, chúng ta tạo một model YOLO với pretrained weights "yolo26n.pt". Sau đó, chúng ta gọi phương thức tune(), chỉ định cấu hình dataset bằng "coco8.yaml". Chúng ta cung cấp không gian tìm kiếm tùy chỉnh cho learning rate ban đầu lr0 bằng một dictionary với key "lr0" và value tune.uniform(1e-5, 1e-2). Cuối cùng, chúng ta truyền các đối số training bổ sung, chẳng hạn như số epoch, trực tiếp vào phương thức tune dưới dạng epochs=50.

Ví dụ về thuật toán tìm kiếm#

Bạn có thể chọn chiến lược tìm kiếm Ray Tune theo tên. Với các thuật toán tìm kiếm dạng chuỗi, Ultralytics sẽ tự động sử dụng metric tối ưu hóa mặc định của task hiện tại và mode="max". Nếu không cung cấp search_alg, Ultralytics sẽ sử dụng TPE đa biến của Optuna với các đề xuất nhận biết khả năng chạy song song.

Sử dụng `search_alg` dạng chuỗi với `model.tune()`
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg="optuna",
    use_ray=True,
)

Nếu cần tùy chỉnh sampler của searcher hoặc ghi đè metric và chế độ tối ưu hóa, hãy truyền một object searcher Ray Tune đã được khởi tạo thay vì một chuỗi.

Sử dụng object `OptunaSearch` với `model.tune()`
from ray.tune.search.optuna import OptunaSearch

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Define a searcher
searcher = OptunaSearch(
    metric="metrics/mAP50-95(B)",
    mode="max",
)

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg=searcher,
    use_ray=True,
)

Tiếp tục phiên tinh chỉnh siêu tham số bị gián đoạn với Ray Tune#

Bạn có thể tiếp tục một phiên Ray Tune bị gián đoạn bằng cách truyền resume=True. Bạn cũng có thể tùy chọn truyền thư mục name được Ray Tune sử dụng trong runs/{task} để tiếp tục. Nếu không, phiên bị gián đoạn gần nhất sẽ được tiếp tục. Bạn không cần cung cấp lại iterationsspace, nhưng cần cung cấp lại các đối số training còn lại, bao gồm dataepochs.

Sử dụng `resume=True` với `model.tune()`
from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolo26n.pt")

# Resume previous run
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# Resume Ray Tune run with name 'tune_exp_2'
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, name="tune_exp_2", resume=True)

Xử lý kết quả Ray Tune#

Sau khi chạy một thử nghiệm tinh chỉnh siêu tham số với Ray Tune, bạn có thể muốn thực hiện nhiều phân tích khác nhau trên các kết quả thu được. Hướng dẫn này sẽ trình bày các quy trình phổ biến để xử lý và phân tích những kết quả đó.

Tải kết quả thử nghiệm Tune từ một thư mục#

model.tune(use_ray=True) trả về một Ray ResultGrid và lưu thí nghiệm dưới runs/{task}/tune, hoặc dưới name mà bạn đã truyền vào. Để tải lại các kết quả đó sau khi script ban đầu đã kết thúc, hãy khôi phục phiên làm việc, thao tác này sẽ khôi phục các thử nghiệm đã lưu và trả về cùng một ResultGrid:

from ultralytics import YOLO

model = YOLO("yolo26n.pt")
result_grid = model.tune(data="coco8.yaml", epochs=50, use_ray=True, resume=True)

Phân tích cơ bản ở cấp độ thử nghiệm#

Có được tổng quan về hiệu suất của các trial. Bạn có thể nhanh chóng kiểm tra xem có lỗi nào xảy ra trong các trial hay không.

if result_grid.errors:
    print("One or more trials failed!")
else:
    print("No errors!")

Phân tích cơ bản ở cấp độ trial#

Truy cập các cấu hình siêu tham số và metric được báo cáo gần nhất của từng trial.

for i, result in enumerate(result_grid):
    print(f"Trial #{i}: Configuration: {result.config}, Last Reported Metrics: {result.metrics}")

Vẽ toàn bộ lịch sử metric được báo cáo cho một trial#

Bạn có thể vẽ lịch sử metric được báo cáo cho từng trial để xem metric thay đổi theo thời gian như thế nào.

import matplotlib.pyplot as plt

for i, result in enumerate(result_grid):
    plt.plot(
        result.metrics_dataframe["training_iteration"],
        result.metrics_dataframe["metrics/mAP50-95(B)"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("mAP50-95")
plt.legend()
plt.show()

Tóm tắt#

Trong hướng dẫn này, chúng ta đã trình bày các quy trình phổ biến để phân tích kết quả của những thử nghiệm chạy với Ray Tune bằng Ultralytics. Các bước chính bao gồm tải kết quả thử nghiệm từ một thư mục, thực hiện phân tích cơ bản ở cấp độ thử nghiệm và trial, đồng thời vẽ metric.

Tìm hiểu thêm trong trang tài liệu Analyze Results của Ray Tune để khai thác tối đa các thử nghiệm tinh chỉnh siêu tham số.

FAQ#

  • Để tinh chỉnh siêu tham số của model Ultralytics YOLO26 bằng Ray Tune, hãy thực hiện các bước sau:

    1. Cài đặt các package cần thiết:

      pip install -U ultralytics "ray[tune]" optuna
      pip install wandb # optional for logging
      yolo settings wandb=True
    2. Tải model YOLO26 và bắt đầu tinh chỉnh:

      from ultralytics import YOLO
      
      # Load a YOLO26 model
      model = YOLO("yolo26n.pt")
      
      # Start tuning with the COCO8 dataset
      result_grid = model.tune(data="coco8.yaml", use_ray=True)

    Quy trình này sử dụng các chiến lược tìm kiếm nâng cao và khả năng chạy song song của Ray Tune để tối ưu hóa hiệu quả các siêu tham số của model. Để biết thêm thông tin, hãy xem tài liệu Ray Tune.

  • Ultralytics YOLO26 sử dụng các siêu tham số mặc định sau để tinh chỉnh với Ray Tune:

    ParameterPhạm vi giá trịMô tả
    lr0tune.uniform(1e-5, 1e-2)Learning rate ban đầu
    lrftune.uniform(0.01, 1.0)Hệ số learning rate cuối
    momentumtune.uniform(0.7, 0.98)Momentum
    weight_decaytune.uniform(0.0, 0.001)Weight decay
    warmup_epochstune.uniform(0.0, 5.0)Epoch warmup
    boxtune.uniform(1.0, 20.0)Trọng số box loss
    clstune.uniform(0.1, 4.0)Trọng số class loss
    cls_pwtune.uniform(0.0, 1.0)Mức độ weighting cho class
    dfltune.uniform(0.4, 12.0)Trọng số box-distance loss
    hsv_htune.uniform(0.0, 0.1)Khoảng augmentation hue
    translatetune.uniform(0.0, 0.9)Khoảng augmentation translation

    Bạn có thể tùy chỉnh các siêu tham số này cho phù hợp với nhu cầu cụ thể. Để xem danh sách đầy đủ và biết thêm chi tiết, hãy tham khảo hướng dẫn Tuning siêu tham số.

  • Để tích hợp Weights & Biases (W&B) vào quy trình tinh chỉnh Ultralytics YOLO26 của bạn:

    1. Cài đặt W&B:

      pip install wandb
      wandb login
      yolo settings wandb=True
    2. Chạy tuner:

      from ultralytics import YOLO
      
      # Load YOLO model
      model = YOLO("yolo26n.pt")
      
      # Each Ray trial creates its own W&B run in this project
      result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)

    Thiết lập này cho phép bạn giám sát quá trình tinh chỉnh, theo dõi các cấu hình siêu tham số và trực quan hóa kết quả trong W&B.

  • Ray Tune mang lại nhiều lợi ích cho việc tối ưu hóa siêu tham số:

    • Chiến lược tìm kiếm nâng cao: Sử dụng các thuật toán như Tối ưu hóa Bayesian và HyperOpt để tìm kiếm tham số hiệu quả.
    • Khả năng chạy song song: Hỗ trợ thực thi song song nhiều trial, giúp tăng tốc đáng kể quá trình tinh chỉnh.
    • Dừng sớm: Sử dụng các chiến lược như ASHA để sớm dừng những trial có hiệu suất kém, tiết kiệm tài nguyên tính toán.

    Ray Tune tích hợp liền mạch với Ultralytics YOLO26, cung cấp interface dễ sử dụng để tinh chỉnh siêu tham số hiệu quả. Để bắt đầu, hãy xem hướng dẫn Tuning siêu tham số.

  • Để định nghĩa không gian tìm kiếm tùy chỉnh cho quá trình tinh chỉnh siêu tham số YOLO26 bằng Ray Tune:

    from ray import tune
    
    from ultralytics import YOLO
    
    model = YOLO("yolo26n.pt")
    search_space = {"lr0": tune.uniform(1e-5, 1e-2), "momentum": tune.uniform(0.7, 0.98)}
    result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

    Thiết lập này tùy chỉnh khoảng giá trị của các siêu tham số như learning rate ban đầu và momentum cần được khám phá trong quá trình tinh chỉnh. Để xem các cấu hình nâng cao, hãy tham khảo phần Ví dụ về không gian tìm kiếm tùy chỉnh.

Bình luận