Mẹo để có kết quả tập luyện tốt nhất
📚 Hướng dẫn này giải thích cách tạo ra kết quả mAP và đào tạo tốt nhất với YOLOv5 🚀.
Hầu hết thời gian có thể đạt được kết quả tốt mà không cần thay đổi mô hình hoặc cài đặt đào tạo, miễn là tập dữ liệu của bạn đủ lớn và được gắn nhãn tốt . Nếu lúc đầu bạn không đạt đượ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 nên đào tạo 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ả đào tạo 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 biểu đồ kết quả (tổn thất tàu hỏa, tổn thất val, P, R, mAP), đường cong PR, ma trận nhầm lẫn, khảm đào tạo, kết quả kiểm tra và hình ảnh thống kê tập dữ liệu như labels.png. Tất cả những thứ này đều nằm trong project/name
thư mục, thông thường yolov5/runs/train/exp
.
Chúng tôi đã biên soạn một hướng dẫn đầy đủ cho người dùng muốn có được kết quả tốt nhất trên YOLOv5 đào tạo bên dưới.
Bộ dữ liệu
- Hình ảnh cho mỗi lớp. Khuyến nghị ≥ 1500 hình ảnh cho mỗi lớp
- Số lượng thể hiện trên mỗi lớp. Khuyến nghị ≥ 10000 thể hiện (đối tượng được gắn nhãn) trên mỗi lớp
- Đa dạng 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 bạn nên sử 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, nguồn khác nhau (trích xuất trực tuyến, thu thập tại địa phương, 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. Việc gắn nhãn một phần sẽ không hiệu quả.
- Độ chính xác của nhãn. Nhãn phải bao quanh chặt chẽ từng đối tượng. Không được có khoảng cách giữa đối tượng và hộp giới hạn của nó. Không được có đối tượng nào bị thiếu nhãn.
- Xác minh nhãn. Xem
train_batch*.jpg
trên tàu bắt đầu kiểm tra nhãn của bạn có xuất hiện chính xác không, tức là xem ví dụ khảm. - Hình ảnh nền. Hình ảnh nền là hình ảnh không có đối tượng được thêm vào tập dữ liệu để giảm Số dương tính giả (FP). Chúng tôi khuyên dùng khoảng 0-10% hình ảnh nền để giúp giảm FP (COCO có 1000 hình ảnh nền để tham khảo, chiếm 1% tổng số). Không cần nhãn cho hình ảnh nền.
Lựa chọn mô hình
Các mô hình lớn hơn như YOLOv5x và YOLOv5x6 sẽ tạo ra 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 hơn CUDA bộ nhớ để đào tạo 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 đám mây , chúng tôi khuyên dùng YOLOv5l/x. Xem bảng README của chúng tôi để so sánh đầy đủ tất cả các mô hình.
- Bắt đầu bằng mức tạ đã được tập luyện trước. Được khuyến nghị cho các tập dữ liệu có quy mô vừa và nhỏ (tức là VOC, Máy bay không người lái VisDrone, Lúa mì toàn cầu). Truyền tên của mô hình cho
--weights
tranh luận. Các mô hình tải xuống tự động từ mới nhất YOLOv5 giải phóng.
python train.py --data custom.yaml --weights yolov5s.pt
yolov5m.pt
yolov5l.pt
yolov5x.pt
custom_pretrained.pt
- Bắt đầu từ con số 0. Được khuyến nghị cho các tập dữ liệu lớn (tức là COCO, Đối tượng365, OIV6). Truyền kiến trúc mô hình YAML mà bạn quan tâm, cùng với một giá trị rỗng
--weights ''
lý lẽ:
python train.py --data custom.yaml --weights '' --cfg yolov5s.yaml
yolov5m.yaml
yolov5l.yaml
yolov5x.yaml
Cài đặt đào tạo
Trước khi sửa đổi bất kỳ điều gì, trước tiên hãy đào tạo với các thiết lập mặc định để thiết lập đường cơ sở hiệu suất . Danh sách đầy đủ các thiết lập train.py có thể được tìm thấy trong train.py argparser.
- Epochs . Bắt đầu với 300 epochs. Nếu điều này overfit sớm thì bạn có thể giảm epochs. Nếu overfit không xảy ra sau 300 epochs, hãy đào tạo lâu hơn, tức là 600, 1200 epochs, v.v.
- Kích thước hình ảnh. COCO đào tạo ở độ 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ên nó có thể được hưởng lợi từ việc đào tạo ở độ phân giải cao hơn như--img 1280
. Nếu có nhiều đối tượng nhỏ thì các tập dữ liệu tùy chỉnh sẽ được hưởng lợi từ việc đào tạo ở độ 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--img
khi khóa đào tạo được tiến hành, tức là nếu bạn đào tạo 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ô hàng . 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 số liệu thống kê batchnorm kém và nên tránh. - 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 đào tạo với các siêu tham số mặc định trước khi nghĩ đến việc sửa đổi bất kỳ siêu tham số nào. Nhìn chung, việc tăng các siêu tham số tăng cường sẽ làm giảm và trì hoãn việc quá khớp, cho phép đào tạo lâu hơn và mAP cuối cùng cao hơn. Giảm các siêu tham số tăng thành phần mất mát như
hyp['obj']
sẽ giúp giảm tình trạng quá khớp trong các thành phần mất mát cụ thể đó. Để biết phương pháp tự động tối ưu hóa các siêu tham số này, hãy xem Hướng dẫn về sự tiến hóa của siêu tham số.
Đọc thêm
Nếu bạn muốn biết thêm, một nơi tốt để bắt đầu là 'Recipe for Training Neural Networks ' của Karpathy, nơi có những ý tưởng tuyệt vời về đào tạo có thể á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/
Chúc may mắn 🍀 và hãy cho chúng tôi biết nếu bạn có bất kỳ câu hỏi nào khác nhé!