Mẹo để có kết quả huấn luyện YOLOv5 tốt nhất
📚 Hướng dẫn này giải thích cách tạo ra mAP và kết quả huấn luyện tốt nhất với YOLOv5 🚀.
Thông thường, có thể đạt được kết quả tốt mà không cần thay đổi các mô hình hoặc cài đặt huấn luyện, với điều kiện bộ dữ liệu của bạn đủ lớn và được gắn nhãn tốt. Nếu ban đầu bạn không nhận được kết quả tốt, có những bước bạn có thể thực hiện để cải thiện, nhưng chúng tôi luôn khuyên người dùng trước tiên hãy huấn luyện với tất cả các cài đặt mặc định trước khi xem xét bất kỳ thay đổi nào. Điều này giúp thiết lập đường cơ sở hiệu suất và xác định các lĩnh vực cần cải thiện.
Nếu bạn có thắc mắc về kết quả huấn luyện của mình chúng tôi khuyên bạn nên cung cấp lượng thông tin tối đa có thể nếu bạn mong đợi một phản hồi hữu ích, bao gồm các đồ thị kết quả (mất mát huấn luyện, mất mát validation, P, R, mAP), đường cong PR, ma trận nhầm lẫn, huấn luyện mosaics, kết quả kiểm thử và hình ảnh thống kê tập dữ liệu như labels.png. Tất cả đều nằm trong project/name
thư mục, thường là yolov5/runs/train/exp
.
Chúng tôi đã tập hợp một hướng dẫn đầy đủ cho những người dùng muốn đạt được kết quả tốt nhất trên các buổi huấn luyện YOLOv5 của họ bên dưới.
Bộ dữ liệu
- Số lượng ảnh trên mỗi lớp. Nên dùng ≥ 1500 ảnh trên mỗi lớp
- Số lượng đối tượng trên mỗi lớp. Nên có ≥ 10000 đối tượng (đã được gán nhãn) trên mỗi lớp
- Sự đa dạng của hình ảnh. Phải đại diện cho môi trường triển khai. Đối với các trường hợp sử dụng thực tế, chúng tôi khuyên dùng hình ảnh từ các thời điểm khác nhau trong ngày, các mùa khác nhau, thời tiết khác nhau, ánh sáng khác nhau, góc độ khác nhau, các nguồn khác nhau (thu thập trên mạng, thu thập cục bộ, các máy ảnh khác nhau), v.v.
- Tính nhất quán của nhãn. Tất cả các trường hợp của tất cả các lớp trong tất cả các hình ảnh phải được gắn nhãn. Gắn nhãn một phần sẽ không hoạt động.
- Độ chính xác của nhãn. Nhãn phải bao quanh chặt chẽ từng đối tượng. Không nên có khoảng trống giữa một đối tượng và bounding box của nó. Không có đối tượng nào bị thiếu nhãn.
- Xác minh nhãn. Xem
train_batch*.jpg
khi bắt đầu huấn luyện để xác minh nhãn của bạn hiển thị chính xác, ví dụ: ví dụ mosaic. - Ảnh nền. Ảnh nền là ảnh không có đối tượng được thêm vào bộ dữ liệu để giảm False Positive (FP). Chúng tôi khuyên dùng khoảng 0-10% ảnh nền để giúp giảm FP (COCO có 1000 ảnh nền để tham khảo, 1% tổng số). Không cần nhãn cho ảnh nền.
Lựa chọn mô hình
Các mô hình lớn hơn như YOLOv5x và YOLOv5x6 sẽ cho kết quả tốt hơn trong hầu hết các trường hợp, nhưng có nhiều tham số hơn, yêu cầu nhiều bộ nhớ CUDA hơn để huấn luyện và chạy chậm hơn. Đối với triển khai di động, chúng tôi khuyên dùng YOLOv5s/m, đối với triển khai trên cloud, chúng tôi khuyên dùng YOLOv5l/x. Xem bảng trong README của chúng tôi để so sánh đầy đủ tất cả các mô hình.
-
Bắt đầu từ các trọng số đã được huấn luyện trước. Được khuyến nghị cho các tập dữ liệu có kích thước vừa và nhỏ (ví dụ: VOC, VisDrone, GlobalWheat). Truyền tên của mô hình vào
--weights
đối số. Các mô hình được tự động tải xuống từ phiên bản YOLOv5 mới nhất.python train.py --data custom.yaml --weights yolov5s.pt python train.py --data custom.yaml --weights yolov5m.pt python train.py --data custom.yaml --weights yolov5l.pt python train.py --data custom.yaml --weights yolov5x.pt python train.py --data custom.yaml --weights custom_pretrained.pt
-
Bắt đầu từ đầu. Được khuyến nghị cho các tập dữ liệu lớn (ví dụ: COCO, Objects365, OIv6). Truyền YAML kiến trúc mô hình mà bạn quan tâm, cùng với một
--weights ''
đối số:python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml python train.py --data custom.yaml --weights '' --cfg yolov5m.yaml python train.py --data custom.yaml --weights '' --cfg yolov5l.yaml python train.py --data custom.yaml --weights '' --cfg yolov5x.yaml
Cài đặt huấn luyện
Trước khi sửa đổi bất cứ điều gì, hãy huấn luyện trước với các cài đặt mặc định để thiết lập cơ sở hiệu suất. Bạn có thể tìm thấy danh sách đầy đủ các cài đặt train.py trong train.py argparser.
- Epochs. Bắt đầu với 300 epochs. Nếu điều này bị overfitting sớm thì bạn có thể giảm số lượng epochs. Nếu overfitting không xảy ra sau 300 epochs, hãy huấn luyện lâu hơn, ví dụ: 600, 1200, v.v. epochs.
- Kích thước hình ảnh. COCO huấn luyện ở độ phân giải gốc của
--img 640
, mặc dù do số lượng lớn các đối tượng nhỏ trong tập dữ liệu, nó có thể hưởng lợi từ việc huấn luyện ở độ phân giải cao hơn, chẳng hạn như--img 1280
. Nếu có nhiều đối tượng nhỏ, thì các bộ dữ liệu tùy chỉnh sẽ được hưởng lợi từ việc huấn luyện ở độ phân giải gốc hoặc cao hơn. Kết quả suy luận tốt nhất thu được ở cùng một độ phân giải.--img
như quá trình huấn luyện đã chạy, ví dụ: nếu bạn huấn luyện tại--img 1280
bạn cũng nên kiểm tra và phát hiện tại--img 1280
. - Kích thước lô (Batch size). Sử dụng lớn nhất
--batch-size
mà phần cứng của bạn cho phép. Kích thước lô nhỏ tạo ra kết quả kém chuẩn hóa hàng loạt thống kê và nên tránh. Bạn có thể sử dụng--batch-size -1
để tự động chọn kích thước lô tối ưu cho GPU của bạn. - Tỷ lệ học tập (Learning rate). Lịch trình learning rate mặc định hoạt động tốt trong hầu hết các trường hợp. Để hội tụ nhanh hơn, bạn có thể thử sử dụng
--cos-lr
để bật tính năng lập lịch tốc độ học cosine, giúp giảm dần tốc độ học theo đường cong cosine qua các epochs. - Tăng cường dữ liệu (Data augmentation). YOLOv5 bao gồm các kỹ thuật tăng cường khác nhau như mosaic, kết hợp nhiều hình ảnh huấn luyện. Đối với một vài epoch cuối, hãy cân nhắc sử dụng
--close-mosaic 10
để tắt tính năng tăng cường mosaic, có thể giúp ổn định quá trình huấn luyện. - Các siêu tham số. Các siêu tham số mặc định nằm trong hyp.scratch-low.yaml. Chúng tôi khuyên bạn nên huấn luyện với các siêu tham số mặc định trước khi nghĩ đến việc sửa đổi bất kỳ tham số nào. Nói chung, việc tăng các siêu tham số tăng cường dữ liệu sẽ làm giảm và trì hoãn tình trạng overfitting, cho phép huấn luyện lâu hơn và mAP cuối cùng cao hơn. Việc giảm các siêu tham số khuếch đại thành phần loss như
hyp['obj']
sẽ giúp giảm tình trạng overfitting trong các thành phần loss cụ thể đó. Để có phương pháp tự động hóa việc tối ưu hóa các siêu tham số này, hãy xem Hướng dẫn về Biến đổi Siêu tham số. - Huấn luyện độ chính xác hỗn hợp (Mixed precision). Bật huấn luyện độ chính xác hỗn hợp với
--amp
để tăng tốc độ huấn luyện và giảm mức sử dụng bộ nhớ mà không làm giảm độ chính xác của mô hình. - Huấn luyện trên nhiều GPU. Nếu bạn có nhiều GPU, hãy sử dụng
--device 0,1,2,3
để phân phối quá trình huấn luyện trên chúng, điều này có thể giảm đáng kể thời gian huấn luyện. - Dừng sớm. Sử dụng
--patience 50
để dừng quá trình huấn luyện nếu các số liệu xác thực không được cải thiện trong 50 epochs, giúp tiết kiệm thời gian và ngăn ngừa tình trạng overfitting.
Kỹ thuật tối ưu hóa nâng cao
- Học chuyển giao. Đối với các bộ dữ liệu chuyên biệt, hãy bắt đầu với các trọng số được huấn luyện trước và dần dần mở đóng băng các lớp trong quá trình huấn luyện để điều chỉnh mô hình cho tác vụ cụ thể của bạn.
- Model pruning. Sau khi huấn luyện, hãy cân nhắc tỉa bớt mô hình của bạn để loại bỏ các trọng số dư thừa và giảm kích thước mô hình mà không làm giảm hiệu suất đáng kể.
- Model ensemble. Đối với các ứng dụng quan trọng, hãy huấn luyện nhiều mô hình với các cấu hình khác nhau và kết hợp các dự đoán của chúng để cải thiện độ chính xác.
- Tăng cường dữ liệu lúc thử nghiệm. Bật TTA trong quá trình suy luận với
--augment
để cải thiện độ chính xác dự đoán bằng cách lấy trung bình kết quả từ các phiên bản tăng cường của ảnh đầu vào.
Đọc thêm
Nếu bạn muốn biết thêm, một nơi tốt để bắt đầu là 'Công thức đào tạo Mạng nơ-ron' của Karpathy, nơi có những ý tưởng tuyệt vời để đào tạo áp dụng rộng rãi trên tất cả các lĩnh vực ML: https://karpathy.github.io/2019/04/25/recipe/
Để biết thêm thông tin chi tiết về cài đặt và cấu hình huấn luyện, hãy tham khảo tài liệu về cài đặt huấn luyện của Ultralytics, tài liệu này cung cấp giải thích toàn diện về tất cả các tham số có sẵn.
Chúc bạn may mắn 🍀 và cho chúng tôi biết nếu bạn có bất kỳ câu hỏi nào khác nhé!
Câu hỏi thường gặp
Làm thế nào để biết mô hình của tôi có bị overfitting hay không?
Mô hình của bạn có thể bị overfitting nếu training loss tiếp tục giảm trong khi validation loss bắt đầu tăng. Theo dõi validation mAP - nếu nó chững lại hoặc giảm trong khi training loss tiếp tục cải thiện, đó là dấu hiệu của overfitting. Các giải pháp bao gồm thêm dữ liệu huấn luyện, tăng cường data augmentation hoặc triển khai các kỹ thuật regularization.
Kích thước lô tối ưu để huấn luyện YOLOv5 là bao nhiêu?
Kích thước lô tối ưu phụ thuộc vào bộ nhớ GPU của bạn. Kích thước lô lớn hơn thường cung cấp số liệu thống kê chuẩn hóa lô tốt hơn và tính ổn định huấn luyện. Sử dụng kích thước lô lớn nhất mà phần cứng của bạn có thể xử lý mà không bị hết bộ nhớ. Bạn có thể sử dụng --batch-size -1
để tự động xác định kích thước lô tối ưu cho thiết lập của bạn.
Làm cách nào để tăng tốc quá trình huấn luyện YOLOv5?
Để tăng tốc độ huấn luyện, hãy thử: bật huấn luyện độ chính xác hỗn hợp với --amp
, sử dụng nhiều GPU với --device 0,1,2,3
, lưu vào bộ nhớ đệm tập dữ liệu của bạn bằng --cache
, và tối ưu hóa kích thước lô của bạn. Ngoài ra, hãy cân nhắc sử dụng một biến thể mô hình nhỏ hơn như YOLOv5s nếu độ chính xác tuyệt đối không phải là yếu tố quan trọng.