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ố sống còn để đạt được hiệu suất model tối ưu bằng cách tìm ra tập hợp siêu tham số tốt nhất. Quá trình này bao gồm việc chạy các thử nghiệm với những siêu tham số khác nhau và đánh giá hiệu suất của từng thử nghiệm.

Tăng tốc quá trình 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ố, giúp tối ưu hóa siêu tham số của model YOLO26 một cách tinh gọn. Với Ray Tune, bạn có thể tận dụng các chiến lược tìm kiếm nâng cao, khả năng tính toán song song và tính năng dừng sớm để đẩy nhanh quá trình tinh chỉnh.

Ray Tune

Ray Tune hyperparameter optimization workflow

Ray Tune là một thư viện tinh chỉnh siêu tham số được thiết kế để mang lại hiệu suất và sự linh hoạt. Thư viện này hỗ trợ nhiều chiến lược tìm kiếm, khả năng tính toán song song, chiến lược dừng sớm và tích hợp liền mạch với các framework machine learning phổ biến, bao gồm cả 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 gói cần thiết, hãy chạy:

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

# Optionally install W&B for logging
pip install wandb

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)

Các tham số của phương thức tune()

Phương thức tune() trong YOLO26 cung cấp một giao diện 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 về từng tham số:

Tham sốLoạiMô tảGiá trị mặc định
datastrTệp cấu hình tập dữ liệu (định dạng YAML) để chạy bộ tinh chỉnh. Tệp này cần chỉ định đường dẫn dữ liệu huấn luyện và validation data, cũng như các thiết lập cụ thể khác cho tập dữ liệu.
spacedict, optionalMột từ điển (dictionary) xác định không gian tìm kiếm siêu tham số cho Ray Tune. Mỗi khóa (key) tương ứng với tên siêu tham số và giá trị (value) xác định phạm vi 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 epochs cho ASHA scheduler trong Ray Tune. Bộ lập lịch sẽ không chấm dứt bất kỳ thử nghiệm nào trước số epoch này, cho phép model có thời gian huấn luyện tối thiểu trước khi đưa ra quyết định dừng sớm.10
gpu_per_trialint, optionalSố lượng GPU được phân bổ cho mỗi thử nghiệm trong quá trình tinh chỉnh. Điều này giúp quản lý việc sử dụng GPU, đặc biệt là trong các môi trường đa GPU. Nếu không được cung cấp, bộ tinh chỉnh sẽ sử dụng tất cả các GPU khả dụng.None
iterationsint, optionalSố lượng thử nghiệm tối đa được 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 tra, đảm bảo quá trình tinh chỉnh không chạy vô tận.10
search_algstr or Searcher, optionalChiến lược tìm kiếm của Ray Tune cần sử dụng. Bạn có thể truyền trực tiếp một đối tượng tìm kiếm của Ray hoặc sử dụng chuỗi hỗ trợ như optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax hoặc random. Các trình tìm kiếm dựa trên chuỗi sẽ tự động sử dụng metric tác vụ mặc định và mode="max". Nếu không được cung cấp, Ray Tune sẽ mặc định sử dụng chiến lược tìm kiếm ngẫu nhiên BasicVariantGenerator.None
**train_argsdict, optionalCác đối số bổ sung cần truyền vào phương thức train() trong quá trình tinh chỉnh. Các đối số này có thể bao gồm các cài đặt như số epoch huấn luyện, batch size và các cấu hình huấn luyện cụ thể khác.{}

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

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

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

Tham sốPhạm viMô tả
lr0tune.uniform(1e-5, 1e-2)Tốc độ học (learning rate) ban đầu điều khiển kích thước bước trong quá trình tối ưu hóa. Giá trị cao hơn giúp tăng tốc độ huấn luyện nhưng có thể gây mất ổn định.
lrftune.uniform(0.01, 1.0)Hệ số tốc độ học cuối cùng xác định mức độ giảm của tốc độ học vào cuối quá trình huấn luyện.
momentumtune.uniform(0.7, 0.98)Hệ số momentum cho bộ tối ưu hóa giúp đẩy nhanh quá trình huấn luyện và vượt qua các điểm cực tiểu địa phương.
weight_decaytune.uniform(0.0, 0.001)Tham số chính quy hóa (regularization) giúp ngăn ngừa quá tải (overfitting) bằng cách phạt các giá trị trọng số lớn.
warmup_epochstune.uniform(0.0, 5.0)Số lượng epoch với tốc độ học tăng dần để ổn định quá trình huấn luyện giai đoạn đầu.
warmup_momentumtune.uniform(0.0, 0.95)Giá trị momentum ban đầu tăng dần trong thời gian khởi động (warmup).
boxtune.uniform(1.0, 20.0)Trọng số cho thành phần mất mát bounding box, cân bằng độ chính xác định vị trong model.
clstune.uniform(0.1, 4.0)Trọng số cho thành phần mất mát phân loại, cân bằng độ chính xác dự đoán lớp trong model.
dfltune.uniform(0.4, 12.0)Trọng số cho thành phần Distribution Focal Loss, tập trung vào việc định vị bounding box chính xác.
hsv_htune.uniform(0.0, 0.1)Phạm vi tăng cường Hue giới thiệu sự thay đổi màu sắc để giúp model tổng quát hóa tốt hơn.
hsv_stune.uniform(0.0, 0.9)Phạm vi tăng cường Saturation thay đổi cường độ màu để cải thiện độ bền bỉ của model.
hsv_vtune.uniform(0.0, 0.9)Phạm vi tăng cường giá trị (độ sáng) giúp model hoạt động tốt dưới nhiều điều kiện ánh sáng khác nhau.
degreestune.uniform(0.0, 45.0)Phạm vi tăng cường xoay theo độ, cải thiện khả năng nhận diện các đối tượng bị xoay.
translatetune.uniform(0.0, 0.9)Phạm vi tăng cường tịnh tiến giúp dịch chuyển ảnh theo chiều ngang và chiều dọc.
scaletune.uniform(0.0, 0.95)Phạm vi tăng cường quy mô giúp mô phỏng các đối tượng ở những khoảng cách khác nhau.
sheartune.uniform(0.0, 10.0)Phạm vi tăng cường cắt lớp (shear) theo độ, mô phỏng các thay đổi phối cảnh.
perspectivetune.uniform(0.0, 0.001)Phạm vi tăng cường phối cảnh mô phỏng các thay đổi góc nhìn 3D.
flipudtune.uniform(0.0, 1.0)Xác suất tăng cường lật dọc, tăng sự đa dạng của tập dữ liệu.
fliplrtune.uniform(0.0, 1.0)Xác suất tăng cường lật ngang, hữu ích cho các đối tượng đối xứng.
bgrtune.uniform(0.0, 1.0)Xác suất tăng cường hoán đổi kênh BGR, giúp đạt được tính bất biến về màu sắc.
mosaictune.uniform(0.0, 1.0)Xác suất tăng cường Mosaic kết hợp bốn ảnh thành một mẫu huấn luyện.
mixuptune.uniform(0.0, 1.0)Xác suất tăng cường Mixup pha trộn hai ảnh và nhãn của chúng lại với nhau.
cutmixtune.uniform(0.0, 1.0)Xác suất tăng cường 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)Xác suất tăng cường Copy-paste chuyển các đối tượng giữa các ảnh để tăng sự đa dạng đối tượng.
close_mosaictune.randint(0.0, 11)Vô hiệu hóa Mosaic trong N epoch cuối để ổn định quá trình huấn luyện 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 tôi trình diễn 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 các siêu tham số quan tâm cụ thể.

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 mã trên, chúng tôi tạo một model YOLO với trọng số tiền huấn luyện "yolo26n.pt". Sau đó, chúng tôi gọi phương thức tune(), chỉ định cấu hình tập dữ liệu là "coco8.yaml". Chúng tôi cung cấp một không gian tìm kiếm tùy chỉnh cho tốc độ học ban đầu lr0 bằng cách sử dụng từ điển với khóa "lr0" và giá trị tune.uniform(1e-5, 1e-2). Cuối cùng, chúng tôi truyền các đối số huấn luyện bổ sung, chẳng hạn như số lượng 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 một chiến lược tìm kiếm Ray Tune theo tên. Đối với các thuật toán tìm kiếm dựa trên chuỗi, Ultralytics sẽ tự động sử dụng metric tối ưu hóa mặc định của tác vụ hiện tại và mode="max". Nếu search_alg không được cung cấp, Ray Tune sẽ sử dụng chiến lược tìm kiếm ngẫu nhiên mặc định là BasicVariantGenerator.

Sử dụng chuỗi `search_alg` 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 bạn cần tùy chỉnh bộ lấy mẫu (sampler) của bộ tìm kiếm hoặc ghi đè metric và chế độ tối ưu hóa của nó, hãy truyền một đối tượng bộ tìm kiếm Ray Tune đã được khởi tạo thay vì một chuỗi.

Sử dụng đối tượng `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 phiên Ray Tune bị gián đoạn bằng cách truyền resume=True. Bạn có thể tùy chọn truyền thư mục name mà Ray Tune đã sử dụng trong runs/{task} để tiếp tục. Nếu không, nó sẽ tự động tiếp tục phiên bị gián đoạn gần nhất. Bạn không cần cung cấp lại iterationsspace, nhưng cần cung cấp lại phần còn lại của các đối số huấn luyện, 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ả của Ray Tune

Sau khi chạy 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ẽ đưa bạn qua các quy trình phổ biến để xử lý và phân tích các kết quả đó.

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

Sau khi chạy thí nghiệm tinh chỉnh bằng tuner.fit(), bạn có thể tải kết quả từ một thư mục. Việc này rất hữu ích, đặc biệt nếu bạn thực hiện phân tích sau khi tập lệnh huấn luyện ban đầu đã kết thúc.

experiment_path = f"{storage_path}/{exp_name}"
print(f"Loading results from {experiment_path}...")

restored_tuner = tune.Tuner.restore(experiment_path, trainable=train_mnist)
result_grid = restored_tuner.get_results()

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

Nhận tổng quan về hiệu suất của các thử nghiệm. Bạn có thể nhanh chóng kiểm tra xem có bất kỳ lỗi nào xảy ra trong các thử nghiệm 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 độ thử nghiệm (trial)

Truy cập vào cấu hình siêu tham số của từng thử nghiệm riêng lẻ và các số liệu được báo cáo cuối cùng.

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

Vẽ biểu đồ toàn bộ lịch sử các số liệu được báo cáo cho một thử nghiệm

Bạn có thể vẽ biểu đồ lịch sử các số liệu được báo cáo cho từng thử nghiệm để xem cách các số liệu tiến triển theo thời gian.

import matplotlib.pyplot as plt

for i, result in enumerate(result_grid):
    plt.plot(
        result.metrics_dataframe["training_iteration"],
        result.metrics_dataframe["mean_accuracy"],
        label=f"Trial {i}",
    )

plt.xlabel("Training Iterations")
plt.ylabel("Mean Accuracy")
plt.legend()
plt.show()

Tóm tắt

Trong hướng dẫn này, chúng tôi đã đề cập đến các quy trình phổ biến để phân tích kết quả của các thí nghiệm chạy với Ray Tune sử dụ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à thử nghiệm, cũng như vẽ biểu đồ số liệu.

Khám phá thêm bằng cách xem trang tài liệu Analyze Results của Ray Tune để tận dụng tối đa các thí nghiệm tinh chỉnh siêu tham số của bạn.

Câu hỏi thường gặp (FAQ)

Làm cách nào để tinh chỉnh siêu tham số của model YOLO26 bằng Ray Tune?

Để tinh chỉnh siêu tham số của model Ultralytics YOLO26 bằng Ray Tune, hãy làm theo các bước sau:

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

    pip install -U ultralytics "ray[tune]"
    pip install wandb # optional for logging
  2. Tải model YOLO26 của bạn 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)

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

Các siêu tham số mặc định cho việc tinh chỉnh YOLO26 với Ray Tune là gì?

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

Tham sốPhạm vi giá trịMô tả
lr0tune.uniform(1e-5, 1e-2)Tốc độ học ban đầu
lrftune.uniform(0.01, 1.0)Hệ số tốc độ học cuối cùng
momentumtune.uniform(0.7, 0.98)Momentum
weight_decaytune.uniform(0.0, 0.001)Weight decay
warmup_epochstune.uniform(0.0, 5.0)Warmup epochs
boxtune.uniform(1.0, 20.0)Box loss weight
clstune.uniform(0.1, 4.0)Class loss weight
dfltune.uniform(0.4, 12.0)DFL loss weight
hsv_htune.uniform(0.0, 0.1)Hue augmentation range
translatetune.uniform(0.0, 0.9)Translation augmentation range

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

Làm thế nào để tích hợp Weights & Biases với quá trình điều chỉnh model YOLO26 của tôi?

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

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

    pip install wandb
  2. Chỉnh sửa script điều chỉnh của bạn:

    import wandb
    
    from ultralytics import YOLO
    
    wandb.init(project="YOLO-Tuning", entity="your-entity")
    
    # Load YOLO model
    model = YOLO("yolo26n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)

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

Tại sao tôi nên sử dụng Ray Tune để tối ưu hóa siêu tham số với YOLO26?

Ray Tune cung cấp nhiều ưu điểm 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ư Bayesian Optimization và HyperOpt để tìm kiếm tham số hiệu quả.
  • Song song hóa: Hỗ trợ thực thi song song nhiều phiên thử nghiệm (trials), giúp tăng tốc đáng kể quy trình điều chỉnh.
  • Dừng sớm (Early Stopping): Sử dụng các chiến lược như ASHA để kết thúc sớm các phiên thử nghiệm kém hiệu quả, giúp 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 giao diện dễ sử dụng để điều chỉnh siêu tham số một cách hiệu quả. Để bắt đầu, hãy xem hướng dẫn Hyperparameter Tuning.

Làm thế nào để xác định không gian tìm kiếm tùy chỉnh cho việc điều chỉnh siêu tham số YOLO26?

Để xác định không gian tìm kiếm tùy chỉnh cho việc điều chỉnh siêu tham số YOLO26 của bạn với 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)

Việc này tùy chỉnh phạm vi của các siêu tham số như tốc độ học ban đầu (initial learning rate) và momentum để khám phá trong suốt quá trình điều chỉnh. Để biết các cấu hình nâng cao, hãy tham khảo mục Custom Search Space Example.

Bình luận