Ultralytics YOLO27: Tham gia danh sách chờ.
Get Started

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

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 đơ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, xử lý 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ế để tối ưu hiệu quả và tính linh hoạt. Thư viện hỗ trợ nhiều chiến lược tìm kiếm, xử lý song song và 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 để theo dõi quá trình tinh chỉnh.

Cài đặt#

Để cài đặt các package 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]" 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

# Tải model YOLO26n
model = YOLO("yolo26n.pt")

# Bắt đầu tinh chỉnh siêu tham số cho quá trình huấn luyện YOLO26n trên bộ dữ liệu COCO8
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 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ốKiểuMô tảGiá trị mặc định
datastrTệp YAML của bộ dữ liệu để chạy tuner, chỉ định đường dẫn đến dữ liệu xác thực và dữ liệu huấn luyện cùng các cài đặt khác dành riêng cho bộ dữ liệu. Với tác vụ phân loại, tham số này nhận thư mục bộ dữ liệu hoặc tên bộ dữ liệu tích hợp sẵn (ví dụ: imagenet10).
spacedict, optionalMột từ điển xác định không gian tìm kiếm siêu tham số cho Ray Tune. Mỗi khóa tương ứng với tên một siêu tham số, còn giá trị xác định phạm vi giá trị cần khảo sát 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ố.
grace_periodint, optionalThời gian ân hạn tính bằng epoch dành cho bộ lập lịch ASHA trong Ray Tune. Bộ lập lịch sẽ không dừng bất kỳ lần thử nào trước khi đạt số epoch này, nhờ đó model có thể được 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 Ray phân bổ cho mỗi lần thử. Đặt giá trị này một cách tường minh để sử dụng huấn luyện trên GPU; nếu bỏ qua, các lần thử sẽ không được cấp tài nguyên GPU.None
iterationsint, optionalSố lần thử 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 tra, đảm bảo quá trình tinh chỉnh không chạy vô thời 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 đối tượng searcher của Ray hoặc dùng chuỗi được hỗ trợ như optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax hoặc random. Searcher dạng chuỗi tự động sử dụng metric tác vụ mặc định và mode="max". Mặc định là TPE đa biến của Optuna với các đề xuất có xét đến khả năng chạy song song."optuna"
**train_argsdict, optionalCác đối số bổ sung cần 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 cài đặt như số epoch huấn luyện, batch size và các cấu hình khác dành riêng cho quá trình huấn luyện.{}

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ố để đáp ứng nhu cầu cụ thể và phù hợp với 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ố trong không gian tìm kiếm mặc định để tinh chỉnh siêu tham số 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(), ngoại trừ close_mosaic, tham số này sử dụng tune.randint().

Tham sốPhạm viMô tả
lr0tune.uniform(1e-5, 1e-2)Tốc độ học 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 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, 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 của optimizer, giúp tăng tốc huấn luyện và thoát khỏi các cực tiểu cục bộ.
weight_decaytune.uniform(0.0, 0.001)Tham số regularization giúp ngăn overfitting bằng cách phạt các giá trị trọng số lớn.
warmup_epochstune.uniform(0.0, 5.0)Số epoch có tốc độ học tăng dần để ổn định giai đoạn đầu của quá trình huấn luyện.
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 loss bounding box, giúp cân bằng độ chính xác định vị của model.
clstune.uniform(0.1, 4.0)Trọng số của thành phần loss phân loại, giúp cân bằng độ chính xác dự đoán lớp của model.
cls_pwtune.uniform(0.0, 1.0)Mức độ weighting cho lớp, từ tắt (0.0) đến weighting nghịch đảo tần suất đầy đủ (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 định vị bounding box chính xác.
hsv_htune.uniform(0.0, 0.1)Phạm vi augmentation sắc độ, tạo biến thiên màu sắc để giúp model khái quát hóa tốt hơn.
hsv_stune.uniform(0.0, 0.9)Phạm vi augmentation độ bão hòa, thay đổi cường độ màu để tăng độ bền vững.
hsv_vtune.uniform(0.0, 0.9)Phạm vi augmentation giá trị (độ sáng), giúp model hoạt động tốt trong nhiều điều kiện ánh sáng.
degreestune.uniform(0.0, 45.0)Phạm vi augmentation xoay tính bằng độ, 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 augmentation tịnh tiến, dịch chuyển ảnh theo chiều ngang và chiều dọc.
scaletune.uniform(0.0, 0.95)Phạm vi augmentation tỷ lệ, 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 augmentation shear tính bằng độ, mô phỏng sự dịch chuyển phối cảnh.
perspectivetune.uniform(0.0, 0.001)Phạm vi augmentation 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 augmentation lật dọc, giúp tăng tính đa dạng của bộ dữ liệu.
fliplrtune.uniform(0.0, 1.0)Xác suất augmentation lật ngang, hữu ích với các đối tượng đối xứng.
bgrtune.uniform(0.0, 1.0)Xác suất augmentation hoán đổi kênh BGR, giúp tăng tính 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 mẫu huấn luyện.
mixuptune.uniform(0.0, 1.0)Xác suất augmentation Mixup, trộn hai ảnh cùng nhãn của chú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 giữ các đặc trưng cục bộ.
copy_pastetune.uniform(0.0, 1.0)Ở chế độ flip, đây là tỷ lệ đối tượng đủ điều kiện được sao chép vào ảnh; ở chế độ mixup, tham số này còn là xác suất thực hiện thao tác.
close_mosaictune.randint(0, 11)Tắt 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 bày 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ố cụ thể cần quan tâm.

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

from ultralytics import YOLO

# Định nghĩa YOLO model
model = YOLO("yolo26n.pt")

# Chạy Ray Tune trên 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ã phía trên, chúng ta tạo một model YOLO với trọng số pretrained "yolo26n.pt". Sau đó, chúng ta gọi phương thức tune(), chỉ định cấu hình bộ dữ liệu bằng "coco8.yaml". Chúng ta cung cấp không gian tìm kiếm tùy chỉnh cho tốc độ học ban đầu lr0 bằng một từ điển có khóa "lr0" và giá trị tune.uniform(1e-5, 1e-2). Cuối cùng, chúng ta truyền các đối số huấn luyện 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 tác vụ 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 có xét đến khả năng chạy song song.

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

# Định nghĩ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 đối tượng searcher Ray Tune đã 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

# Định nghĩa YOLO model
model = YOLO("yolo26n.pt")

# Xác định 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 bằng 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ó 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, phiên gần nhất bị gián đoạn sẽ được tiếp tục. Bạn không cần cung cấp lại iterations và space, nhưng cần cung cấp lại các đối số huấn luyện còn lại, bao gồm data và epochs.

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

# Định nghĩa YOLO model
model = YOLO("yolo26n.pt")

# Tiếp tục lượt chạy trước
results = model.tune(use_ray=True, data="coco8.yaml", epochs=50, resume=True)

# Tiếp tục lần chạy Ray Tune với tên '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 thử nghiệm tinh chỉnh siêu tham số bằng 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ừ thư mục#

model.tune(use_ray=True) trả về một Ray ResultGrid và lưu thử nghiệm trong runs/{task}/tune, hoặc trong thư mục name mà bạn đã truyền. Để tải các kết quả đó sau khi script ban đầu đã thoát, hãy tiếp tục phiên; thao tác này khôi phục các lần thử đã lưu và trả về cùng 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#

Xem tổng quan về kết quả của các lần thử. Bạn có thể nhanh chóng kiểm tra xem có lỗi nào xảy ra trong các lần thử 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 lần thử#

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

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ử metric được báo cáo cho một lần thử#

Bạn có thể vẽ biểu đồ lịch sử metric được báo cáo cho từng lần thử để xem các 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 tôi đã trình bày các quy trình phổ biến để phân tích kết quả 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à cấp lần thử, cũng như vẽ biểu đồ 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ố.

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

  • Để 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 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
      
      # Nạp model YOLO26
      model = YOLO("yolo26n.pt")
      
      # Bắt đầu tinh chỉnh với bộ dữ liệu COCO8
      result_grid = model.tune(data="coco8.yaml", use_ray=True)

    Cách này sử dụng các chiến lược tìm kiếm nâng cao và khả năng xử lý 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 tham khảo tài liệu Ray Tune.

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

    Tham sốKhoảng 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
    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ố loss box
    clstune.uniform(0.1, 4.0)Trọng số loss lớp
    cls_pwtune.uniform(0.0, 1.0)Mức độ weighting cho lớp
    dfltune.uniform(0.4, 12.0)Trọng số loss khoảng cách box
    hsv_htune.uniform(0.0, 0.1)Phạm vi augmentation sắc độ
    translatetune.uniform(0.0, 0.9)Phạm vi augmentation tịnh tiến

    Bạn có thể tùy chỉnh các siêu tham số này để đáp ứng 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 Tinh chỉnh siêu tham số.

  • Để tích hợp Weights & Biases (W&B) với quy trình tinh chỉnh Ultralytics YOLO26:

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

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

      from ultralytics import YOLO
      
      # Tải model YOLO
      model = YOLO("yolo26n.pt")
      
      # Mỗi lần thử Ray tạo một lượt chạy W&B riêng trong project này
      result_grid = model.tune(data="coco8.yaml", project="YOLO-Tuning", use_ray=True)

    Thiết lập này cho phép bạn theo dõi quy trình tinh chỉnh, quản lý 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 ư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ư Tối ưu hóa Bayesian và HyperOpt để tìm kiếm tham số hiệu quả.
    • Xử lý song song: Hỗ trợ thực thi song song nhiều lần thử, giúp tăng đáng kể tốc độ tinh chỉnh.
    • Dừng sớm: Sử dụng các chiến lược như ASHA để sớm chấm dứt những lần thử 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 giao diện dễ sử dụng để tinh chỉnh siêu tham số hiệu quả. Để bắt đầu, hãy xem hướng dẫn Tinh chỉnh siêu tham số.

  • Để xác định không gian tìm kiếm tùy chỉnh cho việc 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)

    Cách này tùy chỉnh phạm vi siêu tham số như tốc độ học ban đầu và động lượng để 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