Tiến hóa siêu tham số
📚 Hướng dẫn này giải thích sự tiến hóa siêu tham số cho YOLOv5 🚀 Tiến hóa siêu tham số là một phương pháp Tối ưu hóa siêu tham số bằng cách sử dụng Thuật toán di truyền (GA) để tối ưu hóa.
Các siêu tham số trong ML kiểm soát các khía cạnh khác nhau của đào tạo và việc tìm ra các giá trị tối ưu cho chúng có thể là một thách thức. Các phương pháp truyền thống như tìm kiếm lưới có thể nhanh chóng trở nên khó hiểu do 1) không gian tìm kiếm chiều cao, 2) mối tương quan không xác định giữa các kích thước và 3) tính chất tốn kém của việc đánh giá sự phù hợp tại mỗi điểm, làm cho GA trở thành một ứng cử viên phù hợp cho các tìm kiếm siêu tham số.
Trước khi bắt đầu
Sao chép repo và cài đặt requirements.txt trong một PythonMôi trường >=3.8.0 , bao gồm PyTorch>=1,8. Mô hình và bộ dữ liệu tải xuống tự động từ phiên bản mới nhất YOLOv5 phát hành.
git clone https://github.com/ultralytics/yolov5 # clone
cd yolov5
pip install -r requirements.txt # install
1. Khởi tạo siêu tham số
YOLOv5 có khoảng 30 siêu tham số được sử dụng cho các cài đặt đào tạo khác nhau. Chúng được định nghĩa trong *.yaml
các tệp trong /data/hyps
thư mục. Dự đoán ban đầu tốt hơn sẽ tạo ra kết quả cuối cùng tốt hơn, vì vậy điều quan trọng là phải khởi tạo các giá trị này đúng cách trước khi phát triển. Nếu nghi ngờ, chỉ cần sử dụng các giá trị mặc định, được tối ưu hóa cho YOLOv5 COCO đào tạo từ đầu.
# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license
# Hyperparameters for low-augmentation COCO training from scratch
# python train.py --batch 64 --cfg yolov5n6.yaml --weights '' --data coco.yaml --img 640 --epochs 300 --linear
# See tutorials for hyperparameter evolution https://github.com/ultralytics/yolov5#tutorials
lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.01 # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937 # SGD momentum/Adam beta1
weight_decay: 0.0005 # optimizer weight decay 5e-4
warmup_epochs: 3.0 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
box: 0.05 # box loss gain
cls: 0.5 # cls loss gain
cls_pw: 1.0 # cls BCELoss positive_weight
obj: 1.0 # obj loss gain (scale with pixels)
obj_pw: 1.0 # obj BCELoss positive_weight
iou_t: 0.20 # IoU training threshold
anchor_t: 4.0 # anchor-multiple threshold
# anchors: 3 # anchors per output layer (0 to ignore)
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4 # image HSV-Value augmentation (fraction)
degrees: 0.0 # image rotation (+/- deg)
translate: 0.1 # image translation (+/- fraction)
scale: 0.5 # image scale (+/- gain)
shear: 0.0 # image shear (+/- deg)
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
flipud: 0.0 # image flip up-down (probability)
fliplr: 0.5 # image flip left-right (probability)
mosaic: 1.0 # image mosaic (probability)
mixup: 0.0 # image mixup (probability)
copy_paste: 0.0 # segment copy-paste (probability)
2. Xác định thể dục
Thể dục là giá trị mà chúng tôi tìm cách tối đa hóa. Trong YOLOv5 Chúng tôi định nghĩa chức năng thể dục mặc định là sự kết hợp có trọng số của các chỉ số: mAP@0.5
đóng góp 10% trọng lượng và mAP@0.5:0.95
đóng góp 90% còn lại, với Chính xác P
và Nhớ R
vắng mặt. Bạn có thể điều chỉnh những điều này khi bạn thấy phù hợp hoặc sử dụng định nghĩa thể dục mặc định trong tiện ích / metrics.py (được khuyến nghị).
def fitness(x):
"""Return model fitness as the sum of weighted metrics [P, R, mAP@0.5, mAP@0.5:0.95]."""
w = [0.0, 0.0, 0.1, 0.9] # weights for [P, R, mAP@0.5, mAP@0.5:0.95]
return (x[:, :4] * w).sum(1)
3. Phát triển
Evolution is performed about a base scenario which we seek to improve upon. The base scenario in this example is finetuning COCO128 for 10 epochs using pretrained YOLOv5s. The base scenario training command is:
Để phát triển các siêu tham số Cụ thể cho kịch bản này, bắt đầu từ các giá trị ban đầu của chúng tôi được xác định trong Mục 1.và tối đa hóa thể lực được xác định trong Mục 2.thêm --evolve
:
# Single-GPU
python train.py --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache --evolve
# Multi-GPU
for i in 0 1 2 3 4 5 6 7; do
sleep $(expr 30 \* $i) && # 30-second delay (optional)
echo 'Starting GPU '$i'...' &&
nohup python train.py --epochs 10 --data coco128.yaml --weights yolov5s.pt --cache --device $i --evolve > evolve_gpu_$i.log &
done
# Multi-GPU bash-while (not recommended)
for i in 0 1 2 3 4 5 6 7; do
sleep $(expr 30 \* $i) && # 30-second delay (optional)
echo 'Starting GPU '$i'...' &&
"$(while true; do nohup python train.py... --device $i --evolve 1 > evolve_gpu_$i.log; done)" &
done
Cài đặt tiến hóa mặc định sẽ chạy kịch bản cơ sở 300 lần, tức là trong 300 thế hệ. Bạn có thể sửa đổi các thế hệ thông qua --evolve
lập luận, tức là python train.py --evolve 1000
.
Các nhà khai thác di truyền chính là Crossover và đột biến. Trong công việc này, đột biến được sử dụng, với xác suất 80% và phương sai 0,04 để tạo ra con cái mới dựa trên sự kết hợp của cha mẹ tốt nhất từ tất cả các thế hệ trước. Kết quả được ghi vào runs/evolve/exp/evolve.csv
, và con cái có thể lực cao nhất được cứu mỗi thế hệ như runs/evolve/hyp_evolved.yaml
:
# YOLOv5 Hyperparameter Evolution Results
# Best generation: 287
# Last generation: 300
# metrics/precision, metrics/recall, metrics/mAP_0.5, metrics/mAP_0.5:0.95, val/box_loss, val/obj_loss, val/cls_loss
# 0.54634, 0.55625, 0.58201, 0.33665, 0.056451, 0.042892, 0.013441
lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.2 # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937 # SGD momentum/Adam beta1
weight_decay: 0.0005 # optimizer weight decay 5e-4
warmup_epochs: 3.0 # warmup epochs (fractions ok)
warmup_momentum: 0.8 # warmup initial momentum
warmup_bias_lr: 0.1 # warmup initial bias lr
box: 0.05 # box loss gain
cls: 0.5 # cls loss gain
cls_pw: 1.0 # cls BCELoss positive_weight
obj: 1.0 # obj loss gain (scale with pixels)
obj_pw: 1.0 # obj BCELoss positive_weight
iou_t: 0.20 # IoU training threshold
anchor_t: 4.0 # anchor-multiple threshold
# anchors: 3 # anchors per output layer (0 to ignore)
fl_gamma: 0.0 # focal loss gamma (efficientDet default gamma=1.5)
hsv_h: 0.015 # image HSV-Hue augmentation (fraction)
hsv_s: 0.7 # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4 # image HSV-Value augmentation (fraction)
degrees: 0.0 # image rotation (+/- deg)
translate: 0.1 # image translation (+/- fraction)
scale: 0.5 # image scale (+/- gain)
shear: 0.0 # image shear (+/- deg)
perspective: 0.0 # image perspective (+/- fraction), range 0-0.001
flipud: 0.0 # image flip up-down (probability)
fliplr: 0.5 # image flip left-right (probability)
mosaic: 1.0 # image mosaic (probability)
mixup: 0.0 # image mixup (probability)
copy_paste: 0.0 # segment copy-paste (probability)
Chúng tôi khuyến nghị tối thiểu 300 thế hệ tiến hóa để có kết quả tốt nhất. Lưu ý rằng quá trình tiến hóa nói chung là tốn kém và tốn thời gian, vì kịch bản cơ bản được đào tạo hàng trăm lần, có thể đòi hỏi hàng trăm hoặc hàng ngàn GPU Giờ.
4. Hình dung
evolve.csv
được vẽ như sau: evolve.png
bằng cách utils.plots.plot_evolve()
Sau khi tiến hóa kết thúc với một biểu đồ con trên mỗi siêu tham số hiển thị các giá trị thể dục (trục y) so với các giá trị siêu tham số (trục x). Màu vàng cho biết nồng độ cao hơn. Phân phối dọc chỉ ra rằng một tham số đã bị vô hiệu hóa và không biến đổi. Đây là người dùng có thể lựa chọn trong meta
từ điển trong train.py, và rất hữu ích để sửa các tham số và ngăn chúng phát triển.
Môi trường được hỗ trợ
Ultralytics Cung cấp một loạt các môi trường sẵn sàng sử dụng, mỗi môi trường được cài đặt sẵn với các phụ thuộc thiết yếu như CUDA, CUDNN,Pythonvà PyTorch, để khởi động các dự án của bạn.
- Tự do GPU Sổ ghi chép:
- Google Đám mây: Hướng dẫn bắt đầu nhanh GCP
- Amazon: Hướng dẫn bắt đầu nhanh AWS
- Azure: Hướng dẫn bắt đầu nhanh AzureML
- Docker: Hướng dẫn bắt đầu nhanh Docker
Tình trạng dự án
Huy hiệu này cho biết rằng tất cả YOLOv5 Các bài kiểm tra Tích hợp liên tục (CI) GitHub Actions đã vượt qua thành công. Các bài kiểm tra CI này kiểm tra nghiêm ngặt chức năng và hiệu suất của YOLOv5 trên các khía cạnh chính khác nhau: đào tạo, xác nhận, suy luận, xuất khẩu và điểm chuẩn. Chúng đảm bảo hoạt động nhất quán và đáng tin cậy trên macOS, Windows và Ubuntu, với các thử nghiệm được tiến hành 24 giờ một lần và theo mỗi cam kết mới.