
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 nhà khoa học dữ liệu, kỹ sư và trưởng nhóm đẩy nhanh và tối ưu hóa các model machine learning và deep learning.
Theo dõi và trực quan hóa metric 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 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, đồng thời giúp dễ dàng chia sẻ kết quả và cộng tác giữa các nhóm với 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 thông qua 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 tệp .comet.config trong thư mục làm việc và đặt thông tin xác thực trong đó:
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 training#
# Train YOLOv5s on COCO128 for 5 epochs
python train.py --img 640 --batch 16 --epochs 5 --data coco128.yaml --weights yolov5s.ptVậy là xong! Comet sẽ tự động ghi lại hyperparameter, đối số dòng lệnh, metric training và validation của bạn. Bạn có thể trực quan hóa và phân tích các lần chạy trong giao diện Comet.

Hãy thử một ví dụ!#
Xem một lần chạy đã hoàn tất tại đây.
Hoặc tốt hơn, hãy tự mình thử trong Colab Notebook này:
Tự động ghi log#
Theo mặc định, Comet sẽ ghi log các mục sau:
Metric#
- Box Loss, Object Loss, Classification Loss trên dữ liệu training và dữ liệu validation
- Các metric mAP_0.5, mAP_0.5:0.95 trên dữ liệu validation
- Precision và Recall trên dữ liệu validation
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 model trên dữ liệu validation
- Đồ thị đường cong PR và F1 cho tất cả các lớp
- Biểu đồ tương quan của nhãn lớp
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 được truyền cho script training hoặc thông qua 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_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 log checkpoint bằng Comet#
Theo mặc định, tính năng ghi log model lên Comet bị tắt. Để bật tính năng này, hãy truyền đối số save-period cho script training. Thao tác này sẽ lưu các checkpoint được ghi log vào Comet theo 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 log dự đoán của model#
Theo mặc định, dự đoán của model (ảnh, nhãn ground truth và bounding box) sẽ được ghi log vào Comet.
Bạn có thể kiểm soát tần suất ghi log dự đoán và các ảnh liên quan bằng cách truyền đối số dòng lệnh bbox_interval. Có thể trực quan hóa 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 của từng epoch.
Lưu ý: Dataloader validation của YOLOv5 sử dụng batch size gấp đôi batch size training (32 cho --batch 16), vì vậy bạn cần đặt tần suất ghi log cho phù hợp.
Đây là ví dụ về dự án 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 ảnh dự đoán được ghi log vào Comet#
Khi ghi log dự đoán từ YOLOv5, Comet sẽ ghi log các ảnh tương ứng với từng nhóm dự đoán. Theo mặc định, tối đa 100 ảnh 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 1Ghi log metric theo từng lớp#
Dùng biến môi trường COMET_LOG_PER_CLASS_METRICS để ghi log mAP, precision, recall và 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 dataset lên Comet Artifacts#
Nếu muốn lưu dữ liệu bằng Comet Artifacts, bạn có thể thực hiện bằng cờ upload_dataset.
Dataset cần được sắp xếp theo mô tả trong tài liệu YOLOv5. Tệp cấu hình dataset yaml phải tuân theo cùng định dạng với 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 dataset đã tải lên trong thẻ Artifacts của Comet Workspace:

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

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ừ tệp dataset yaml của bạn:

Sử dụng Artifact đã lưu#
Nếu muốn sử dụng dataset từ Comet Artifacts, hãy đặt biến path trong tệp dataset yaml để trỏ đến URL tài nguyên Artifact sau:
# Contents of artifact.yaml file
path: "comet://WORKSPACE_NAME/ARTIFACT_NAME:ARTIFACT_VERSION_OR_ALIAS"Sau đó, truyền tệp này cho script training như 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 nguồn gốc dữ liệu khi dữ liệu đi qua quy trình 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 bạn tải lên:

Tiếp tục một lượt huấn luyện#
Nếu lượt 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ị ngắt, bạn có thể tiếp tục lượt 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ượt 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 các dataset Artifact của Comet nếu chúng được sử dụng trong lượt chạy ban đầu. Lượt chạy được tiếp tục sẽ ghi log vào Experiment hiện có trong giao diện Comet:
python train.py \
--resume "comet://YOUR_RUN_PATH"Tìm kiếm hyperparameter bằng Comet Optimizer#
YOLOv5 cũng được tích hợp với Optimizer của Comet, giúp bạn dễ dàng trực quan hóa các lượt quét hyperparameter trong giao diện Comet.
Cấu hình lượt quét Optimizer#
Để cấu hình Comet Optimizer, bạn cần tạo một file JSON chứa thông tin về lượt qué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 lượt quét, 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 nhiều cách để trực quan hóa kết quả của lượt quét. Hãy xem dự án có lượt quét đã hoàn tất tại đây.

Câu hỏi thường gặp#
Tạo tài khoản miễn phí tại comet.com, mở phần cài đặt tài khoản và sao chép API key. Xuất key này dưới dạng
COMET_API_KEYhoặc lưu vào file.comet.configbên cạnhtrain.py.Có. Đặt
COMET_MODE=offlineđể ghi Experiment vào kho lưu trữ cục bộ, sau đó tải lên bằngcomet upload path/to/archive.zip.Tính năng ghi log checkpoint mặc định đang tắt. Truyền
--save-period 1(hoặc một khoảng thời gian khác) chotrain.py; mỗi checkpoint được lưu sẽ được tải lên Experiment.Sao chép run path từ giao diện Comet và bắt đầu huấn luyện với
python train.py --resume "comet://WORKSPACE/PROJECT/EXPERIMENT_ID". YOLOv5 khôi phục checkpoint, hyperparameter và mọi dataset artifact của Comet, sau đó tiếp tục ghi log vào cùng Experiment.