Meet YOLO26: next-gen vision AI.

Link to this sectionTối ưu hóa siêu tham số hiệu quả với Ray Tune và YOLO26#

Việc điều chỉnh siêu tham số rất quan trọng để đạt được hiệu suất mô hình đỉnh cao bằng cách tìm ra tập hợp siêu tham số tối ưu. Quá trình này bao gồm việc chạy các 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.

Link to this sectionTăng tốc độ điều chỉnh với Ultralytics YOLO26 và Ray Tune#

Ultralytics YOLO26 tích hợp Ray Tune để điều chỉnh siêu tham số, giúp tinh gọn việc tối ưu hóa các siêu tham số cho mô hình YOLO26. Với Ray Tune, bạn có thể tận 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 để đẩy nhanh quá trình điều chỉnh.

Link to this sectionRay Tune#

Ray Tune hyperparameter optimization workflow

Ray Tune là một thư viện điều chỉnh siêu tham số được thiết kế để đảm bảo tính hiệu quả và 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à 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 framework machine learning phổ biến, bao gồm cả Ultralytics YOLO26.

Link to this sectionTích hợp với Weights & Biases#

YOLO26 cũng cho phép tích hợp tùy chọn với Weights & Biases để giám sát quá trình điều chỉnh.

Link to this sectionCà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

Link to this sectionCách sử dụng#

Cách sử dụng
from ultralytics import YOLO

# Load a YOLO26n model
model = YOLO("yolo26n.pt")

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

Link to this sectionCác 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 để điều chỉnh siêu tham số với Ray Tune. Phương thức này chấp nhận một số đối số cho phép bạn tùy chỉnh quy 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ạiMô tảGiá trị mặc định
datastrTệp cấu hình tập dữ liệu (ở định dạng YAML) để chạy tuner. Tệp này nên chỉ định các đường dẫn validation data và dữ liệu huấn luyện, cũng như các thiết lập cụ thể khác cho tập dữ liệu.
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 một tên siêu tham số và giá trị chỉ định phạm vi giá trị cần khám phá trong quá trình điều chỉnh. Nếu không được cung cấp, YOLO26 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_periodint, optionalThời gian ân hạn tính theo epochs cho ASHA scheduler 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 epochs này, cho phép mô hình 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ố lượng GPU được phân bổ cho mỗi thử nghiệm trong quá trình điều chỉnh. Tham số này giúp quản lý mức sử dụng GPU, đặc biệt là trong các môi trường đa GPU. Nếu không được cung cấp, tuner sẽ sử dụng tất cả các GPU khả dụng.None
iterationsint, optionalSố lượng thử nghiệm tối đa cần 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ô tận.10
search_algstr or Searcher, optionalChiến lược tìm kiếm của Ray Tune được 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 một chuỗi được hỗ trợ như optuna, hyperopt, bayesopt, bohb, hebo, nevergrad, zoopt, ax, hoặc random. Các bộ tìm kiếm dựa trên chuỗi sẽ tự động sử dụng metric tác vụ mặc định và mode="max". Nếu không được cung cấp, Ray Tune sẽ quay về chiến lược tìm kiếm ngẫu nhiên mặc định là BasicVariantGenerator.None
**train_argsdict, optionalCác đối số bổ sung để truyền vào phương thức train() 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, batch size và các cấu hình cụ thể khác cho việc 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ó của mình.

Link to this sectionMô tả không gian tìm kiếm mặc định#

Bảng dưới đây liệt kê các tham số không gian tìm kiếm mặc định cho việc điều chỉnh siêu tham số trong YOLO26 với Ray Tune. Mỗi tham số có một phạm vi giá trị cụ thể được định nghĩa bởi tune.uniform().

Tham sốPhạm viMô tả
lr0tune.uniform(1e-5, 1e-2)Tốc độ học ban đầu kiểm soát kích thước bước trong quá trình tối ưu hóa. Các 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ố tốc độ học cuối cùng xác định mức độ giảm của tốc độ học vào cuối quá trình huấn luyện.
momentumtune.uniform(0.7, 0.98)Hệ số động lượng cho trình tối ưu hóa giúp tăng tốc quá trình huấn luyện và vượt qua các điểm cực tiểu cục bộ.
weight_decaytune.uniform(0.0, 0.001)Tham số chính quy hóa ngăn chặn việc quá khớp (overfitting) bằng cách áp mức phạt lên các giá trị trọng số lớn.
warmup_epochstune.uniform(0.0, 5.0)Số lượng epochs có tốc độ học tăng dần để ổn định quá trình huấn luyện giai đoạn đầu.
warmup_momentumtune.uniform(0.0, 0.95)Giá trị động lượng ban đầu tăng dần trong giai đoạn khởi động (warmup).
boxtune.uniform(1.0, 20.0)Trọng số cho thành phần mất mát khung bao (bounding box loss), giúp cân bằng độ chính xác định vị trong mô hình.
clstune.uniform(0.1, 4.0)Trọng số cho thành phần mất mát phân loại (classification loss), giúp cân bằng độ chính xác dự đoán lớp trong mô hình.
dfltune.uniform(0.4, 12.0)Trọng số cho thành phần Distribution Focal Loss, tập trung vào việc định vị chính xác khung bao.
hsv_htune.uniform(0.0, 0.1)Phạm vi tăng cường sắc độ (hue) đưa vào sự biến đổi màu sắc giúp mô hình tổng quát hóa tốt hơn.
hsv_stune.uniform(0.0, 0.9)Phạm vi tăng cường độ bão hòa (saturation) làm thay đổi cường độ màu sắc để cải thiện tính bền vững.
hsv_vtune.uniform(0.0, 0.9)Phạm vi tăng cường giá trị (độ sáng) giúp mô hình hoạt động hiệu quả trong các điều kiện ánh sáng khác nhau.
degreestune.uniform(0.0, 45.0)Phạm vi tăng cường xoay theo độ, cải thiện khả năng nhận diện các đối tượng bị xoay.
translatetune.uniform(0.0, 0.9)Phạm vi tăng cường tịnh tiến di chuyển hình ảnh theo chiều ngang và chiều dọc.
scaletune.uniform(0.0, 0.95)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.
sheartune.uniform(0.0, 10.0)Phạm vi tăng cường cắt lớp (shear) theo độ, mô phỏng các thay đổi về phối cảnh.
perspectivetune.uniform(0.0, 0.001)Phạm vi tăng cường phối cảnh mô phỏng các thay đổi về góc nhìn 3D.
flipudtune.uniform(0.0, 1.0)Xác suất tăng cường lật dọc, giúp tăng tính đa dạng của tập dữ liệu.
fliplrtune.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.
bgrtune.uniform(0.0, 1.0)Xác suất tăng cường hoán đổi kênh BGR, giúp mô hình bất biến với màu sắc.
mosaictune.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 duy nhất.
mixuptune.uniform(0.0, 1.0)Xác suất tăng cường Mixup pha trộn hai hình ảnh và nhãn của chúng lại với nhau.
cutmixtune.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 trưng cục bộ.
copy_pastetune.uniform(0.0, 1.0)Xác suất tăng cường copy-paste chuyển đổi các đối tượng giữa các hình ảnh để tăng tính đa dạng của thực thể.
close_mosaictune.randint(0, 11)Tắt mosaic trong N epochs cuối cùng để ổn định quá trình huấn luyện trước khi hoàn tất.

Link to this sectionVí 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à 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 điều chỉnh vào các siêu tham số quan tâm cụ thể.

Cách sử dụng
from ray import tune

from ultralytics import YOLO

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

# Run Ray Tune on the 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ã trên, chúng ta tạo một mô hình YOLO với trọng số tiền huấn luyện "yolo26n.pt". Sau đó, chúng ta gọi phương thức tune(), chỉ định cấu hình tập dữ liệu với "coco8.yaml". Chúng ta cung cấp 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 dictionary với 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ố lượng epochs trực tiếp vào phương thức tune dưới dạng epochs=50.

Link to this sectionVí dụ về thuật toán tìm kiếm#

Bạn có thể chọn chiến lược tìm kiếm của Ray Tune theo tên. Đối với các thuật toán tìm kiếm dựa trên 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 search_alg không được cung cấp, Ray Tune sẽ sử dụng chiến lược tìm kiếm ngẫu nhiên mặc định, BasicVariantGenerator.

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

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

result_grid = model.tune(
    data="coco8.yaml",
    epochs=50,
    search_alg="optuna",
    use_ray=True,
)

Nếu bạn cần tùy chỉnh bộ lấy mẫu (sampler) của bộ tìm kiếm hoặc ghi đè metric và chế độ tối ưu hóa, hãy truyền một đối tượng bộ tìm kiếm Ray Tune đã được 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

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

# Define 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,
)

Link to this sectionTiế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 truyền tê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 gián đoạn cuối cùng. Bạn không cần cung cấp lại iterationsspace, 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("yolo26n.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)

Link to this sectionXử 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ẽ đưa bạn đi qua các quy trình phổ biến để xử lý và phân tích các kết quả đó.

Link to this sectionTả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 bằng 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 thực hiện phân tích sau khi tập lệnh huấn luyện ban đầu đã kết thúc.

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()

Link to this sectionPhân tích cơ bản ở cấp độ thử nghiệm (Experiment-Level)#

Nhận tổng quan về cách các lần thử nghiệm (trials) đã thực hiện. 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!")

Link to this sectionPhân tích cơ bản ở cấp độ thử nghiệm riêng lẻ (Trial-Level)#

Truy cập các cấu hình siêu tham số của từng thử nghiệm riêng lẻ 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}")

Link to this sectionVẽ biểu đồ toàn bộ lịch sử các số liệu đã báo cáo cho một thử nghiệm#

Bạn có thể vẽ biểu đồ lịch sử các số liệu đã báo cáo cho mỗi lần 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()

Link to this sectionTóm tắt#

Trong hướng dẫn này, chúng tôi đã đề 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 được 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 riêng lẻ, cũng như vẽ biểu đồ các số liệu.

Khám phá thêm bằng cách xem trang tài liệu Analyze Results 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.

Link to this sectionCâu hỏi thường gặp#

Link to this sectionLàm thế nào để tôi điều chỉnh các siêu tham số cho mô hình YOLO26 của mình bằng Ray Tune?#

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

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

Quy trình này tận dụng các chiến lược tìm kiếm nâng cao và khả năng song song của Ray Tune để tối ưu hóa siêu tham số của mô hình một cách hiệu quả. Để biết thêm thông tin, hãy xem tài liệu Ray Tune.

Link to this sectionCác siêu tham số mặc định cho việc điều chỉnh YOLO26 với Ray Tune là gì?#

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

Tham sốPhạm vi giá trịMô tả
lr0tune.uniform(1e-5, 1e-2)Tốc độ học ban đầu
lrftune.uniform(0.01, 1.0)Hệ số tốc độ học cuối cùng
momentumtune.uniform(0.7, 0.98)Động lượng (Momentum)
weight_decaytune.uniform(0.0, 0.001)Trọng số suy giảm (Weight decay)
warmup_epochstune.uniform(0.0, 5.0)Số epoch khởi động (Warmup epochs)
boxtune.uniform(1.0, 20.0)Trọng số hàm mất mát Box
clstune.uniform(0.1, 4.0)Trọng số hàm mất mát Class
dfltune.uniform(0.4, 12.0)Trọng số hàm mất mát DFL
hsv_htune.uniform(0.0, 0.1)Phạm vi tăng cường Hue
translatetune.uniform(0.0, 0.9)Phạm vi tăng cường Translation

Các siêu tham số này có thể được tùy chỉnh để phù hợp với nhu cầu cụ thể của bạn. Để xem danh sách đầy đủ và biết thêm chi tiết, hãy tham khảo hướng dẫn Hyperparameter Tuning.

Link to this sectionLàm thế nào tôi có thể tích hợp Weights & Biases với quá trình điều chỉnh mô hình YOLO26?#

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

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

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

Thiết lập này sẽ cho phép bạn giám sát 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.

Link to this sectionTại sao tôi nên sử dụng Ray Tune để tối ưu hóa siêu tham số với YOLO26?#

Ray Tune cung cấp nhiều ưu điểm 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ư Bayesian Optimization 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ần thử nghiệm, tăng tốc đáng kể quy trình điều chỉnh.
  • Dừng sớm (Early Stopping): Áp dụng các chiến lược như ASHA để kết thúc sớm các thử nghiệm có hiệu suất kém, 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 YOLO26, cung cấp giao diện dễ sử dụng để điều chỉnh siêu tham số một cách hiệu quả. Để bắt đầu, hãy xem hướng dẫn Hyperparameter Tuning.

Link to this sectionLàm thế nào để tôi định nghĩa không gian tìm kiếm tùy chỉnh cho việc điều chỉnh siêu tham số YOLO26?#

Để định nghĩa không gian tìm kiếm tùy chỉnh cho việc điều chỉnh siêu tham số YOLO26 của bạn với 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)

Đ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 sẽ được khám phá trong quá trình điều chỉnh. Đối với các cấu hình nâng cao, hãy tham khảo phần Custom Search Space Example.

Bình luận