Ultralytics YOLO27:

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

Tinh chỉnh siêu tham số đóng vai trò thiết yếu để đạt hiệu suất tối đa cho model bằng cách tìm ra tập siêu tham số tối ưu. Quá trình này bao gồm chạy các lần 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 lần 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 đơ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, tính toán song song và dừng sớm để rút ngắn 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ế để đảm bảo hiệu quả và tính linh hoạt. Thư viện này hỗ trợ nhiều chiến lược tìm kiếm, tính toán 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 hỗ trợ tùy chọn tích hợp với Weights & Biases để theo dõi 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]" 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 dataset COCO8
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 giao diện dễ sử dụng để tinh chỉnh siêu tham số với Ray Tune. Phương thức này 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 YAML của dataset dùng để chạy tuner, chỉ định các đường dẫn đến dữ liệu validation và dữ liệu huấn luyện cùng các thiết lập dành riêng cho dataset khác. Với tác vụ phân loại, thay vào đó, 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 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ị chỉ đị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 gồm nhiều siêu tham số.
grace_periodint, optionalThời gian gia 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ỳ lần thử nghiệm nào trước khi đạt số epoch này, nhờ đó model có một khoảng 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ố GPU mà Ray cấp cho mỗi lần thử nghiệm. Đặt giá trị này một cách rõ ràng để sử dụng huấn luyện trên GPU; nếu bỏ qua, các lần thử nghiệm sẽ không được cấp tài nguyên GPU.None
iterationsint, optionalSố lần thử nghiệm 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 một đối tượng 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. Searcher dạng chuỗi sẽ tự động sử dụng metric mặc định của tác vụ và mode="max". Mặc định là TPE đa biến của Optuna với các đề xuất có tính đến tính 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 thiết lập như số epoch huấn luyện, batch size và các cấu hình khác dành riêng cho 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ố để 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ố trong không gian tìm kiếm mặc định để tinh chỉnh siêu tham số của 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)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 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ố learning rate cuối cùng xác định mức giảm của learning rate 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à 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 đầ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ố cho thành phần loss của 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ố cho 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 theo nghịch đảo tần suất đầy đủ (1.0).
dfltune.uniform(0.4, 12.0)Trọng số cho thành phần hồi quy khoảng cách của box, nhấn mạnh độ chính xác khi định vị bounding box.
hsv_htune.uniform(0.0, 0.1)Phạm vi augmentation sắc độ, tạo ra sự đa dạng về 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 để cải thiện độ 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 trong nhiều điều kiện chiếu sáng khác nhau.
degreestune.uniform(0.0, 45.0)Phạm vi augmentation xoay tính theo độ, cải thiện khả năng nhận dạng các đối tượng bị xoay.
translatetune.uniform(0.0, 0.9)Phạm vi augmentation dịch chuyển, làm ảnh dịch 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 theo độ, mô phỏng các thay đổi 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 dataset.
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 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 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 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 giữ lại đặ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ũng 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 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 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

# Xác định model YOLO
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 các weight pretrained "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 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ó tính đến tính song song.

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

# Xác định model YOLO
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 đố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

# Xác định model YOLO
model = YOLO("yolo26n.pt")

# Định nghĩ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ó 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 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 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

# Xác định model YOLO
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ố 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 thường dùng để 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 trong runs/{task}/tune, hoặc trong name mà bạn đã truyền. Để tải các kết quả đó sau khi script ban đầu đã kết thúc, hãy tiếp tục phiên; thao tác này khôi phục các lần 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#

Xem tổng quan về hiệu suất của các lần thử nghiệm. 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ử 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 độ lần thử nghiệm#

Truy cập cấu hình siêu tham số của từng lần thử nghiệm 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ẽ toàn bộ lịch sử các metric được báo cáo cho một lần thử nghiệm#

Bạn có thể vẽ lịch sử các metric được báo cáo cho từng lần thử nghiệm để xem metric thay đổi như thế nào 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["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 thường dùng để phân tích kết quả của những thử nghiệm chạy bằng Ray Tune với Ultralytics. Các bước chính 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ử nghiệm, cũng như vẽ biểu đồ metric.

Tìm hiểu thêm tại trang tài liệu Phân tích kết quả 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
      
      # Tải model YOLO26
      model = YOLO("yolo26n.pt")
      
      # Bắt đầu tinh chỉnh với dataset 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à 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.

  • 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ốPhạ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 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)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 dịch chuyển

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

  • Để tích hợp Weights & Biases (W&B) vào quá 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ử nghiệm Ray tạo một lần 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 quá trình tinh chỉnh, giám sát 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 Bayes và HyperOpt để tìm kiếm tham số hiệu quả.
    • Tính song song: Hỗ trợ thực thi song song nhiều lượt thử nghiệm, 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 kết thúc những lượt thử nghiệm 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 các siêu tham số như learning rate ban đầu và momentum để khảo sát trong quá trình tinh chỉnh. Để xem cấu hình nâng cao, hãy tham khảo mục Ví dụ về không gian tìm kiếm tùy chỉnh.

Bình luận