Chuyển đến nội dung

Hướng dẫn Điều chỉnh Siêu tham số Ultralytics YOLO

Giới thiệu

Điều chỉnh siêu tham số không chỉ là thiết lập một lần mà là một quy trình lặp đi lặp lại nhằm tối ưu hóa các chỉ số hiệu suất của mô hình học máy, chẳng hạn như độ chính xác (accuracy), độ chuẩn xác (precision) và độRecall (recall). Trong bối cảnh của Ultralytics YOLO, các siêu tham số này có thể từ learning rate đến các chi tiết kiến trúc, chẳng hạn như số lượng lớp hoặc các loại hàm kích hoạt được sử dụng.



Xem: Cách điều chỉnh siêu tham số để có hiệu suất mô hình tốt hơn 🚀

Siêu tham số là gì?

Siêu tham số là các cài đặt cấu trúc cấp cao cho thuật toán. Chúng được thiết lập trước giai đoạn huấn luyện và giữ nguyên không đổi trong suốt giai đoạn đó. Dưới đây là một số siêu tham số thường được điều chỉnh trong Ultralytics YOLO:

  • Tốc độ học (Learning Rate) lr0: Xác định kích thước bước tại mỗi lần lặp khi di chuyển đến điểm tối thiểu trong hàm mất mát (loss function).
  • Kích thước lô (Batch Size) batch: Số lượng hình ảnh được xử lý đồng thời trong một lượt forward.
  • Số lượng Epoch epochs: Một epoch là một lượt forward và backward đầy đủ của tất cả các ví dụ huấn luyện.
  • Thông số kiến trúc cụ thể: Chẳng hạn như số lượng kênh, số lượng lớp, các loại hàm kích hoạt, v.v.

Hình ảnh trực quan về điều chỉnh siêu tham số

Để có danh sách đầy đủ các siêu tham số tăng cường dữ liệu (augmentation hyperparameters) được sử dụng trong YOLO11, vui lòng tham khảo trang cấu hình.

Tiến hóa và Đột biến Gen

Ultralytics YOLO sử dụng các thuật toán di truyền để tối ưu hóa các siêu tham số. Các thuật toán di truyền được lấy cảm hứng từ cơ chế chọn lọc tự nhiên và di truyền học.

  • Đột biến (Mutation): Trong bối cảnh của Ultralytics YOLO, đột biến giúp tìm kiếm cục bộ không gian siêu tham số bằng cách áp dụng các thay đổi nhỏ, ngẫu nhiên đối với các siêu tham số hiện có, tạo ra các ứng viên mới để đánh giá.
  • Lai ghép (Crossover): Mặc dù lai ghép là một kỹ thuật thuật toán di truyền phổ biến, nhưng nó hiện không được sử dụng trong Ultralytics YOLO để điều chỉnh siêu tham số. Trọng tâm chủ yếu là vào đột biến để tạo ra các tập siêu tham số mới.

Chuẩn bị cho việc Điều chỉnh Siêu tham số

Trước khi bắt đầu quá trình điều chỉnh, điều quan trọng là:

  1. Xác định các chỉ số: Xác định các chỉ số bạn sẽ sử dụng để đánh giá hiệu suất của mô hình. Đây có thể là AP50, F1-score hoặc các chỉ số khác.
  2. Đặt ngân sách điều chỉnh: Xác định lượng tài nguyên tính toán bạn sẵn sàng phân bổ. Điều chỉnh siêu tham số có thể tốn kém về mặt tính toán.

Các Bước Liên quan

Khởi tạo Siêu tham số

Bắt đầu với một tập hợp các siêu tham số ban đầu hợp lý. Đây có thể là các siêu tham số mặc định do Ultralytics YOLO đặt hoặc một thứ gì đó dựa trên kiến thức về lĩnh vực của bạn hoặc các thử nghiệm trước đó.

Đột biến Siêu tham số

Sử dụng _mutate method để tạo ra một tập hợp các siêu tham số mới dựa trên tập hợp hiện có. Các Lớp Tuner tự động xử lý quy trình này.

Huấn luyện Mô hình

Quá trình huấn luyện được thực hiện bằng cách sử dụng tập hợp các siêu tham số đã được biến đổi. Hiệu suất huấn luyện sau đó được đánh giá bằng cách sử dụng các số liệu bạn đã chọn.

Đánh giá Mô hình

Sử dụng các số liệu như AP50, F1-score hoặc các số liệu tùy chỉnh để đánh giá hiệu suất của mô hình. Quy trình đánh giá giúp xác định xem các siêu tham số hiện tại có tốt hơn các siêu tham số trước đó hay không.

Ghi lại Kết quả

Điều quan trọng là phải ghi lại cả các số liệu hiệu suất và các siêu tham số tương ứng để tham khảo trong tương lai. Ultralytics YOLO tự động lưu các kết quả này ở định dạng CSV.

Lặp lại

Quá trình này được lặp lại cho đến khi đạt được số lần lặp đã đặt hoặc số liệu hiệu suất đạt yêu cầu. Mỗi lần lặp xây dựng dựa trên kiến thức thu được từ các lần chạy trước.

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 YOLO11. Mỗi tham số có một phạm vi giá trị cụ thể được xác định bởi một bộ giá trị (tuple) (min, max).

Tham số Loại Phạm vi giá trị Mô tả
lr0 float (1e-5, 1e-1) Tốc độ học ban đầu khi bắt đầu huấn luyện. Giá trị thấp hơn cung cấp quá trình huấn luyện ổn định hơn nhưng hội tụ chậm hơn
lrf float (0.01, 1.0) Hệ số learning rate cuối cùng dưới dạng một phần của lr0. Kiểm soát mức độ giảm learning rate trong quá trình huấn luyện.
momentum float (0.6, 0.98) Hệ số động lượng SGD. Giá trị cao hơn giúp duy trì hướng gradient nhất quán và có thể tăng tốc độ hội tụ
weight_decay float (0.0, 0.001) Hệ số điều chuẩn L2 để ngăn chặn việc huấn luyện quá mức. Các giá trị lớn hơn sẽ thực thi điều chuẩn mạnh hơn
warmup_epochs float (0.0, 5.0) Số lượng epochs cho quá trình khởi động tốc độ học tuyến tính. Giúp ngăn ngừa sự mất ổn định trong quá trình huấn luyện ban đầu.
warmup_momentum float (0.0, 0.95) Động lượng ban đầu trong giai đoạn khởi động. Tăng dần đến giá trị động lượng cuối cùng
box float (0.02, 0.2) Trọng số mất mát bounding box trong hàm mất mát tổng thể. Cân bằng hồi quy hộp so với phân loại
cls float (0.2, 4.0) Trọng số mất mát phân loại trong hàm mất mát tổng thể. Các giá trị cao hơn nhấn mạnh dự đoán lớp chính xác
hsv_h float (0.0, 0.1) Phạm vi tăng cường màu ngẫu nhiên trong không gian màu HSV. Giúp mô hình khái quát hóa trên các biến thể màu sắc
hsv_s float (0.0, 0.9) Phạm vi tăng cường độ bão hòa ngẫu nhiên trong không gian HSV. Mô phỏng các điều kiện ánh sáng khác nhau
hsv_v float (0.0, 0.9) Phạm vi tăng cường giá trị ngẫu nhiên (độ sáng). Giúp mô hình xử lý các mức độ phơi sáng khác nhau
degrees float (0.0, 45.0) Góc xoay tối đa để tăng cường dữ liệu, giúp mô hình bất biến với hướng của vật thể.
translate float (0.0, 0.9) Độ dịch chuyển tối đa để tăng cường dữ liệu, tính theo tỷ lệ kích thước ảnh. Cải thiện độ mạnh mẽ đối với vị trí vật thể.
scale float (0.0, 0.9) Phạm vi tăng cường tỷ lệ ngẫu nhiên. Giúp mô hình phát hiện các đối tượng ở các kích thước khác nhau
shear float (0.0, 10.0) Độ nghiêng tối đa để tăng cường dữ liệu. Thêm hiệu ứng méo phối cảnh vào ảnh huấn luyện.
perspective float (0.0, 0.001) Phạm vi tăng cường phối cảnh ngẫu nhiên. Mô phỏng các góc nhìn khác nhau
flipud float (0.0, 1.0) Xác suất lật ảnh dọc trong quá trình huấn luyện. Hữu ích cho ảnh chụp từ trên cao/trên không.
fliplr float (0.0, 1.0) Xác suất lật ảnh theo chiều ngang. Giúp mô hình trở nên bất biến đối với hướng đối tượng
mosaic float (0.0, 1.0) Xác suất sử dụng kỹ thuật mosaic augmentation, kết hợp 4 ảnh. Đặc biệt hữu ích cho việc phát hiện các vật thể nhỏ.
mixup float (0.0, 1.0) Xác suất sử dụng kỹ thuật mixup augmentation, trộn hai ảnh lại với nhau. Có thể cải thiện độ ổn định của mô hình.
copy_paste float (0.0, 1.0) Xác suất sử dụng kỹ thuật copy-paste augmentation. Giúp cải thiện hiệu suất phân vùng thể hiện.

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

Đây là cách xác định không gian tìm kiếm và sử dụng model.tune() phương pháp để sử dụng Tuner class để điều chỉnh siêu tham số của YOLO11n trên COCO8 trong 30 epochs với trình tối ưu hóa AdamW và bỏ qua việc vẽ đồ thị, lưu checkpoint và xác thực, ngoại trừ epoch cuối cùng để điều chỉnh nhanh hơn.

Ví dụ

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo11n.pt")

# Define search space
search_space = {
    "lr0": (1e-5, 1e-1),
    "degrees": (0.0, 45.0),
}

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(
    data="coco8.yaml",
    epochs=30,
    iterations=300,
    optimizer="AdamW",
    space=search_space,
    plots=False,
    save=False,
    val=False,
)

Tiếp tục phiên điều chỉnh siêu tham số bị gián đoạn

Bạn có thể tiếp tục phiên điều chỉnh siêu tham số 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 sử dụng theo 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 cũng cần cung cấp tất cả các đối số huấn luyện trước đó, bao gồm data, epochs, iterationsspace.

Sử dụng resume=True với model.tune()

from ultralytics import YOLO

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

# Define search space
search_space = {
    "lr0": (1e-5, 1e-1),
    "degrees": (0.0, 45.0),
}

# Resume previous run
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, resume=True)

# Resume tuning run with name 'tune_exp'
results = model.tune(data="coco8.yaml", epochs=50, iterations=300, space=search_space, name="tune_exp", resume=True)

Results

Sau khi bạn hoàn thành thành công quá trình điều chỉnh siêu tham số, bạn sẽ nhận được một số tệp và thư mục chứa kết quả của quá trình điều chỉnh. Phần sau đây mô tả từng thành phần:

Cấu trúc Tệp

Đây là cấu trúc thư mục của kết quả. Các thư mục huấn luyện như train1/ chứa các lần lặp điều chỉnh riêng lẻ, tức là một mô hình được huấn luyện với một bộ siêu tham số. Thư mục tune/ chứa kết quả điều chỉnh từ tất cả các lần huấn luyện mô hình riêng lẻ:

runs/
└── detect/
    ├── train1/
    ├── train2/
    ├── ...
    └── tune/
        ├── best_hyperparameters.yaml
        ├── best_fitness.png
        ├── tune_results.csv
        ├── tune_scatter_plots.png
        └── weights/
            ├── last.pt
            └── best.pt

Mô tả Tệp

best_hyperparameters.yaml

Tệp YAML này chứa các siêu tham số hoạt động tốt nhất được tìm thấy trong quá trình điều chỉnh. Bạn có thể sử dụng tệp này để khởi tạo các lần huấn luyện trong tương lai với các cài đặt được tối ưu hóa này.

  • Định dạng: YAML
  • Sử dụng: Kết quả siêu tham số
  • Ví dụ:

    # 558/900 iterations complete ✅ (45536.81s)
    # Results saved to /usr/src/ultralytics/runs/detect/tune
    # Best fitness=0.64297 observed at iteration 498
    # Best fitness metrics are {'metrics/precision(B)': 0.87247, 'metrics/recall(B)': 0.71387, 'metrics/mAP50(B)': 0.79106, 'metrics/mAP50-95(B)': 0.62651, 'val/box_loss': 2.79884, 'val/cls_loss': 2.72386, 'val/dfl_loss': 0.68503, 'fitness': 0.64297}
    # Best fitness model is /usr/src/ultralytics/runs/detect/train498
    # Best fitness hyperparameters are printed below.
    
    lr0: 0.00269
    lrf: 0.00288
    momentum: 0.73375
    weight_decay: 0.00015
    warmup_epochs: 1.22935
    warmup_momentum: 0.1525
    box: 18.27875
    cls: 1.32899
    dfl: 0.56016
    hsv_h: 0.01148
    hsv_s: 0.53554
    hsv_v: 0.13636
    degrees: 0.0
    translate: 0.12431
    scale: 0.07643
    shear: 0.0
    perspective: 0.0
    flipud: 0.0
    fliplr: 0.08631
    mosaic: 0.42551
    mixup: 0.0
    copy_paste: 0.0
    

best_fitness.png

Đây là biểu đồ hiển thị fitness (thường là một chỉ số hiệu suất như AP50) so với số lượng vòng lặp. Nó giúp bạn hình dung thuật toán di truyền hoạt động tốt như thế nào theo thời gian.

  • Định dạng: PNG
  • Sử dụng: Trực quan hóa hiệu suất

Độ phù hợp so với số lần lặp lại khi điều chỉnh siêu tham số

tune_results.csv

Một tệp CSV chứa kết quả chi tiết của mỗi lần lặp trong quá trình điều chỉnh. Mỗi hàng trong tệp đại diện cho một lần lặp và nó bao gồm các chỉ số như điểm fitness, độ chính xác, độ recall, cũng như các siêu tham số được sử dụng.

  • Định dạng: CSV
  • Sử dụng: Theo dõi kết quả theo từng lần lặp.
  • Ví dụ:
      fitness,lr0,lrf,momentum,weight_decay,warmup_epochs,warmup_momentum,box,cls,dfl,hsv_h,hsv_s,hsv_v,degrees,translate,scale,shear,perspective,flipud,fliplr,mosaic,mixup,copy_paste
      0.05021,0.01,0.01,0.937,0.0005,3.0,0.8,7.5,0.5,1.5,0.015,0.7,0.4,0.0,0.1,0.5,0.0,0.0,0.0,0.5,1.0,0.0,0.0
      0.07217,0.01003,0.00967,0.93897,0.00049,2.79757,0.81075,7.5,0.50746,1.44826,0.01503,0.72948,0.40658,0.0,0.0987,0.4922,0.0,0.0,0.0,0.49729,1.0,0.0,0.0
      0.06584,0.01003,0.00855,0.91009,0.00073,3.42176,0.95,8.64301,0.54594,1.72261,0.01503,0.59179,0.40658,0.0,0.0987,0.46955,0.0,0.0,0.0,0.49729,0.80187,0.0,0.0
    

tune_scatter_plots.png

Tệp này chứa các biểu đồ phân tán được tạo từ tune_results.csv, giúp bạn hình dung mối quan hệ giữa các siêu tham số và chỉ số hiệu suất khác nhau. Lưu ý rằng các siêu tham số được khởi tạo thành 0 sẽ không được điều chỉnh, chẳng hạn như degreesshear bên dưới.

  • Định dạng: PNG
  • Sử dụng: Phân tích dữ liệu thăm dò

Biểu đồ phân tán khi điều chỉnh siêu tham số

weights/

Thư mục này chứa các mô hình PyTorch đã lưu cho lần lặp cuối cùng và tốt nhất trong quá trình điều chỉnh siêu tham số.

  • last.pt: last.pt là trọng số từ epoch huấn luyện cuối cùng.
  • best.pt: best.pt là trọng số cho lần lặp đạt được điểm fitness tốt nhất.

Sử dụng các kết quả này, bạn có thể đưa ra các quyết định sáng suốt hơn cho các lần huấn luyện và phân tích mô hình trong tương lai. Hãy tham khảo các tạo tác này để hiểu mô hình của bạn hoạt động tốt như thế nào và bạn có thể cải thiện nó hơn nữa như thế nào.

Kết luận

Quá trình điều chỉnh siêu tham số trong Ultralytics YOLO được đơn giản hóa nhưng vẫn mạnh mẽ, nhờ vào phương pháp dựa trên thuật toán di truyền tập trung vào đột biến. Việc tuân theo các bước được nêu trong hướng dẫn này sẽ giúp bạn điều chỉnh mô hình của mình một cách có hệ thống để đạt được hiệu suất tốt hơn.

Đọc thêm

  1. Tối ưu hóa siêu tham số trên Wikipedia
  2. Hướng dẫn về sự phát triển của siêu tham số YOLOv5
  3. Điều chỉnh siêu tham số hiệu quả với Ray Tune và YOLO11

Để hiểu sâu hơn, bạn có thể khám phá Tuner class mã nguồn và tài liệu đi kèm. Nếu bạn có bất kỳ câu hỏi, yêu cầu tính năng hoặc cần hỗ trợ thêm, vui lòng liên hệ với chúng tôi trên GitHub hoặc Discord.

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

Làm cách nào để tối ưu hóa tốc độ học cho Ultralytics YOLO trong quá trình điều chỉnh siêu tham số?

Để tối ưu hóa tốc độ học cho Ultralytics YOLO, hãy bắt đầu bằng cách đặt tốc độ học ban đầu bằng cách sử dụng tham số lr0 parameter. Các giá trị phổ biến nằm trong khoảng từ 0.001 đến 0.01. Trong quá trình điều chỉnh siêu tham số, giá trị này sẽ bị thay đổi để tìm ra cài đặt tối ưu. Bạn có thể sử dụng phương pháp model.tune() để tự động hóa quy trình này. Ví dụ:

Ví dụ

from ultralytics import YOLO

# Initialize the YOLO model
model = YOLO("yolo11n.pt")

# Tune hyperparameters on COCO8 for 30 epochs
model.tune(data="coco8.yaml", epochs=30, iterations=300, optimizer="AdamW", plots=False, save=False, val=False)

Để biết thêm chi tiết, hãy xem trang cấu hình Ultralytics YOLO.

Những lợi ích của việc sử dụng thuật toán di truyền để điều chỉnh siêu tham số trong YOLO11 là gì?

Các thuật toán di truyền trong Ultralytics YOLO11 cung cấp một phương pháp mạnh mẽ để khám phá không gian siêu tham số, dẫn đến hiệu suất mô hình được tối ưu hóa cao. Các lợi ích chính bao gồm:

  • Tìm kiếm hiệu quả: Các thuật toán di truyền như đột biến có thể nhanh chóng khám phá một tập hợp lớn các siêu tham số.
  • Tránh cực tiểu cục bộ: Bằng cách đưa vào tính ngẫu nhiên, chúng giúp tránh các cực tiểu cục bộ, đảm bảo tối ưu hóa toàn cục tốt hơn.
  • Số liệu hiệu suất: Chúng điều chỉnh dựa trên các số liệu hiệu suất như AP50 và F1-score.

Để xem cách các thuật toán di truyền có thể tối ưu hóa các siêu tham số, hãy xem hướng dẫn về sự phát triển của siêu tham số.

Quá trình điều chỉnh siêu tham số mất bao lâu cho Ultralytics YOLO?

Thời gian cần thiết để điều chỉnh siêu tham số với Ultralytics YOLO phần lớn phụ thuộc vào một số yếu tố như kích thước của tập dữ liệu, độ phức tạp của kiến trúc mô hình, số lượng lần lặp và tài nguyên tính toán có sẵn. Ví dụ: việc điều chỉnh YOLO11n trên một tập dữ liệu như COCO8 trong 30 epochs có thể mất vài giờ đến vài ngày, tùy thuộc vào phần cứng.

Để quản lý hiệu quả thời gian điều chỉnh, hãy xác định trước một ngân sách điều chỉnh rõ ràng (liên kết đến phần nội bộ). Điều này giúp cân bằng việc phân bổ tài nguyên và các mục tiêu tối ưu hóa.

Tôi nên sử dụng những chỉ số nào để đánh giá hiệu suất mô hình trong quá trình điều chỉnh siêu tham số trong YOLO?

Khi đánh giá hiệu suất mô hình trong quá trình điều chỉnh siêu tham số trong YOLO, bạn có thể sử dụng một số số liệu chính:

  • AP50: Độ chính xác trung bình tại ngưỡng IoU là 0,50.
  • F1-Score: Trung bình điều hòa của độ chính xác và độrecall.
  • Độ chính xác và Độ recall: Các số liệu riêng lẻ cho biết độ chính xác của mô hình trong việc xác định true positives so với false positives và false negatives.

Các số liệu này giúp bạn hiểu rõ hơn về các khía cạnh khác nhau trong hiệu suất mô hình của bạn. Tham khảo hướng dẫn các chỉ số đánh giá hiệu suất Ultralytics YOLO để có cái nhìn tổng quan toàn diện.

Tôi có thể sử dụng Ray Tune để tối ưu hóa siêu tham số nâng cao với YOLO11 không?

Có, Ultralytics YOLO11 tích hợp với Ray Tune để tối ưu hóa siêu tham số nâng cao. Ray Tune cung cấp các thuật toán tìm kiếm phức tạp như Tối ưu hóa Bayesian và Hyperband, cùng với khả năng thực thi song song để tăng tốc quá trình điều chỉnh.

Để sử dụng Ray Tune với YOLO11, chỉ cần đặt use_ray=True tham số trong model.tune() gọi phương thức. Để biết thêm chi tiết và ví dụ, hãy xem Hướng dẫn tích hợp Ray Tune.



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

Bình luận