Chuyển đến nội dung

Điều chỉnh siêu tham số hiệu quả với Ray Tune và YOLO11

Điều chỉnh siêu tham số là rất quan trọng để đạt được hiệu suất mô hình cao nhất bằng cách khám phá tập hợp siêu tham số tối ưu. Điều này bao gồm việc chạy thử với các siêu tham số khác nhau và đánh giá hiệu suất của mỗi lần thử.

Tăng tốc độ điều chỉnh với Ultralytics YOLO11 và Ray Tune

Ultralytics YOLO11 kết hợp Ray Tune để điều chỉnh siêu tham số, hợp lý hóa việc tối ưu hóa các siêu tham số của mô hình YOLO11. 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 song song và dừng sớm để đẩy nhanh quá trình điều chỉnh.

Ray Tune

Tổng quan về Ray Tune

Ray Tune là một thư viện điều chỉnh siêu tham số được thiết kế để mang lại hiệu quả và tính linh hoạt. Nó hỗ trợ nhiều chiến lược tìm kiếm, tính 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 khung máy học phổ biến, bao gồm Ultralytics YOLO11.

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

YOLO11 cũng cho phép tích hợp tùy chọn với Weights & Biases để theo dõi quá trình điều 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 YOLO11n model
model = YOLO("yolo11n.pt")

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

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

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

Tham số Loại Mô tả Giá trị mặc định
data str Tệp cấu hình bộ dữ liệu (ở định dạng YAML) để chạy bộ chỉnh trên đó. Tệp này sẽ chỉ định đường dẫn dữ liệu xác thực và đào tạo, cũng như các cài đặt dành riêng cho bộ dữ liệu khác.
space dict, optional Mộ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 một tên siêu tham số và giá trị chỉ định phạm vi giá trị để khám phá trong quá trình điều chỉnh. Nếu không được cung cấp, YOLO11 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_period int, optional Thời gian gia hạn tính bằng epochs cho bộ lập lịch ASHA trong Ray Tune. Bộ lập lịch sẽ không kết thúc bất kỳ thử nghiệm nào trước số lượng kỷ nguyên này, cho phép mô hình có một số đào tạo tối thiểu trước khi đưa ra quyết định về việc dừng sớm. 10
gpu_per_trial int, optional Số lượng GPU được phân bổ cho mỗi lần thử nghiệm trong quá trình điều chỉnh. Điều này giúp quản lý việc sử dụng GPU, đặc biệt là trong môi trường nhiều GPU. Nếu không được cung cấp, bộ chỉnh sẽ sử dụng tất cả các GPU có sẵn. None
iterations int, optional Số lượng thử nghiệm tối đa sẽ chạy trong quá trình điều 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 điều chỉnh không chạy vô thời hạn. 10
**train_args dict, optional Các đối số bổ sung để chuyển cho train() phương thức trong quá trình điều chỉnh. Các đối số này có thể bao gồm các cài đặt như số lượng epochs huấn luyện, kích thước lô, và các cấu hình dành riêng cho quá trình huấn luyện 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à tài nguyên 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 sau đây liệt kê các tham số không gian tìm kiếm mặc định để điều chỉnh siêu tham số trong YOLO11 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 vi Mô tả
lr0 tune.uniform(1e-5, 1e-1) Tỷ lệ 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 làm tăng tốc độ đào tạo nhưng có thể gây ra sự không ổn định.
lrf tune.uniform(0.01, 1.0) Hệ số learning rate cuối cùng, xác định mức độ giảm learning rate vào cuối quá trình huấn luyện.
momentum tune.uniform(0.6, 0.98) Hệ số quán tính cho trình tối ưu hóa giúp tăng tốc quá trình huấn luyện và khắc phục các cực tiểu cục bộ.
weight_decay tune.uniform(0.0, 0.001) Tham số điều chuẩn giúp ngăn ngừa tình trạng overfitting bằng cách phạt các giá trị trọng số lớn.
warmup_epochs tune.uniform(0.0, 5.0) Số lượng epochs với tốc độ học tăng dần để ổn định quá trình huấn luyện ban đầu.
warmup_momentum tune.uniform(0.0, 0.95) Giá trị động lượng ban đầu tăng dần trong giai đoạn khởi động.
box tune.uniform(0.02, 0.2) Trọng số cho thành phần loss bounding box, cân bằng độ chính xác định vị trong mô hình.
cls tune.uniform(0.2, 4.0) Trọng số cho thành phần loss phân loại, cân bằng độ chính xác dự đoán lớp trong mô hình.
hsv_h tune.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 mô hình khái quát hóa.
hsv_s tune.uniform(0.0, 0.9) Phạm vi tăng cường độ bão hòa thay đổi cường độ màu sắc để cải thiện độ bền.
hsv_v tune.uniform(0.0, 0.9) Phạm vi tăng cường giá trị (brightness) giúp mô hình hoạt động trong các điều kiện ánh sáng khác nhau.
degrees tune.uniform(0.0, 45.0) Phạm vi tăng cường xoay theo độ, cải thiện khả năng nhận dạng các đối tượng bị xoay.
translate tune.uniform(0.0, 0.9) Phạm vi của phép tăng cường dữ liệu tỷ lệnh dịch chuyển ảnh theo chiều ngang và chiều dọc.
scale tune.uniform(0.0, 0.9) Phạm vi tăng cường tỷ lệ mô phỏng các đối tượng ở các khoảng cách khác nhau.
shear tune.uniform(0.0, 10.0) Phạm vi tăng cường Shear theo độ, mô phỏng các thay đổi phối cảnh.
perspective tune.uniform(0.0, 0.001) Phạm vi tăng cường phối cảnh mô phỏng các thay đổi về điểm nhìn 3D.
flipud tune.uniform(0.0, 1.0) Độ xác suất tăng cường lật dọc, tăng tính đa dạng của tập dữ liệu.
fliplr tune.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.
mosaic tune.uniform(0.0, 1.0) Xác suất tăng cường Mosaic kết hợp bốn hình ảnh thành một mẫu huấn luyện.
mixup tune.uniform(0.0, 1.0) Xác suất tăng cường Mixup trộn hai ảnh và nhãn của chúng lại với nhau.
cutmix tune.uniform(0.0, 1.0) Xác suất tăng cường Cutmix kết hợp các vùng hình ảnh trong khi vẫn duy trì các đặc điểm cục bộ, cải thiện khả năng phát hiện các đối tượng bị che khuất một phần.
copy_paste tune.uniform(0.0, 1.0) Xác suất tăng cường Sao chép-Dán giúp chuyển các đối tượng giữa các hình ảnh để tăng tính đa dạng của đối tượng.

Ví dụ về Không gian Tìm kiếm Tùy chỉnh

Trong ví dụ này, chúng tôi sẽ trình bày cách sử dụng không gian tìm kiếm tùy chỉnh để điều chỉnh siêu tham số với Ray Tune và YOLO11. 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 điều chỉnh vào các siêu tham số cụ thể mà bạn quan tâm.

Cách sử dụng

from ray import tune

from ultralytics import YOLO

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

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

Trong đoạn mã trên, chúng ta tạo một mô hình YOLO với các trọng số đã được huấn luyện trước "yolo11n.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 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 một từ điển với khóa "lr0" và giá trị tune.uniform(1e-5, 1e-1). Cuối cùng, chúng ta chuyển các đối số huấn luyện bổ sung, chẳng hạn như số lượng epochs trực tiếp đến phương thức tune như epochs=50.

Tiếp tục phiên điều 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 chuyển thư mục name được Ray Tune sử dụng trong runs/{task} để tiếp tục. Nếu không, nó sẽ tiếp tục phiên bị gián đoạn cuối cùng. Bạn không cần cung cấp iterationsspace một lần nữa, nhưng bạn cần cung cấp lại các đối số huấn luyện 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("yolo11n.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 thử nghiệm điều 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ẽ hướng dẫn bạn các quy trình làm việc phổ biến để xử lý và phân tích các kết quả này.

Tải Kết quả Thử nghiệm Tune từ một Thư mục

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

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ấp độ Thử nghiệm Cơ bản

Xem 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 quá trình 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ấp độ Chạy Thử Cơ bản

Truy cập cấu hình siêu tham số của từng thử nghiệm 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ẽ Đồ thị Toàn bộ Lịch sử của các Số liệu Báo cáo cho một Lần Chạy Thử

Bạn có thể vẽ biểu đồ lịch sử của các số liệu đã báo cáo cho mỗi thử nghiệm để xem các số liệu đã phát triển 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["mean_accuracy"],
        label=f"Trial {i}",
    )

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

Tóm tắt

Trong tài liệu này, chúng ta đã đề cập đến các quy trình làm việc phổ biến để phân tích kết quả của các thử nghiệm chạy bằng 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à cấp độ thử nghiệm, đồng thời vẽ đồ thị các số liệu.

Tìm hiểu thêm bằng cách xem 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 điều chỉnh siêu tham số của bạn.

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

Làm cách nào để điều chỉnh các siêu tham số của mô hình YOLO11 bằng Ray Tune?

Để điều chỉnh các siêu tham số của mô hình Ultralytics YOLO11 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 mô hình YOLO11 của bạn và bắt đầu điều chỉnh:

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

Điều này sử dụng các chiến lược tìm kiếm nâng cao và tính song song của Ray Tune để tối ưu hóa hiệu quả các siêu tham số của mô hình. Để 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 để điều chỉnh YOLO11 với Ray Tune là gì?

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

Tham số Phạm vi giá trị Mô tả
lr0 tune.uniform(1e-5, 1e-1) Tốc độ học ban đầu
lrf tune.uniform(0.01, 1.0) Hệ số tỷ lệ học tập cuối cùng
momentum tune.uniform(0.6, 0.98) Động lượng
weight_decay tune.uniform(0.0, 0.001) Suy giảm trọng lượng
warmup_epochs tune.uniform(0.0, 5.0) Số lượng epochs Warmup
box tune.uniform(0.02, 0.2) Trọng số loss Box
cls tune.uniform(0.2, 4.0) Trọng số loss Class
hsv_h tune.uniform(0.0, 0.1) Phạm vi tăng cường Hue
translate tune.uniform(0.0, 0.9) Phạm vi tăng cường 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ể của mình. Để có danh sách đầy đủ và biết thêm chi tiết, hãy tham khảo hướng dẫn Điều chỉnh Siêu tham số.

Làm cách nào tôi có thể tích hợp Weights & Biases với việc điều chỉnh mô hình YOLO11 của mình?

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

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

    pip install wandb
    
  2. Sửa đổi 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("yolo11n.pt")
    
    # Tune hyperparameters
    result_grid = model.tune(data="coco8.yaml", use_ray=True)
    

Thiết lập này cho phép bạn theo dõi 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 YOLO11?

Ray Tune cung cấp nhiều lợi thế 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ả.
  • Tính Song Song: Hỗ trợ thực thi song song nhiều thử nghiệm, giúp tăng tốc đáng kể quá trình điều chỉnh.
  • Dừng Sớm: Sử dụng các chiến lược như ASHA để dừng sớm các thử nghiệm hoạt động 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 YOLO11, cung cấp giao diện dễ sử dụng để điều chỉnh các siêu tham số một cách hiệu quả. Để bắt đầu, hãy xem hướng dẫn Điều chỉnh siêu tham số.

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

Để xác định một không gian tìm kiếm tùy chỉnh cho việc điều chỉnh siêu tham số YOLO11 của bạn với Ray Tune:

from ray import tune

from ultralytics import YOLO

model = YOLO("yolo11n.pt")
search_space = {"lr0": tune.uniform(1e-5, 1e-1), "momentum": tune.uniform(0.6, 0.98)}
result_grid = model.tune(data="coco8.yaml", space=search_space, use_ray=True)

Điều này tùy chỉnh phạm vi của các siêu tham số như tốc độ học ban đầu và động lượng để khám phá trong quá trình điều chỉnh. Để có 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.



📅 Đã tạo 1 năm trước ✏️ Cập nhật 3 tháng trước

Bình luận