Bỏ để qua phần nội dung

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

Điều chỉnh siêu tham số là rất quan trọng trong việc đạt được hiệu suất mô hình cao nhất bằng cách khám phá bộ siêu tham số tối ưu. Điều này liên quan đến việc chạy thử nghiệm với các 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 điều chỉnh với Ultralytics YOLOv8 và Ray Tune

Ultralytics YOLOv8 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 YOLOv8 mô hình siêu tham số. Với Ray Tune, bạn có thể sử dụng các chiến lược tìm kiếm nâng cao, song song và dừng sớm để đẩy nhanh quá trình điều chỉnh.

Điều chỉnh tia

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ế để đạt hiệu quả và tính linh hoạt. Nó hỗ trợ các chiến lược tìm kiếm khác nhau, song song và chiến lược dừng sớm và tích hợp liền mạch với các khung học máy phổ biến, bao gồm Ultralytics YOLOv8.

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

YOLOv8 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

Sử dụng

Sử dụng

from ultralytics import YOLO

# Load a YOLOv8n model
model = YOLO('yolov8n.pt')

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

tune() Tham số phương pháp

Các tune() Phương pháp trong YOLOv8 cung cấp 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ố:

Thông số Kiểu Sự miêu tả Giá trị mặc định
data str Tệp cấu hình tập dữ liệu (ở định dạng YAML) để chạy bộ chỉnh. Tệp này phải chỉ định đường dẫn dữ liệu đào tạo và xác thực, cũng như các cài đặt dành riêng cho tập 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 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, YOLOv8 Sử dụng không gian tìm kiếm mặc định với các siêu tham số khác nhau.
grace_period int, optional Thời gian gia hạn trong các kỷ nguyên cho bộ lập lịch ASHA 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ố kỷ nguyên này, cho phép mô hình được đào tạo tối thiểu trước khi đưa ra quyết định dừng sớm. 10
gpu_per_trial int, optional Số lượng GPU cần phân bổ cho mỗi lần dùng thử 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 đa 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. Không ai
iterations int, optional Số lượng thử nghiệm tối đa để 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 thử nghiệm, đả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 đến train() phương pháp 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ố kỷ nguyên đào tạo, kích thước lô và các cấu hình đào tạo 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 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 sẵn có của mình.

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 để điều chỉnh siêu tham số trong YOLOv8 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().

Thông số Phạm vi giá trị Sự miêu tả
lr0 tune.uniform(1e-5, 1e-1) Tỷ lệ học ban đầu
lrf tune.uniform(0.01, 1.0) Yếu tố tỷ lệ học tập cuối cùng
momentum tune.uniform(0.6, 0.98) Đà
weight_decay tune.uniform(0.0, 0.001) Phân rã trọng lượng
warmup_epochs tune.uniform(0.0, 5.0) Kỷ nguyên khởi động
warmup_momentum tune.uniform(0.0, 0.95) Đà khởi động
box tune.uniform(0.02, 0.2) Trọng lượng hộp giảm
cls tune.uniform(0.2, 4.0) Lớp học giảm cân
hsv_h tune.uniform(0.0, 0.1) Phạm vi tăng cường Huế
hsv_s tune.uniform(0.0, 0.9) Phạm vi tăng độ bão hòa
hsv_v tune.uniform(0.0, 0.9) Phạm vi tăng giá trị (độ sáng)
degrees tune.uniform(0.0, 45.0) Phạm vi tăng cường xoay (độ)
translate tune.uniform(0.0, 0.9) Phạm vi tăng cường dịch thuật
scale tune.uniform(0.0, 0.9) Phạm vi tăng cường mở rộng quy mô
shear tune.uniform(0.0, 10.0) Phạm vi tăng lực cắt (độ)
perspective tune.uniform(0.0, 0.001) Phạm vi tăng cường phối cảnh
flipud tune.uniform(0.0, 1.0) Xác suất tăng cường lật dọc
fliplr tune.uniform(0.0, 1.0) Xác suất tăng cường lật ngang
mosaic tune.uniform(0.0, 1.0) Xác suất tăng khảm
mixup tune.uniform(0.0, 1.0) Xác suất tăng hỗn hợp
copy_paste tune.uniform(0.0, 1.0) Xác suất tăng cường sao chép-dán

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 để điều chỉnh siêu tham số với Ray Tune và YOLOv8. 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.

Sử dụng

from ultralytics import YOLO

# Define a YOLO model
model = YOLO("yolov8n.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 YOLO Mô hình với "yolov8n.pt" trọng lượng được đào tạo trước. Sau đó, chúng tôi gọi tune() phương pháp, chỉ định cấu hình tập dữ liệu với "coco8.yaml". Chúng tôi cung cấp một không gian tìm kiếm tùy chỉnh cho tỷ lệ học tập ban đầu lr0 Sử dụng từ điển có khóa "LR0" và giá trị tune.uniform(1e-5, 1e-1). Cuối cùng, chúng ta truyền các đối số đào tạo bổ sung, chẳng hạn như số lượng kỷ nguyên trực tiếp vào phương thức điều chỉnh là epochs=50.

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 các phân tích khác nhau về kết quả thu được. Hướng dẫn này sẽ đưa bạn qua các quy trình công 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 rất hữu ích, đặc biệt nếu bạn đang thực hiện phân tích sau khi kịch bản đào tạo 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ề cách các bản dùng thử được thực hiện. Bạn có thể nhanh chóng kiểm tra xem có bất kỳ lỗi nào trong quá trình dùng thử hay không.

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

Phân tích cấp độ dùng thử cơ bản

Truy cập các cấu hình siêu tham số dùng thử riêng lẻ và các chỉ số được báo cáo gần đây 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ủa các số liệu được báo cáo cho một thử nghiệm

Bạn có thể vẽ lịch sử của các chỉ số được báo cáo cho mỗi thử nghiệm để xem các chỉ số phát triển như thế nào theo thời gian.

import matplotlib.pyplot as plt

for result in 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 tôi đã đề cập đến các quy trình công việc phổ biến để phân tích kết quả của các thử nghiệm chạy với Ray Tune bằng cách 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 và vẽ số liệu.

Khám phá thêm bằng cách xem trang tài liệu Phân tích kết quả của Ray Tune để tận dụng tối đa các thử nghiệm điều chỉnh siêu tham số của bạn.



Đã tạo 2023-11-12, Cập nhật 2024-05-06
Tác giả: glenn-jocher (5)

Ý kiến