YOLO Vision 2026:

Logo Comet ML用于 theo dõi các thí nghiệm machine learning

YOLOv5 với Comet#

Hướng dẫn này trình bày cách sử dụng YOLOv5 với Comet, một công cụ mạnh mẽ để theo dõi, so sánh và tối ưu hóa các thí nghiệm machine learning.

Giới thiệu về Comet#

Comet xây dựng các công cụ giúp data scientist, kỹ sư và trưởng nhóm tăng tốc, tối ưu hóa các model machine learningdeep learning.

Theo dõi và trực quan hóa các chỉ số của model theo thời gian thực, lưu hyperparameter, dataset và checkpoint của model, đồng thời trực quan hóa các dự đoán của model bằng Comet Custom Panels! Comet đảm bảo bạn không bao giờ mất dấu công việc của mình và giúp dễ dàng chia sẻ kết quả cũng như cộng tác giữa các team ở mọi quy mô!

Bắt đầu#

Cài đặt Comet#

pip install comet_ml

Cấu hình thông tin xác thực Comet#

Có hai cách để cấu hình Comet với YOLOv5.

Bạn có thể thiết lập thông tin xác thực thông qua các biến môi trường:

Biến môi trường

export COMET_API_KEY=YOUR_API_KEY
export COMET_PROJECT_NAME=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'

Hoặc tạo file .comet.config trong thư mục làm việc và thiết lập thông tin xác thực tại đó:

File cấu hình Comet

[comet]
api_key=YOUR_API_KEY
project_name=YOUR_COMET_PROJECT_NAME # This will default to 'yolov5'

Chạy script huấn luyện#

# Train YOLOv5s on COCO128 for 5 epochs
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.pt

Vậy là xong! Comet sẽ tự động ghi log hyperparameter, đối số dòng lệnh, các chỉ số huấn luyện và validation. Bạn có thể trực quan hóa và phân tích các lần chạy trong Comet UI.

Dashboard Comet hiển thị các chỉ số huấn luyện YOLOv5 và việc theo dõi thí nghiệm

Thử một ví dụ!#

Xem một ví dụ về lần chạy đã hoàn tất tại đây.

Hoặc tốt hơn, hãy tự thử trong Colab Notebook này:

Mở trong Colab

Tự động ghi log#

Theo mặc định, Comet sẽ ghi log các mục sau:

Các chỉ số#

Số tham số#

  • Hyperparameter của model
  • Tất cả tham số được truyền qua các tùy chọn dòng lệnh

Trực quan hóa#

  • Ma trận nhầm lẫn của các dự đoán của model trên dữ liệu validation
  • Biểu đồ các đường cong PR và F1 trên tất cả các class
  • Correlogram của các nhãn class

Cấu hình ghi log Comet#

Có thể cấu hình Comet để ghi log dữ liệu bổ sung thông qua các cờ dòng lệnh truyền cho script huấn luyện hoặc thông qua các biến môi trường:

export COMET_MODE=online                           # Set whether to run Comet in 'online' or 'offline' mode. Defaults to online
export COMET_MODEL_NAME="yolov5"                   # Set the name for the saved model. Defaults to yolov5
export COMET_LOG_CONFUSION_MATRIX=false            # Set to disable logging a Comet Confusion Matrix. Defaults to true
export COMET_MAX_IMAGE_UPLOADS=30                  # Controls how many total image predictions to log to Comet. Defaults to 100.
export COMET_LOG_PER_CLASS_METRICS=true            # Set to log evaluation metrics for each detected class at the end of training. Defaults to false
export COMET_DEFAULT_CHECKPOINT_FILENAME="last.pt" # Set this if you would like to resume training from a different checkpoint. Defaults to 'last.pt'
export COMET_LOG_BATCH_LEVEL_METRICS=true          # Set this if you would like to log training metrics at the batch level. Defaults to false.
export COMET_LOG_PREDICTIONS=true                  # Set this to false to disable logging model predictions

Ghi log checkpoint với Comet#

Tính năng ghi log model lên Comet bị tắt theo mặc định. Để bật tính năng này, hãy truyền đối số save-period cho script huấn luyện. Thao tác này sẽ lưu các checkpoint đã ghi log lên Comet dựa trên giá trị khoảng thời gian được cung cấp bởi save-period:

python train.py \
  --img 640 \
  --batch 16 \
  --epochs 5 \
  --data coco128.yaml \
  --weights yolov5s.pt \
  --save-period 1

Ghi log các dự đoán của model#

Theo mặc định, các dự đoán của model (image, nhãn ground truth và bounding box) sẽ được ghi log lên Comet.

Bạn có thể kiểm soát tần suất ghi log các dự đoán và image liên quan bằng cách truyền đối số dòng lệnh bbox_interval. Có thể trực quan hóa các dự đoán bằng Custom Panel Object Detection của Comet. Tần suất này tương ứng với mỗi batch dữ liệu thứ N trong mỗi epoch. Trong ví dụ dưới đây, chúng ta ghi log mỗi batch dữ liệu thứ 2 trong mỗi epoch.

Lưu ý: Dataloader validation của YOLOv5 mặc định có batch size là 32, vì vậy bạn sẽ phải thiết lập tần suất ghi log cho phù hợp.

Đây là một project mẫu sử dụng Panel

python train.py \
  --img 640 \
  --batch 16 \
  --epochs 5 \
  --data coco128.yaml \
  --weights yolov5s.pt \
  --bbox_interval 2

Kiểm soát số lượng image dự đoán được ghi log lên Comet#

Khi ghi log các dự đoán từ YOLOv5, Comet sẽ ghi log các image liên kết với từng tập dự đoán. Theo mặc định, tối đa 100 image validation được ghi log. Bạn có thể tăng hoặc giảm số lượng này bằng biến môi trường COMET_MAX_IMAGE_UPLOADS:

env COMET_MAX_IMAGE_UPLOADS=200 python train.py \
  --img 640 \
  --batch 16 \
  --epochs 5 \
  --data coco128.yaml \
  --weights yolov5s.pt \
  --bbox_interval 1

Ghi log các chỉ số cấp class#

Sử dụng biến môi trường COMET_LOG_PER_CLASS_METRICS để ghi log mAP, precision, recall, f1 cho từng class:

env COMET_LOG_PER_CLASS_METRICS=true python train.py \
  --img 640 \
  --batch 16 \
  --epochs 5 \
  --data coco128.yaml \
  --weights yolov5s.pt

Upload dataset lên Comet Artifacts#

Nếu muốn lưu trữ dữ liệu bằng Comet Artifacts, bạn có thể thực hiện việc này bằng cờ upload_dataset.

Dataset phải được tổ chức như mô tả trong tài liệu YOLOv5. File cấu hình dataset yaml phải tuân theo cùng định dạng với file coco128.yaml.

python train.py \
  --img 640 \
  --batch 16 \
  --epochs 5 \
  --data coco128.yaml \
  --weights yolov5s.pt \
  --upload_dataset

Bạn có thể tìm dataset đã upload trong tab Artifacts của Comet Workspace:

Panel Comet Artifacts dùng để quản lý phiên bản dataset

Bạn có thể xem trước dữ liệu trực tiếp trong Comet UI:

Bản xem trước dataset Comet và lịch sử phiên bản

Artifacts được quản lý theo phiên bản và cũng hỗ trợ thêm metadata về dataset. Comet sẽ tự động ghi log metadata từ file dataset yaml của bạn:

Metadata Comet Artifact

Sử dụng Artifact đã lưu#

Nếu muốn sử dụng dataset từ Comet Artifacts, hãy đặt biến path trong file dataset yaml để trỏ đến URL resource Artifact sau:

# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"

Sau đó truyền file này cho script huấn luyện như sau:

python train.py \
  --img 640 \
  --batch 16 \
  --epochs 5 \
  --data artifact.yaml \
  --weights yolov5s.pt

Artifacts cũng cho phép bạn theo dõi lineage của dữ liệu khi dữ liệu đi qua workflow thử nghiệm. Tại đây, bạn có thể xem biểu đồ hiển thị tất cả thí nghiệm đã sử dụng dataset được upload của mình:

Biểu đồ lineage của Comet Artifact

Tiếp tục một lần chạy huấn luyện#

Nếu lần chạy huấn luyện bị gián đoạn vì bất kỳ lý do nào, chẳng hạn như kết nối internet bị gián đoạn, bạn có thể tiếp tục lần chạy bằng cờ resume và Comet Run Path.

Run Path có định dạng sau: comet://WORKSPACE_NAME/PROJECT_NAME/EXPERIMENT_ID.

Thao tác này sẽ khôi phục lần chạy về trạng thái trước khi bị gián đoạn, bao gồm khôi phục model từ checkpoint, khôi phục toàn bộ hyperparameter và đối số huấn luyện, đồng thời tải xuống Comet dataset Artifacts nếu chúng đã được sử dụng trong lần chạy ban đầu. Lần chạy được tiếp tục sẽ tiếp tục ghi log vào Experiment hiện có trong Comet UI:

python train.py \
  --resume "comet://YOUR_RUN_PATH"

Tìm kiếm hyperparameter với Comet Optimizer#

YOLOv5 cũng được tích hợp với Comet's Optimizer, giúp đơn giản hóa việc trực quan hóa các lần quét hyperparameter trong Comet UI.

Cấu hình Optimizer Sweep#

Để cấu hình Comet Optimizer, bạn sẽ phải tạo một file JSON chứa thông tin về sweep. Một file mẫu được cung cấp tại utils/loggers/comet/optimizer_config.json:

python utils/loggers/comet/hpo.py \
  --comet_optimizer_config "utils/loggers/comet/optimizer_config.json"

Script hpo.py chấp nhận các đối số giống như train.py. Nếu muốn truyền thêm đối số cho sweep, chỉ cần thêm chúng sau script:

python utils/loggers/comet/hpo.py \
  --comet_optimizer_config "utils/loggers/comet/optimizer_config.json" \
  --save-period 1 \
  --bbox_interval 1

Trực quan hóa kết quả#

Comet cung cấp nhiều cách để trực quan hóa kết quả sweep của bạn. Hãy xem một project có sweep đã hoàn tất tại đây.

Trực quan hóa hyperparameter của Comet

Bình luận