Bỏ qua nội dung

Mẹo để có được điều tốt nhất YOLOv5 Kết quả đào tạo

📚 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 đối tượng. 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.

Phân tích COCO

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.

YOLOv5 Mô hình

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ừ 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
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 đà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 chất lượng 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 bạn GPU .
  • Tốc độ học tập . Lịch trình tốc độ học 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 cờ để cho phép lập lịch tốc độ học cosin, giúp giảm dần tốc độ học theo đường cong cosin qua nhiều thời đại.
  • Tăng cường dữ liệu . YOLOv5 bao gồm nhiều kỹ thuật tăng cường khác nhau như khảm, kết hợp nhiều hình ảnh đào tạo. Đối với một vài kỷ nguyên gần đây, hãy cân nhắc sử dụng --close-mosaic 10 để vô hiệu hóa chức năng tăng cường khảm, có thể giúp ổn định quá trình đào tạo.
  • 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ố.
  • Đào tạo chính xác kết hợp . Cho phép đào tạo độ chính xác hỗn hợp với --amp để tăng tốc quá trình đào tạo và giảm dung lượng bộ nhớ mà không làm giảm độ chính xác của mô hình.
  • Đa- GPU đào tạo. Nếu bạn có nhiều GPU, hãy sử dụng --device 0,1,2,3 để phân bổ đào tạo cho họ, điều này có thể giảm đáng kể thời gian đào tạo.
  • Dừng sớm. Sử dụng --patience 50 dừng đào tạo nếu số liệu xác thực không cải thiện trong 50 kỷ nguyên, tiết kiệm thời gian và ngăn ngừa hiện tượng quá khớp.

Kỹ thuật tối ưu hóa nâng cao

  • Chuyển giao học tập . Đối với các tập dữ liệu chuyên biệt, hãy bắt đầu với trọng số được đào tạo trước và dần dần mở khóa các lớp trong quá trình đào tạo để điều chỉnh mô hình cho phù hợp với nhiệm vụ cụ thể của bạn.
  • Cắt tỉa mô hình . Sau khi đào tạo, hãy cân nhắc cắt tỉa mô hình của bạn để loại bỏ 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ể.
  • Mô hình tổng hợp . Đối với các ứng dụng quan trọng, hãy đào tạo 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 thời gian thử nghiệm . Bật TTA trong quá trình suy luận với --augment để cải thiện độ chính xác của dự đoán bằng cách tính trung bình kết quả từ các phiên bản tăng cường của hình ả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à '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/

Để biết thông tin chi tiết hơn về cài đặt và cấu hình đào tạo, hãy tham khảo tài liệu cài đặt đào tạo Ultralytics , trong đó cung cấp giải thích toàn diện về tất cả các thông số khả dụng.

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é!

CÂU HỎI THƯỜNG GẶP

Làm sao để biết mô hình của tôi có bị quá khớp không?

Mô hình của bạn có thể bị quá khớp nếu mất mát đào tạo tiếp tục giảm trong khi mất mát xác thực bắt đầu tăng. Theo dõi mAP xác thực - nếu nó ổn định hoặc giảm trong khi mất mát đào tạo tiếp tục cải thiện, đó là dấu hiệu của quá khớp. Các giải pháp bao gồm thêm nhiều dữ liệu đào tạo hơn, tăng cường dữ liệu hoặc triển khai các kỹ thuật chính quy hóa.

Kích thước lô tối ưu cho đào tạo là bao nhiêu? YOLOv5 ?

Kích thước lô tối ưu phụ thuộc vào bạn GPU bộ nhớ. 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 khi đào tạo. 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 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 thế nào tôi có thể tăng tốc YOLOv5 đào tạo?

Để tăng tốc quá trình đào tạo, hãy thử: cho phép đào tạo độ 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 trữ bộ dữ liệu của bạn bằng --cachevà tối ưu hóa kích thước lô của bạn. Cũng nên cân nhắc sử dụng 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.

📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 7 ngày

Bình luận