Meet YOLO26: next-gen vision AI.

Link to this sectionCác 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 được kết quả mAP và kết quả huấn luyện tốt nhất với YOLOv5 🚀.

Hầu hết thời gian bạn có thể đạt được kết quả tốt mà không cần thay đổi cấu trúc model hay cài đặt huấn luyện, với điều kiện là tập 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ó một số bước bạn có thể thực hiện để cải thiện, nhưng chúng tôi luôn khuyến nghị người dùng nên huấn luyện với tất cả các cài đặt mặc định trước khi cân nhắc bất kỳ thay đổi nào. Điều này giúp thiết lập đường cơ sở (baseline) hiệu suất và xác định các khu vực cần cải thiện.

Nếu bạn có câu hỏi về kết quả huấn luyện của mình, chúng tôi khuyến nghị bạn cung cấp thông tin đầy đủ nhất có thể nếu muốn nhận được phản hồi hữu ích, bao gồm biểu đồ kết quả (train losses, val losses, P, R, mAP), đường cong PR, confusion matrix, mosaic huấn luyện, 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 tệp này nằm trong thư mục project/name của bạn, thường là yolov5/runs/train/exp.

Chúng tôi đã tổng hợp một hướng dẫn đầy đủ bên dưới cho người dùng muốn đạt được kết quả tốt nhất khi huấn luyện YOLOv5.

Link to this sectionTập dữ liệu (Dataset)#

  • Hình ảnh mỗi lớp. Khuyến nghị ≥ 1500 hình ảnh mỗi lớp
  • Số lượng instances mỗi lớp. Khuyến nghị ≥ 10000 instances (đối tượng được gán nhãn) mỗi lớp
  • Sự đa dạng của hình ảnh. Phải mang tính đạ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 nghị các 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 gốc khác nhau (lấy từ Internet, thu thập cục bộ, từ các máy ảnh khác nhau), v.v.
  • Sự nhất quán của nhãn. Tất cả các instance của tất cả các lớp trong tất cả hình ảnh phải được gán nhãn. Việc 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 sát từng đối tượng. Không nên có khoảng cách giữa đối tượng và bounding box của nó. Không được bỏ sót nhãn cho bất kỳ đối tượng nào.
  • Kỷ luật phân chia Train/val. Đảm bảo rằng hình ảnh kiểm tra (test) và xác thực (validation) không bao giờ xuất hiện trong tập huấn luyện để tránh các chỉ số quá lạc quan. Giữ cho phân phối lớp tương đương nhau giữa các tập dữ liệu.
  • 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ụ: xem mosaic ví dụ.
  • Hình ảnh nền (Background images). Hình ảnh nền là những hình ảnh không có đối tượng, được thêm vào tập dữ liệu để giảm tỉ lệ Dương tính giả (False Positives - FP). Chúng tôi khuyến nghị 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 phân phối lớp tập dữ liệu COCO

Link to this sectionLựa chọn Model#

Các model lớn hơn như YOLOv5x và YOLOv5x6 sẽ mang lại 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 các triển khai trên thiết bị di động, chúng tôi khuyến nghị YOLOv5s/m, đối với triển khai trên đám mây, chúng tôi khuyến nghị YOLOv5l/x. Xem bảng trong README của chúng tôi để biết bảng so sánh đầy đủ của tất cả các model.

YOLOv5 Models

  • Bắt đầu từ trọng số được huấn luyện trước (Pretrained weights). Được khuyến nghị cho các tập dữ liệu từ nhỏ đến trung bình (ví dụ: VOC, VisDrone, GlobalWheat). Truyền tên của model vào đối số --weights. Các model sẽ tự động tải xuống từ bản phát hành 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 (Scratch). Được khuyến nghị cho các tập dữ liệu lớn (ví dụ: COCO, Objects365, OIv6). Truyền YAML cấu trúc model mà bạn quan tâm, cùng với đối số --weights '' để trống:

    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

Link to this sectionCài đặt huấn luyện#

Trước khi thay đổi bất cứ điều gì, hãy huấn luyện với cài đặt mặc định trước để thiết lập đường cơ sở hiệu suất. Danh sách đầy đủ các cài đặt của train.py có thể được tìm thấy trong argparser tại train.py.

  • Epochs. Bắt đầu với 300 epochs. Nếu xảy ra overfitting sớm, 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 epochs, v.v.
  • Kích thước hình ảnh. COCO huấn luyện ở độ phân giải gốc --img 640, mặc dù do số lượng đối tượng nhỏ trong tập dữ liệu lớn, nó có thể hưởng lợi từ việc huấn luyện ở độ phân giải cao hơn như --img 1280. Nếu có nhiều đối tượng nhỏ, các tập dữ liệu tùy chỉnh sẽ 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 đạt được khi sử dụng cùng --img như lúc huấn luyện, ví dụ: nếu bạn huấn luyện ở --img 1280 thì bạn cũng nên kiểm tra và phát hiện ở --img 1280.
  • Batch size. Sử dụng --batch-size lớn nhất mà phần cứng của bạn cho phép. Batch size nhỏ tạo ra các thống kê batch normalization kém và nên tránh. Bạn có thể sử dụng --batch-size -1 để tự động chọn batch size tối ưu cho GPU của mình.
  • 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 cờ --cos-lr để kích hoạt lập lịch learning rate theo hàm cosine, điều này sẽ dần dần làm giảm learning rate theo đường cong cosine qua các epoch.
  • Data augmentation. YOLOv5 bao gồm nhiều kỹ thuật tăng cường dữ liệu khác nhau như mosaic, kết hợp nhiều hình ảnh huấn luyện. Điều chỉnh cường độ tăng cường thông qua tham số siêu cấp mosaic trong tệp --hyp của bạn để giúp ổn định quá trình huấn luyện.
  • Hyperparameters. Các tham số siêu cấp mặc định nằm trong hyp.scratch-low.yaml. Chúng tôi khuyến nghị bạn huấn luyện với các tham số siêu cấp mặc định trước khi nghĩ đến việc thay đổi bất kỳ điều gì. Nhìn chung, tăng các tham số siêu cấp tăng cường dữ liệu sẽ giảm và làm chậm quá trình overfitting, cho phép huấn luyện lâu hơn và đạt mAP cuối cùng cao hơn. Việc giảm các tham số siêu cấp thành phần mất mát như hyp['obj'] sẽ giúp giảm overfitting 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 tham số siêu cấp này, hãy xem Hướng dẫn tối ưu hóa tham số siêu cấp.
  • Huấn luyện Mixed precision. YOLOv5 tự động kích hoạt Automatic Mixed Precision (AMP) khi phát hiện GPU được hỗ trợ, giúp 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 model.
  • Huấn luyện đa GPU (Multi-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 (Early stopping). Sử dụng --patience 50 để dừng huấn luyện nếu các chỉ số xác thực không cải thiện trong 50 epoch, giúp tiết kiệm thời gian và ngăn ngừa overfitting.

Link to this sectionCác kỹ thuật tối ưu hóa nâng cao#

  • Transfer learning. Đố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 huấn luyện trước và dần dần mở khóa các lớp trong quá trình huấn luyện để điều chỉnh model cho tác vụ cụ thể của bạn.
  • Model pruning. Sau khi huấn luyện, hãy cân nhắc cắt tỉa model của bạn để loại bỏ các trọng số dư thừa và giảm kích thước model mà không làm giảm đáng kể hiệu suất.
  • Model ensemble. Đối với các ứng dụng quan trọng, hãy huấn luyện nhiều model với các cấu hình khác nhau và kết hợp dự đoán của chúng để cải thiện độ chính xác.
  • Test-time augmentation. Kích hoạ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 đã được tăng cường của hình ảnh đầu vào.

Link to this sectionĐọc thêm#

Nếu bạn muốn biết thêm, một nơi tốt để bắt đầu là bài viết 'Recipe for Training Neural Networks' của Karpathy, chứa những ý tưởng tuyệt vời cho việc huấn luyện á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ác cài đặt và cấu hình huấn luyện, hãy tham khảo tài liệu cài đặt huấn luyện của Ultralytics, nơi cung cấp các 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à 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!

Link to this sectionCâu hỏi thường gặp#

Link to this sectionLàm sao tôi biết model của mình có đang bị overfitting không?#

Model của bạn có thể đang bị overfitting nếu loss huấn luyện tiếp tục giảm trong khi loss xác thực bắt đầu tăng. Hãy theo dõi mAP xác thực - nếu nó đi ngang hoặc giảm trong khi loss huấn luyện vẫn 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 dữ liệu hoặc triển khai các kỹ thuật chính quy hóa (regularization).

Link to this sectionBatch size tối ưu để huấn luyện YOLOv5 là bao nhiêu?#

Batch size tối ưu phụ thuộc vào bộ nhớ GPU của bạn. Batch size lớn hơn thường cung cấp các thống kê batch normalization tốt hơn và độ ổn định huấn luyện cao hơn. Hãy sử dụng batch size 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 batch size tối ưu cho cấu hình của mình.

Link to this sectionLàm thế 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ử: sử dụng nhiều GPU với --device 0,1,2,3, cache tập dữ liệu của bạn với --cache và tối ưu hóa batch size của bạn (mixed precision được tự động kích hoạt trên các GPU được hỗ trợ). Cũng nên cân nhắc sử dụng biến thể model 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 nhất.

Bình luận