YOLO Vision 2026:

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 bằng model YOLOv5 🚀. Huấn luyện model tùy chỉnh là bước nền tảng để điều chỉnh các giải pháp thị giác máy tính cho những ứng dụng thực tế cụ thể, vượt ra ngoài phát hiện đối tượng thông thường.

Trước khi bắt đầu#

Trước tiên, hãy đả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 bắt buộc từ requirements.txt. Môi trường Python>=3.8.0 cùng PyTorch>=1.8 là bắt buộc. Model và dataset sẽ tự động được tải xuống từ bản phát hành YOLOv5 mới nhất nếu không được tìm thấy trên máy cục bộ.

git clone https://github.com/ultralytics/yolov5 # Clone the repository
cd yolov5
pip install -r requirements.txt # Install dependencies

Huấn luyện trên Dữ liệu Tùy chỉnh#

Sơ đồ vòng lặp học chủ động của Ultralytics

Phát triển một model phát hiện đối tượng tùy chỉnh là một quy trình lặp:

  1. Thu thập và Sắp xếp Ảnh: Thu thập các ảnh liên quan đến tác vụ cụ thể của bạn. Dữ liệu đa dạng, chất lượng cao là yếu tố then chốt. Xem hướng dẫn Thu thập và Gán nhãn Dữ liệu của chúng tôi.
  2. Gán nhãn Đối tượng: Chú thích chính xác các đối tượng cần quan tâm trong ảnh.
  3. Huấn luyện Model: Sử dụng dữ liệu đã gán nhãn để huấn luyện model YOLOv5 của bạn. Tận dụng transfer learning bằng cách bắt đầu với các trọng số pretrained.
  4. Triển khai và Dự đoán: Sử dụng model đã huấn luyện để thực hiện suy luận trên dữ liệu mới chưa từng thấy.
  5. Thu thập các Trường hợp Biên: Xác định những tình huống model hoạt động kém (trường hợp biên) và thêm dữ liệu tương tự vào dataset để cải thiện độ robust. Lặp lại chu kỳ.

Ultralytics Platform cung cấp giải pháp không cần code, được tinh gọn cho toàn bộ chu kỳ vận hành machine learning (MLOps) này, bao gồm quản lý dataset, huấn luyện model và triển khai.

Cấp phép

Ultralytics cung cấp hai tùy chọn cấp phép để đáp ứng nhiều kịch bản sử dụng khác nhau:

  • Giấy phép AGPL-3.0: Giấy phép mã nguồn mở được OSI phê duyệt này phù hợp với sinh viên, nhà nghiên cứu và những người đam mê cộng tác mở và chia sẻ kiến thức. Giấy phép yêu cầu các sản phẩm phái sinh phải được chia sẻ theo cùng giấy phép. Xem tệp LICENSE để biết đầy đủ chi tiết.
  • Giấy phép Enterprise: Dành cho mục đích phát triển và production, giấy phép này cho phép tích hợp liền mạch phần mềm và các model AI của Ultralytics vào sản phẩm và dịch vụ doanh nghiệp, bao gồm công cụ nội bộ, workflow tự động và các hệ thống triển khai production, không phải tuân theo các yêu cầu nguồn mở của AGPL-3.0. Để bắt đầu, vui lòng liên hệ với chúng tôi qua Ultralytics Licensing.

Tìm hiểu thêm về 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 Dataset#

Model YOLOv5 cần dữ liệu đã gán nhãn để học các đặc trưng hình ảnh của những lớp đối tượng. Sắp xếp dataset đúng cách là yếu tố then chốt.

1.1 Tạo dataset.yaml#

Tệp cấu hình dataset (ví dụ: coco128.yaml) mô tả cấu trúc dataset, tên lớp và đường dẫn đến các thư mục ảnh. COCO128 là một dataset ví dụ nhỏ, gồm 128 ảnh đầu tiên từ dataset COCO quy mô lớn. Dataset này hữu ích để nhanh chóng kiểm thử pipeline 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 những thư mục chứa ảnh hoặc tệp văn bản liệt kê đường dẫn ảnh cho các tập huấn luyện, validation và kiểm thử.
  • names: Một dictionary ánh xạ các chỉ số lớp (bắt đầu từ 0) tới tên lớp tương ứng.

Bạn có thể đặt path thành thư mục tuyệt đối (ví dụ: /home/user/datasets/coco128) hoặc đường dẫn tương đối như ../datasets/coco128 khi khởi chạy huấn luyện từ thư mục gốc của repository YOLOv5.

Dưới đây là cấu trúc của 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: toothbrush

1.2 Tận dụng Model để Gán nhãn Tự động#

Gán nhãn thủ công là phương pháp phổ biến nhưng tốn thời gian. Foundation model có thể tự động hóa hoặc bán tự động hóa việc chú thích và đẩy nhanh quá trình tạo dataset. Một số model có thể hỗ trợ tạo nhãn:

  • Google Gemini: Các model đa phương thức lớn như Gemini có khả năng hiểu ảnh mạnh mẽ. Chúng có thể được prompt để xác định và định vị các đối tượng trong ảnh, tạo bounding box hoặc mô tả có thể chuyển đổi thành nhãn định dạng YOLO. Khám phá tiềm năng của model này trong notebook hướng dẫn được cung cấp.
  • SAM2 (Mô hình Phân đoạn Mọi thứ 2): Các foundation model tập trung vào phân đoạn, như SAM2, có thể xác định và phân định đối tượng với độ chính xác cao. Mặc dù chủ yếu phục vụ phân đoạn, các mask thu được thường có thể chuyển đổi thành annotation bounding box phù hợp cho các tác vụ phát hiện đối tượng.
  • YOLOWorld: Model này cung cấp khả năng phát hiện với vocabulary mở. Bạn có thể cung cấp mô tả văn bản về các đối tượng mình quan tâm, và YOLOWorld có thể định vị chúng trong ảnh mà không cần được huấn luyện trước trên những lớp cụ thể đó. Có thể sử dụng model này làm điểm khởi đầu để tạo nhãn ban đầu, sau đó tinh chỉnh các nhãn này.

Việc sử dụng các model này có thể tạo ra một bước "gán nhãn trước", giúp giảm công sức thủ công cần thiết. Tuy nhiên, điều quan trọng là phải rà soát và tinh chỉnh các nhãn được tạo tự động để đảm bảo độ chính xác và nhất quán, vì chất lượng của chúng ảnh hưởng trực tiếp đến hiệu năng của model YOLOv5 đã huấn luyện. Sau khi tạo (và có thể tinh chỉnh) nhãn, hãy đảm bảo chúng tuân thủ định dạng YOLO: một tệp *.txt cho mỗi ảnh, trong đó mỗi dòng biểu diễn một đối tượng dưới dạng class_index x_center y_center width height (tọa độ được chuẩn hóa, lớp đánh chỉ số từ 0). Nếu ảnh không có đối tượng cần quan tâm, không cần tệp *.txt tương ứng.

Các đặc tả của tệp *.txt định dạng YOLO rất chính xác:

  • Mỗi đối tượng một dòng bounding box.
  • Mỗi dòng phải chứa: class_index x_center y_center width height.
  • Tọa độ phải được chuẩn hóa về khoảng từ 0 đến 1. Để thực hiện việc này, chia giá trị pixel của x_centerwidth cho tổng chiều rộng của ảnh, đồng thời chia y_centerheight cho tổng chiều cao của ảnh.
  • Chỉ số lớp được đánh chỉ số từ 0 (tức là lớp đầu tiên được biểu diễn bằng 0, lớp thứ hai bằng 1, v.v.).

Example image with two persons and a tie annotated

Tệp nhãn tương ứng với ả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ẽ có dạng như sau:

YOLO format label file content example

1.3 Sắp xếp các Thư mục#

Cấu trúc thư mục dataset 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 được đặt cạnh thư mục repository /yolov5.

YOLOv5 tự động định vị nhãn cho từng ảnh bằng cách thay thế lần xuất hiện cuối cùng của /images/ trong đường dẫn ả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 file

Cấu trúc thư mục được khuyến nghị 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)
            └── ...

YOLOv5 recommended dataset directory structure

2. Chọn Model#

Chọn một model pretrained để bắt đầu quá trình huấn luyện. Bắt đầu với các trọng số pretrained giúp tăng tốc đáng kể quá trình học và cải thiện hiệu năng so với huấn luyện từ đầu. YOLOv5 cung cấp nhiều kích thước model khác nhau, mỗi loại có sự cân bằng riêng giữa tốc độ và độ chính xác. Ví dụ, YOLOv5s là model nhỏ thứ hai và nhanh nhất, phù hợp với các môi trường hạn chế tài nguyên. Tham khảo bảng README để so sánh chi tiết tất cả model hiện có.

Comparison chart of YOLOv5 models showing size, speed, and accuracy

3. Huấn luyện#

Bắt đầu huấn luyện model bằng script train.py. Các tham số thiết yếu bao gồm:

  • --img: Xác định kích thước ảnh đầu vào (ví dụ: --img 640). Kích thước lớn hơn thường cho độ chính xác tốt hơn nhưng cần nhiều GPU memory 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ố epoch huấn luyện (ví dụ: --epochs 100). Một epoch đại diện cho một lượt chạy qua toàn bộ dataset huấn luyện.
  • --data: Đường dẫn đến tệp dataset.yaml của bạn (ví dụ: --data coco128.yaml).
  • --weights: Đường dẫn đến tệp trọng số ban đầu. Nên sử dụng trọng số pretrained (ví dụ: --weights yolov5s.pt) để hội tụ nhanh hơn và đạt kết quả tốt hơn. Để huấn luyện từ đầu (không được khuyến nghị trừ khi bạn có dataset rất lớn và nhu cầu cụ thể), hãy sử dụng --weights '' --cfg yolov5s.yaml.

Trọng số pretrained sẽ tự động được tải xuống từ bản phát hành YOLOv5 mới nhất nếu không được tìm thấy trên 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
Tối ưu Tốc độ Huấn luyện

💡 Sử dụng --cache ram hoặc --cache disk để cache ảnh của dataset trong 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 khi các thao tác I/O (nhập/xuất) của dataset là nút thắt cổ chai. Lưu ý rằng cách này yêu cầu dung lượng RAM hoặc ổ đĩa đáng kể.

Lưu trữ Dữ liệu Cục bộ

💡 Luôn huấn luyện bằng các dataset được lưu trữ cục bộ. Việc truy cập dữ liệu từ ổ đĩa mạng (như Google Drive) hoặc bộ nhớ từ xa có thể chậm hơn đáng kể và làm giảm hiệu năng huấn luyện. Sao chép dataset vào SSD cục bộ thường là phương pháp tốt nhất.

Tất cả đầu ra của quá trình training, bao gồm weights và logs, được lưu trong thư mục runs/train/. Mỗi phiên training tạo một thư mục con mới (ví dụ: runs/train/exp, runs/train/exp2, v.v.). Để có trải nghiệm tương tác và thực hành trực tiếp, hãy khám phá phần training trong các notebook hướng dẫn chính thức của chúng tôi: Open In Colab Open In Kaggle

4. Trực quan hóa#

YOLOv5 tích hợp liền mạch với nhiều công cụ để 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 năng theo thời gian thực.

Ghi log và Trực quan hóa bằng Comet#

Comet được tích hợp đầy đủ để theo dõi thử nghiệm toàn diện. Trực quan hóa metrics theo thời gian thực, lưu hyperparameter, quản lý dataset và checkpoint của model, đồng thời phân tích dự đoán của model bằ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. 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ọ. Dùng thử Comet Colab Notebook để xem demo trực tiếp: Mở trong Colab

Comet UI showing YOLOv5 training metrics and visualizations

Ghi log 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ượt huấn luyện. Kích hoạt ClearML bằng các bước đơn giản sau:

  • Cài đặt package: pip install clearml
  • Khởi tạo ClearML: Chạy clearml-init một lần để kết nối với server ClearML của bạn (tự host hoặc sử dụng gói miễn phí).

ClearML tự động thu thập thông tin chi tiết về thử nghiệm, nội dung tải lên của model, các phép so sánh, thay đổi code chưa commit và package đã cài đặt, đảm bảo khả năng tái lập đầy đủ. Bạn có thể dễ dàng lên lịch các tác vụ huấn luyện trên agent từ xa và quản lý phiên bản dataset bằng ClearML Data. Xem Hướng dẫn Tích hợp ClearML để biết thông tin toàn diện.

ClearML experiment management UI for YOLOv5

Ghi log Cục bộ#

Kết quả huấn luyện được tự động ghi log bằng TensorBoard và 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 log bao gồm:

  • Loss và các metric hiệu năng của quá trình huấn luyện và validation.
  • Ảnh mẫu thể hiện các augmentation đã áp dụng (chẳng hạn như mosaic).
  • Nhãn ground truth cùng với dự đoán của model để kiểm tra trực quan.
  • Các metric đánh giá chính như đường cong Precision-Recall (PR).
  • Ma trận nhầm lẫn để phân tích chi tiết hiệu năng theo từng lớp.
YOLOv5 local logging results with charts and mosaics

Tệp results.csv được cập nhật sau mỗi epoch và được vẽ dưới dạng results.png khi quá trình huấn luyện kết thúc. Bạn cũng có thể vẽ thủ công bất kỳ tệp results.csv nào bằ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

YOLOv5 results.png training metrics plot

5. Các Bước Tiếp theo#

Sau khi huấn luyện thành công, checkpoint của model có hiệu nă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 có thể bao gồm:

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ị những dependency thiết yếu như CUDA, cuDNN, PythonPyTorch, giúp bạn bắt đầu thuận lợi.

Trạng thái dự án#

YOLOv5 Continuous Integration Status Badge

Huy hiệu này cho biết tất cả bài kiểm thử GitHub Actions Tích hợp liên tục (CI) của YOLOv5 đều đang vượt qua thành công. Các bài kiểm thử CI nghiêm ngặt này bao phủ những chức năng cốt lõi, bao gồm huấn luyện, validation, suy luận, exportbenchmark trên các hệ điều hành macOS, Windows và Ubuntu. Các bài kiểm thử được tự động thực thi 24 giờ một lần và sau mỗi lần commit code, đảm bảo tính ổn định nhất quán và hiệu năng tối ưu.

FAQ#

  • Huấn luyện YOLOv5 trên dataset tùy chỉnh gồm một số bước chính:

    1. Chuẩn bị Dataset: Thu thập ảnh và chú thích chúng. Đảm bảo annotation ở định dạng YOLO bắt buộc. Sắp xếp ảnh và nhãn vào các thư mục train/val/ (và tùy chọn test/). 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 Phần 1.2).
    2. Thiết lập Môi trường: Clone repository YOLOv5 và cài đặt dependency bằng pip install -r requirements.txt.
      git clone https://github.com/ultralytics/yolov5
      cd yolov5
      pip install -r requirements.txt
    3. Tạo Cấu hình Dataset: Xác định đường dẫn dataset, số lớp và tên lớp trong tệp dataset.yaml.
    4. Bắt đầu Huấn luyện: Thực thi script train.py, cung cấp đường dẫn đến dataset.yaml, trọng số pretrained mong muốn (ví dụ: yolov5s.pt), kích thước ảnh, batch size và số epoch.
      python train.py --img 640 --batch 16 --epochs 100 --data path/to/your/dataset.yaml --weights yolov5s.pt
  • 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 không cần viết bất kỳ mã nào. Các lợi ích chính bao gồm:

    • Đơn giản hóa quá trình training: Dễ dàng train model bằng các môi trường được 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: Upload, quản lý phiên bản và quản lý dataset 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 training và trực quan hóa các metric hiệu năng bằng những công cụ tích hợp như Comet hoặc TensorBoard.
    • Tính năng cộng tác: Hỗ trợ làm việc nhóm thông qua tài nguyên dùng chung, công cụ quản lý dự án và khả năng chia sẻ model dễ dàng.
    • Deployment không cần code: Deploy trực tiếp các model đã train đến nhiều target khác nhau.

    Để xem hướng dẫn thực hành, hãy tham khảo bài viết trên blog của chúng tôi: Cách train model tùy chỉnh với Ultralytics Platform.

  • Cho dù bạn annotate 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 label cuối cùng phải ở định dạng YOLO cụ thể mà YOLOv5 yêu cầu:

    • Tạo một file .txt cho mỗi ảnh. Tên file phải trùng với tên file ảnh (ví dụ: image1.jpg tương ứng với image1.txt). Đặt các file này trong thư mục labels/ nằm cùng cấp với thư mục images/ (ví dụ: ../datasets/mydataset/labels/train/).
    • Mỗi dòng trong file .txt biểu diễn một annotation đố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ị nằm trong khoảng từ 0.0 đến 1.0) theo kích thước của ảnh.
    • Các chỉ số class được đánh từ 0 (class đầu tiên là 0, class thứ hai là 1, v.v.).

    Nhiều công cụ annotate thủ công hỗ trợ export 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 output của chúng (ví dụ: tọa độ bounding box, segmentation mask) sang định dạng văn bản đã chuẩn hóa cụ thể này. Đảm bảo cấu trúc dataset cuối cùng tuân theo ví dụ được cung cấp trong hướng dẫn. Để biết thêm chi tiết, hãy xem Hướng dẫn Thu thập và Annotation Dữ liệu của chúng tôi.

  • Ultralytics cung cấp các tùy chọn cấp phép linh hoạt, phù hợp với nhiều nhu cầu khác nhau:

    • Giấy phép AGPL-3.0: 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 trường hợp có thể tuân thủ các yêu cầu nguồn mở. Giấy phép yêu cầu các sửa đổi và tác phẩm phái sinh cũng phải được phát hành dưới AGPL-3.0. Xem chi tiết Giấy phép AGPL-3.0.
    • Giấy phép Enterprise: Giấy phép thương mại dành cho các doanh nghiệp tích hợp YOLOv5 vào 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 dưới dạng mã nguồn đóng. Truy cập trang Cấp phép của chúng tôi để biết thêm chi tiết hoặc yêu cầu Giấy phép Enterprise.

    Hãy chọn giấy phép phù hợp nhất với các yêu cầu của dự án và mô hình phân phối của bạn.

Bình luận