Huấn luyện YOLOv5 trên Dữ liệu Tùy chỉnh
📚 Hướng dẫn này giải thích cách huấn luyện dataset tùy chỉnh của riêng bạn sử dụng mô hình YOLOv5 🚀. Huấn luyện các mô hình tùy chỉnh là bước cơ bản trong việc điều chỉnh các giải pháp computer vision cho các ứng dụng thực tế cụ thể ngoài object detection thông thường.
Trước khi Bạn Bắt đầu
Trước tiên, đảm bảo bạn đã thiết lập môi trường cần thiết. Clone repository YOLOv5 và cài đặt các dependency yêu cầu từ requirements.txt. Một môi trường Python>=3.8.0 với PyTorch>=1.8 là rất cần thiết. Các mô hình và dataset sẽ được tự động tải xuống từ bản release YOLOv5 mới nhất nếu không tìm thấy ở máy cục bộ.
git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependenciesHuấn luyện trên Dữ liệu Tùy chỉnh
Phát triển một mô hình object detection tùy chỉnh là một quy trình lặp đi lặp lại:
- Thu thập & Tổ chức Hình ảnh: Tập hợp các hình ảnh liên quan đến tác vụ cụ thể của bạn. Dữ liệu chất lượng cao, đa dạng là rất quan trọng. Xem hướng dẫn của chúng tôi về Thu thập và Gán nhãn Dữ liệu.
- Gán nhãn Đối tượng: Chú thích chính xác các đối tượng quan tâm trong hình ảnh của bạn.
- Huấn luyện Mô hình: Sử dụng dữ liệu đã gán nhãn để huấn luyện mô hình YOLOv5 của bạn. Tận dụng transfer learning bằng cách bắt đầu với pretrained weights.
- Triển khai & Dự đoán: Sử dụng mô hình đã huấn luyện để inference trên dữ liệu mới, chưa từng thấy.
- Thu thập các Trường hợp Đặc biệt (Edge Cases): Xác định các kịch bản mà mô hình hoạt động kém (edge cases) và thêm dữ liệu tương tự vào dataset của bạn để cải thiện độ bền bỉ. Lặp lại chu trình này.
Ultralytics Platform cung cấp một giải pháp hợp lý, không cần code cho toàn bộ chu trình machine learning operations (MLOps) này, bao gồm quản lý dataset, huấn luyện mô hình và triển khai.
Ultralytics cung cấp hai tùy chọn cấp phép để đáp ứng các kịch bản sử dụng đa dạng:
- Giấy phép AGPL-3.0: Giấy phép mã nguồn mở được OSI phê duyệt này lý tưởng cho sinh viên, nhà nghiên cứu và những người đam mê hợp tác mở và chia sẻ kiến thức. Nó yêu cầu các tác phẩm phái sinh phải được chia sẻ theo cùng một giấy phép. Xem tệp LICENSE để biết chi tiết đầy đủ.
- Giấy phép Doanh nghiệp (Enterprise): Được thiết kế cho các ứng dụng thương mại, giấy phép này cho phép tích hợp liền mạch phần mềm và các mô hình AI của Ultralytics vào các sản phẩm và dịch vụ thương mại mà không bị ràng buộc bởi các quy định mã nguồn mở của AGPL-3.0. Nếu dự án của bạn yêu cầu triển khai thương mại, hãy yêu cầu Giấy phép Doanh nghiệp.
Khám phá thêm các tùy chọn cấp phép của chúng tôi trên trang Cấp phép Ultralytics.
Trước khi bắt đầu huấn luyện, việc chuẩn bị dataset là rất cần thiết.
1. Tạo một Dataset
Các mô hình YOLOv5 yêu cầu dữ liệu đã gán nhãn để học các đặc điểm trực quan của các lớp đối tượng. Việc tổ chức dataset của bạn đúng cách là chìa khóa.
1.1 Tạo dataset.yaml
Tệp cấu hình dataset (ví dụ: coco128.yaml) phác thảo cấu trúc của dataset, tên lớp và đường dẫn đến các thư mục hình ảnh. COCO128 đóng vai trò là một dataset ví dụ nhỏ, bao gồm 128 hình ảnh đầu tiên từ dataset COCO mở rộng. Nó hữu ích để kiểm tra nhanh đường ống huấn luyện và chẩn đoán các vấn đề tiềm ẩn như overfitting.
Cấu trúc tệp dataset.yaml bao gồm:
path: Thư mục gốc chứa dataset.train,val,test: Các đường dẫn tương đối từpathđến các thư mục chứa hình ảnh hoặc tệp văn bản liệt kê đường dẫn hình ảnh cho các tập huấn luyện, xác thực và kiểm thử.names: Một từ điển ánh xạ các chỉ số lớp (bắt đầu từ 0) tới tên lớp tương ứng của chúng.
Bạn có thể đặt path thành đường dẫn tuyệt đối (ví dụ: /home/user/datasets/coco128) hoặc đường dẫn tương đối như ../datasets/coco128 khi chạy huấn luyện từ thư mục gốc của repository YOLOv5.
Dưới đây là cấu trúc cho coco128.yaml (xem trên GitHub):
# Dataset root directory relative to the yolov5 directory
path: coco128
# Train/val/test sets: specify directories, *.txt files, or lists
train: images/train2017 # 128 images for training
val: images/train2017 # 128 images for validation
test: # Optional path to test images
# Classes (example using 80 COCO classes)
names:
0: person
1: bicycle
2: car
# ... (remaining COCO classes)
77: teddy bear
78: hair drier
79: toothbrush1.2 Tận dụng các Mô hình để Tự động Gán nhãn
Gán nhãn thủ công là cách tiếp cận phổ biến nhưng tốn thời gian. Các mô hình nền tảng có thể tự động hóa hoặc bán tự động hóa việc chú thích và tăng tốc quá trình tạo dataset. Ví dụ về các mô hình có thể giúp tạo nhãn:
- Google Gemini: Các mô hình đa phương thức lớn như Gemini sở hữu khả năng hiểu hình ảnh mạnh mẽ. Chúng có thể được nhắc để xác định và định vị các đối tượng trong hình ảnh, tạo ra các bounding box hoặc mô tả có thể chuyển đổi thành các nhãn theo định dạng YOLO. Khám phá tiềm năng của nó trong notebook hướng dẫn được cung cấp.
- SAM2 (Segment Anything Model 2): Các mô hình nền tảng tập trung vào phân đoạn, như SAM2, có thể xác định và phác thảo các đối tượng với độ chính xác cao. Mặc dù chủ yếu dành cho phân đoạn, các mask thu được thường có thể được chuyển đổi thành các chú thích bounding box phù hợp cho các tác vụ object detection.
- YOLOWorld: Mô hình này cung cấp khả năng phát hiện từ vựng mở (open-vocabulary detection). Bạn có thể cung cấp mô tả văn bản về các đối tượng bạn quan tâm, và YOLOWorld có thể định vị chúng trong hình ảnh mà không cần huấn luyện trước trên các lớp cụ thể đó. Điều này có thể được sử dụng làm điểm khởi đầu để tạo các nhãn ban đầu, sau đó có thể được tinh chỉnh.
Sử dụng các mô hình này có thể cung cấp một bước "gán nhãn trước", giảm bớt nỗ lực thủ công cần thiết. Tuy nhiên, việc xem xét và tinh chỉnh các nhãn được tạo tự động để đảm bảo độ chính xác và tính nhất quán là rất quan trọng, vì chất lượng ảnh hưởng trực tiếp đến hiệu suất của mô hình YOLOv5 được huấn luyện. Sau khi tạo (và có khả năng tinh chỉnh) các nhãn của bạn, hãy đảm bảo chúng tuân thủ định dạng YOLO: một tệp *.txt cho mỗi hình ảnh, với mỗi dòng đại diện cho một đối tượng là class_index x_center y_center width height (tọa độ chuẩn hóa, lớp bắt đầu từ 0). Nếu một hình ảnh không có đối tượng quan tâm nào, không cần tệp *.txt tương ứng.
Thông số kỹ thuật của tệp *.txt định dạng YOLO rất chính xác:
- Mỗi hàng cho một bounding box đối tượng.
- Mỗi hàng phải chứa:
class_index x_center y_center width height. - Tọa độ phải được chuẩn hóa trong phạm vi từ 0 đến 1. Để đạt được điều này, hãy chia các giá trị pixel của
x_centervàwidthcho tổng chiều rộng của hình ảnh, và chiay_centervàheightcho tổng chiều cao của hình ảnh. - Các chỉ số lớp được đánh số từ 0 (tức là lớp đầu tiên được đại diện bởi
0, lớp thứ hai bởi1, v.v.).

Tệp nhãn tương ứng với hình ảnh trên, chứa hai đối tượng 'person' (chỉ số lớp 0) và một đối tượng 'tie' (chỉ số lớp 27), sẽ trông như thế này:

1.3 Tổ chức Thư mục
Cấu trúc thư mục datasets của bạn như minh họa bên dưới. Theo mặc định, YOLOv5 dự kiến thư mục dataset (ví dụ: /coco128) nằm trong thư mục /datasets đặt liền kề với thư mục repository /yolov5.
YOLOv5 tự động định vị các nhãn cho mỗi hình ảnh bằng cách thay thế phiên bản cuối cùng của /images/ trong đường dẫn hình ảnh bằng /labels/. Ví dụ:
../datasets/coco128/images/im0.jpg # Path to the image file
../datasets/coco128/labels/im0.txt # Path to the corresponding label fileCấu trúc thư mục được đề xuất là:
/datasets/
└── coco128/ # Dataset root
├── images/
│ ├── train2017/ # Training images
│ │ ├── 000000000009.jpg
│ │ └── ...
│ └── val2017/ # Validation images (optional if using same set for train/val)
│ └── ...
└── labels/
├── train2017/ # Training labels
│ ├── 000000000009.txt
│ └── ...
└── val2017/ # Validation labels (optional if using same set for train/val)
└── ...
2. Chọn một Mô hình
Chọn một pretrained model để bắt đầu quá trình huấn luyện. Bắt đầu với pretrained weights giúp tăng tốc đáng kể quá trình học tập và cải thiện hiệu suất so với việc huấn luyện từ đầu. YOLOv5 cung cấp nhiều kích thước mô hình khác nhau, mỗi kích thước cân bằng tốc độ và độ chính xác khác nhau. Ví dụ, YOLOv5s là mô hình nhỏ nhất thứ hai và nhanh nhất, phù hợp với các môi trường hạn chế về tài nguyên. Tham khảo bảng README để biết so sánh chi tiết về tất cả các mô hình có sẵn.

3. Huấn luyện
Bắt đầu huấn luyện mô hình bằng cách sử dụng tập lệnh train.py. Các đối số thiết yếu bao gồm:
--img: Xác định kích thước hình ảnh đầu vào (ví dụ:--img 640). Các kích thước lớn hơn thường mang lại độ chính xác tốt hơn nhưng yêu cầu nhiều bộ nhớ GPU hơn.--batch: Xác định batch size (ví dụ:--batch 16). Hãy chọn kích thước lớn nhất mà GPU của bạn có thể xử lý.--epochs: Chỉ định tổng số epochs huấn luyện (ví dụ:--epochs 100). Một epoch đại diện cho một lượt truyền qua toàn bộ tập dữ liệu huấn luyện.--data: Đường dẫn đến tệpdataset.yamlcủa bạn (ví dụ:--data coco128.yaml).--weights: Đường dẫn đến tệp trọng số ban đầu. Sử dụng pretrained weights (ví dụ:--weights yolov5s.pt) được đặc biệt khuyến nghị để hội tụ nhanh hơn và cho kết quả vượt trội. Để huấn luyện từ đầu (không khuyến khích trừ khi bạn có dataset rất lớn và các nhu cầu cụ thể), hãy sử dụng--weights '' --cfg yolov5s.yaml.
Pretrained weights sẽ được tự động tải xuống từ bản release YOLOv5 mới nhất nếu không tìm thấy ở máy cục bộ.
# Example: Train YOLOv5s on the COCO128 dataset for 3 epochs
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt💡 Sử dụng --cache ram hoặc --cache disk để lưu cache hình ảnh dataset vào RAM hoặc ổ đĩa cục bộ tương ứng. Điều này giúp tăng tốc đáng kể quá trình huấn luyện, đặc biệt là khi các hoạt động I/O (Nhập/Xuất) của dataset là một nút thắt cổ chai. Lưu ý rằng điều này đòi hỏi dung lượng RAM hoặc ổ đĩa đáng kể.
💡 Luôn huấn luyện bằng cách sử dụng các dataset được lưu trữ cục bộ. Việc truy cập dữ liệu từ các ổ đĩa mạng (như Google Drive) hoặc lưu trữ từ xa có thể chậm hơn đáng kể và cản trở hiệu suất huấn luyện. Sao chép dataset của bạn vào một ổ SSD cục bộ thường là cách làm tốt nhất.
Tất cả kết quả huấn luyện, bao gồm trọng số và nhật ký, được lưu trong thư mục runs/train/. Mỗi phiên huấn luyện tạo ra một thư mục con mới (ví dụ: runs/train/exp, runs/train/exp-2, v.v.). Để có trải nghiệm thực tế, tương tác, hãy khám phá phần huấn luyện trong các notebook hướng dẫn chính thức của chúng tôi:
4. Trực quan hóa
YOLOv5 tích hợp liền mạch với nhiều công cụ khác nhau để trực quan hóa tiến trình huấn luyện, đánh giá kết quả và giám sát hiệu suất theo thời gian thực.
Ghi nhật ký và Trực quan hóa bằng Comet
Comet được tích hợp hoàn toàn để theo dõi thí nghiệm toàn diện. Trực quan hóa các số liệu trực tiếp, lưu các siêu tham số, quản lý các dataset và các checkpoint mô hình, và phân tích dự đoán của mô hình bằng cách sử dụng Comet Custom Panels tương tác.
Bắt đầu rất đơn giản:
pip install comet_ml # 1. Install Comet library
export COMET_API_KEY=YOUR_API_KEY_HERE # 2. Set your Comet API key (create a free account at Comet.ml)
python train.py --img 640 --epochs 3 --data coco128.yaml --weights yolov5s.pt # 3. Train your model - Comet automatically logs everything!Tìm hiểu sâu hơn về các tính năng được hỗ trợ trong Hướng dẫn Tích hợp Comet của chúng tôi. Tìm hiểu thêm về các khả năng của Comet từ tài liệu chính thức của họ. Hãy thử Comet Colab Notebook để xem bản demo trực tiếp:
Ghi nhật ký và Tự động hóa bằng ClearML
Tích hợp ClearML cho phép theo dõi thí nghiệm chi tiết, quản lý phiên bản dataset và thậm chí thực thi từ xa các lần chạy huấn luyện. Kích hoạt ClearML với các bước đơn giản sau:
- Cài đặt gói:
pip install clearml - Khởi tạo ClearML: Chạy
clearml-initmột lần để kết nối với máy chủ ClearML của bạn (tự lưu trữ hoặc gói miễn phí).
ClearML tự động ghi lại các chi tiết thí nghiệm, tải lên mô hình, so sánh, các thay đổi code chưa commit và các gói đã cài đặt, đảm bảo khả năng tái tạo đầy đủ. Bạn có thể dễ dàng lên lịch các tác vụ huấn luyện trên các tác nhân từ xa và quản lý các phiên bản dataset bằng ClearML Data. Khám phá Hướng dẫn Tích hợp ClearML để biết các chi tiết toàn diện.
Ghi nhật ký Cục bộ
Kết quả huấn luyện được tự động ghi lại bằng TensorBoard và được lưu dưới dạng tệp CSV trong thư mục thí nghiệm cụ thể (ví dụ: runs/train/exp). Dữ liệu được ghi bao gồm:
- Các số liệu mất mát (loss) và hiệu suất huấn luyện và xác thực.
- Hình ảnh mẫu hiển thị các augmentations đã áp dụng (như mosaics).
- Nhãn thực tế (ground truth) cùng với dự đoán của mô hình để kiểm tra trực quan.
- Các số liệu đánh giá chính như đường cong Precision-Recall (PR).
- Confusion matrices để phân tích chi tiết hiệu suất theo từng lớp.
Tệp results.csv được cập nhật sau mỗi epoch và được vẽ thành results.png sau khi huấn luyện kết thúc. Bạn cũng có thể vẽ bất kỳ tệp results.csv nào theo cách thủ công bằng cách sử dụng hàm tiện ích được cung cấp:
from utils.plots import plot_results
# Plot results from a specific training run directory
plot_results("runs/train/exp/results.csv") # This will generate 'results.png' in the same directory
5. Các bước Tiếp theo
Sau khi hoàn thành huấn luyện, checkpoint mô hình hoạt động tốt nhất (best.pt) được lưu và sẵn sàng để triển khai hoặc tinh chỉnh thêm. Các bước tiếp theo tiềm năng bao gồm:
- Chạy inference trên hình ảnh hoặc video mới sử dụng mô hình đã huấn luyện thông qua CLI hoặc Python.
- Thực hiện xác thực để đánh giá độ chính xác và khả năng tổng quát hóa của mô hình trên các tập dữ liệu khác nhau (ví dụ: một tập kiểm thử giữ lại).
- Xuất mô hình sang nhiều định dạng triển khai khác nhau như ONNX, TensorFlow SavedModel hoặc TensorRT để tối ưu hóa inference trên các nền tảng đa dạng.
- Sử dụng các kỹ thuật điều chỉnh siêu tham số để có khả năng đạt được thêm các cải thiện hiệu suất.
- Tiếp tục cải thiện mô hình của bạn bằng cách làm theo Lời khuyên để có Kết quả Huấn luyện Tốt nhất của chúng tôi và liên tục thêm dữ liệu đa dạng và đầy thách thức hơn dựa trên phân tích hiệu suất.
Môi trường được hỗ trợ
Ultralytics cung cấp các môi trường sẵn sàng sử dụng được trang bị các dependency thiết yếu như CUDA, cuDNN, Python và PyTorch, tạo điều kiện cho một khởi đầu suôn sẻ.
- Notebook GPU Miễn phí:
- Nền tảng Đám mây:
- Google Cloud: Hướng dẫn Bắt đầu nhanh GCP
- Amazon AWS: Hướng dẫn Bắt đầu nhanh AWS
- Microsoft Azure: Hướng dẫn Bắt đầu nhanh AzureML
- Thiết lập Cục bộ:
- Docker: Hướng dẫn Bắt đầu nhanh Docker
- Docker: Hướng dẫn Bắt đầu nhanh Docker
Trạng thái dự án
This badge indicates that all YOLOv5 GitHub Actions Continuous Integration (CI) tests are passing successfully. These rigorous CI tests cover the core functionalities, including training, validation, inference, export, and benchmarks, across macOS, Windows, and Ubuntu operating systems. Tests are executed automatically every 24 hours and upon each code commit, ensuring consistent stability and optimal performance.
Câu hỏi thường gặp (FAQ)
Làm cách nào để huấn luyện YOLOv5 trên dataset tùy chỉnh của tôi?
Huấn luyện YOLOv5 trên một dataset tùy chỉnh bao gồm một số bước chính:
- Chuẩn bị bộ dữ liệu của bạn: Thu thập hình ảnh và chú thích chúng. Đảm bảo các chú thích tuân thủ YOLO format được yêu cầu. Sắp xếp hình ảnh và nhãn vào các thư mục
train/vàval/(và tùy chọn làtest/). Hãy cân nhắc sử dụng các model như Google Gemini, SAM2, hoặc YOLOWorld để hỗ trợ hoặc tự động hóa quy trình gắn nhãn (xem Mục 1.2). - Thiết lập môi trường: Clone repository YOLOv5 và cài đặt các phụ thuộc bằng lệnh
pip install -r requirements.txt.git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt - Tạo cấu hình bộ dữ liệu: Định nghĩa đường dẫn bộ dữ liệu, số lượng lớp và tên các lớp trong tệp
dataset.yaml. - Bắt đầu huấn luyện: Thực thi script
train.py, cung cấp đường dẫn tớidataset.yaml, trọng số pretrained mong muốn (ví dụ:yolov5s.pt), kích thước hình ảnh, batch size và số lượng epoch.python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
Tại sao tôi nên sử dụng Ultralytics Platform để huấn luyện các model YOLO của mình?
Ultralytics Platform là một nền tảng toàn diện được thiết kế để tối ưu hóa toàn bộ vòng đời phát triển model YOLO, thường là không cần viết bất kỳ dòng code nào. Các lợi ích chính bao gồm:
- Huấn luyện đơn giản hóa: Dễ dàng huấn luyện các model sử dụng các môi trường đã cấu hình sẵn và giao diện người dùng trực quan.
- Quản lý dữ liệu tích hợp: Tải lên, kiểm soát phiên bản và quản lý các bộ dữ liệu của bạn một cách hiệu quả ngay trong nền tảng.
- Giám sát theo thời gian thực: Theo dõi tiến trình huấn luyện và trực quan hóa các chỉ số hiệu suất sử dụng các công cụ tích hợp như Comet hoặc TensorBoard.
- Tính năng cộng tác: Tạo điều kiện làm việc nhóm thông qua các tài nguyên được chia sẻ, công cụ quản lý dự án và khả năng chia sẻ model dễ dàng.
- Triển khai không cần code: Triển khai các model đã được huấn luyện trực tiếp tới nhiều mục tiêu khác nhau.
Để có hướng dẫn thực tế, hãy xem bài viết trên blog của chúng tôi: How to Train Your Custom Models with Ultralytics Platform.
Làm cách nào để chuyển đổi dữ liệu đã được chú thích sang định dạng YOLOv5?
Cho dù bạn chú thích thủ công hay sử dụng các công cụ tự động (như những công cụ được đề cập trong Mục 1.2), các nhãn cuối cùng phải ở đúng YOLO format mà YOLOv5 yêu cầu:
- Tạo một tệp
.txtcho mỗi hình ảnh. Tên tệp phải khớp với tên hình ảnh (ví dụ:image1.jpgtương ứng vớiimage1.txt). Đặt các tệp này vào thư mụclabels/song song với thư mụcimages/của bạn (ví dụ:../datasets/mydataset/labels/train/). - Mỗi dòng trong tệp
.txtđại diện cho một chú thích đối tượng và tuân theo định dạng:class_index center_x center_y width height. - Các tọa độ (
center_x,center_y,width,height) phải được chuẩn hóa (giá trị từ 0.0 đến 1.0) so với kích thước của hình ảnh. - Các chỉ số lớp (class indices) là dựa trên số 0 (lớp đầu tiên là
0, lớp thứ hai là1, v.v.).
Nhiều công cụ chú thích thủ công cung cấp khả năng xuất trực tiếp sang định dạng YOLO. Nếu sử dụng các model tự động, bạn sẽ cần các script hoặc quy trình để chuyển đổi đầu ra của chúng (ví dụ: tọa độ BBox, mask phân đoạn) thành định dạng văn bản chuẩn hóa cụ thể này. Hãy đảm bảo cấu trúc bộ dữ liệu cuối cùng của bạn tuân thủ ví dụ được cung cấp trong hướng dẫn. Để biết thêm chi tiết, hãy xem Data Collection and Annotation Guide của chúng tôi.
Các tùy chọn cấp phép để sử dụng YOLOv5 trong các ứng dụng thương mại là gì?
Ultralytics cung cấp các tùy chọn cấp phép linh hoạt phù hợp với các nhu cầu khác nhau:
- AGPL-3.0 License: Giấy phép nguồn mở này phù hợp cho nghiên cứu học thuật, dự án cá nhân và các tình huống chấp nhận tuân thủ nguồn mở. Nó yêu cầu các sửa đổi và sản phẩm phái sinh cũng phải là mã nguồn mở theo AGPL-3.0. Xem chi tiết về AGPL-3.0 License.
- Enterprise License: Một giấy phép thương mại được thiết kế cho các doanh nghiệp tích hợp YOLOv5 vào các sản phẩm hoặc dịch vụ độc quyền. Giấy phép này loại bỏ các nghĩa vụ nguồn mở của AGPL-3.0, cho phép phân phối mã đóng. Truy cập Licensing page của chúng tôi để biết thêm chi tiết hoặc để yêu cầu Enterprise License.
Chọn giấy phép phù hợp nhất với yêu cầu và mô hình phân phối dự án của bạn.
