Đ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
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
Sử dụng
Sử dụng
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
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.
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.