Đ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
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 iterations
và space
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 data
và epochs
.
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:
-
Cài đặt các gói cần thiết:
pip install -U ultralytics "ray[tune]" pip install wandb # optional for logging
-
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:
-
Cài đặt W&B:
pip install wandb
-
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.