
YOLOv5 với Comet
Hướng dẫn này sẽ bao gồm 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ực nghiệm machine learning.
Giới thiệu về Comet
Comet xây dựng các công cụ giúp các nhà khoa học dữ liệu, kỹ sư và trưởng nhóm tăng tốc và tối ưu hóa các model machine learning và deep 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 trữ các siêu tham số (hyperparameters), bộ dữ liệu (datasets) và các 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ả và cộng tác trên các nhóm thuộc mọi quy mô!
Bắt đầu
Cài đặt Comet
pip install comet_mlCấ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ể đặt thông tin xác thực của mình thông qua các biến môi trường (environment variables):
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 tệp .comet.config trong thư mục làm việc của bạn và đặt thông tin xác thực tại đó:
Tệp 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.ptVậy thôi! Comet sẽ tự động ghi lại các siêu tham số, đối số dòng lệnh (command line arguments), các chỉ số huấn luyện và kiểm thử. Bạn có thể trực quan hóa và phân tích các lần chạy của mình trong giao diện người dùng (UI) của Comet.

Hãy thử một Ví dụ!
Xem ví dụ về một lần chạy đã hoàn thành tại đây.
Hoặc tốt hơn nữa, hãy tự mình trải nghiệm trong Colab Notebook này:
Tự động Ghi nhật ký (Log)
Theo mặc định, Comet sẽ ghi lại các mục sau:
Các chỉ số (Metrics)
- Box Loss, Object Loss, Classification Loss cho dữ liệu huấn luyện và dữ liệu kiểm thử (validation data)
- Các chỉ số mAP_0.5, mAP_0.5:0.95 cho dữ liệu kiểm thử
- Precision và Recall cho dữ liệu kiểm thử
Tham số
- Siêu tham số của Model
- Tất cả cá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 (Confusion Matrix) về các dự đoán của model trên dữ liệu kiểm thử
- Các biểu đồ cho đường cong PR và F1 trên tất cả các lớp (classes)
- Correlogram của các nhãn lớp (Class Labels)
Cấu hình Ghi nhật ký Comet
Comet có thể được cấu hình để ghi lại dữ liệu bổ sung thông qua các cờ (flags) dòng lệnh được truyền tới 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 predictionsGhi lại Checkpoint với Comet
Việc ghi lại Model vào Comet bị tắt theo mặc định. Để bật tính năng này, hãy truyền đối số save-period vào script huấn luyện. Thao tác này sẽ lưu các checkpoint đã ghi vào 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 1Ghi lại các Dự đoán của Model
Theo mặc định, các dự đoán của model (hình ảnh, nhãn ground truth và bounding boxes) sẽ được ghi vào Comet.
Bạn có thể kiểm soát tần suất ghi lại các dự đoán và hình ảnh liên quan bằng cách truyền đối số dòng lệnh bbox_interval. Các dự đoán có thể được trực quan hóa bằng Object Detection Custom Panel của Comet. Tần suất này tương ứng với mỗi N batch dữ liệu mỗi epoch. Trong ví dụ bên dưới, chúng tôi đang ghi lại mỗi batch dữ liệu thứ 2 cho mỗi epoch.
Lưu ý: Dataloader kiểm thử của YOLOv5 sẽ mặc định là batch size là 32, vì vậy bạn sẽ phải đặt tần suất ghi nhật ký cho phù hợp.
Đây là dự án ví dụ sử dụng Panel
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--bbox_interval 2Kiểm soát số lượng Hình ảnh Dự đoán được ghi vào Comet
Khi ghi lại các dự đoán từ YOLOv5, Comet sẽ ghi lại các hình ảnh liên quan đến mỗi tập dự đoán. Theo mặc định, tối đa 100 hình ảnh kiểm thử sẽ được ghi lại. 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 1Ghi lại các Chỉ số theo Lớp
Sử dụng biến môi trường COMET_LOG_PER_CLASS_METRICS để ghi lại mAP, precision, recall, f1 cho từng lớp:
env COMET_LOG_PER_CLASS_METRICS=true python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.ptTải Bộ dữ liệu lên Comet Artifacts
Nếu bạn muốn lưu trữ dữ liệu của mình bằng Comet Artifacts, bạn có thể làm như vậy bằng cờ upload_dataset.
Bộ dữ liệu nên được tổ chức như mô tả trong tài liệu YOLOv5. Tệp cấu hình yaml của bộ dữ liệu phải tuân theo định dạng tương tự như tệp coco128.yaml.
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data coco128.yaml \
--weights yolov5s.pt \
--upload_datasetBạn có thể tìm thấy bộ dữ liệu đã tải lên trong tab Artifacts trong Comet Workspace của mình:

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

Các Artifact được quản lý phiên bản và cũng hỗ trợ thêm siêu dữ liệu (metadata) về bộ dữ liệu. Comet sẽ tự động ghi lại siêu dữ liệu từ tệp yaml bộ dữ liệu của bạn:

Sử dụng một Artifact đã lưu
Nếu bạn muốn sử dụng bộ dữ liệu từ Comet Artifacts, hãy đặt biến path trong tệp yaml bộ dữ liệu của bạn để trỏ đến URL tài nguyên Artifact sau đây:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"Sau đó truyền tệp này vào script huấn luyện của bạn theo cách sau:
python train.py \
--img 640 \
--batch 16 \
--epochs 5 \
--data artifact.yaml \
--weights yolov5s.ptArtifacts cũng cho phép bạn theo dõi dòng dõi (lineage) của dữ liệu khi nó di chuyển qua quy trình thực nghiệm của bạn. Tại đây, bạn có thể thấy một biểu đồ hiển thị tất cả các thực nghiệm đã sử dụng bộ dữ liệu đã tải lên của bạn:

Tiếp tục một Lần chạy Huấn luyện
Nếu lần chạy huấn luyện của bạn bị gián đoạn vì bất kỳ lý do gì, ví dụ: 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à Đường dẫn chạy (Run Path) của Comet.
Đường dẫn chạy 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 việc khôi phục model từ checkpoint, khôi phục tất cả các siêu tham số và đối số huấn luyện, và tải xuống các Artifact bộ dữ liệu Comet nếu chúng được sử dụng trong lần chạy gốc. Lần chạy được tiếp tục sẽ tiếp tục ghi nhật ký vào Thực nghiệm hiện có trong giao diện Comet:
python train.py \
--resume "comet://YOUR_RUN_PATH"Tìm kiếm Siêu tham số với Comet Optimizer
YOLOv5 cũng được tích hợp với Comet's Optimizer, giúp việc trực quan hóa các đợt quét siêu tham số (hyperparameter sweeps) trong giao diện Comet trở nên đơn giản.
Cấu hình một Đợt quét Optimizer
Để cấu hình Comet Optimizer, bạn sẽ phải tạo một tệp JSON với thông tin về đợt quét. Một tệp ví dụ đã được cung cấp trong 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ố tương tự như train.py. Nếu bạn muốn truyền các đối số bổ sung cho đợt quét của mình, 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 1Trực quan hóa Kết quả
Comet cung cấp một số cách để trực quan hóa kết quả của đợt quét của bạn. Hãy xem dự án với một đợt quét đã hoàn thành tại đây.
