Huấn luyện và giám sát từ xa Ultralytics YOLOv5 bằng ClearML
Tìm hiểu cách theo dõi thí nghiệm, quản lý phiên bản dataset, tinh chỉnh siêu tham số và huấn luyện model Ultralytics YOLOv5 trên máy từ xa bằng ClearML.
Nuvola Ladi8 phút đọc
Tại Ultralytics, chúng tôi hợp tác thương mại với các startup khác để giúp tài trợ cho hoạt động nghiên cứu và phát triển các công cụ mã nguồn mở như YOLOv5, qua đó duy trì việc cung cấp miễn phí cho mọi người. Bài viết này có thể chứa các liên kết liên kết đến những đối tác đó.
ClearML là đối tác mới nhất của chúng tôi: một bộ công cụ mã nguồn mở được thiết kế để giúp bạn tiết kiệm thời gian.
Với sứ mệnh thúc đẩy việc áp dụng ML, ClearML giúp dễ dàng tích hợp ML vào mọi sản phẩm phần mềm hoặc phần cứng.
Tích hợp này giúp việc huấn luyện model YOLOv5 trở nên đơn giản hơn nữa, đồng thời cho phép sử dụng trình quản lý thử nghiệm ClearML để tự động theo dõi model. Bạn có thể dễ dàng chỉ định ID phiên bản dataset ClearML làm đầu vào dữ liệu và dataset đó sẽ tự động được dùng để huấn luyện model.
Nâng tầm theo dõi thử nghiệm#
- Theo dõi mọi lần chạy huấn luyện YOLOv5 trong trình quản lý thử nghiệm.
- Quản lý phiên bản và dễ dàng truy cập dữ liệu huấn luyện tùy chỉnh bằng Công cụ quản lý phiên bản dữ liệu ClearML tích hợp.
- Đạt mAP tốt nhất với Tối ưu hóa siêu tham số ClearML.
- Chuyển model YOLOv5 vừa huấn luyện thành API chỉ bằng vài lệnh với ClearML Serving.
Bạn có thể tự chọn số lượng công cụ muốn sử dụng: chỉ dùng trình quản lý thử nghiệm hoặc kết hợp tất cả thành một pipeline ấn tượng.
Thiết lập#
Để theo dõi các thử nghiệm và dữ liệu, ClearML cần giao tiếp với một máy chủ. Bạn có hai lựa chọn: đăng ký miễn phí Dịch vụ ClearML Hosted hoặc tự thiết lập máy chủ.
Ngay cả máy chủ cũng là mã nguồn mở, vì vậy nếu bạn xử lý dữ liệu nhạy cảm thì không có vấn đề gì!
- Cài đặt package ClearML Python:
pip install clearml - Kết nối ClearML SDK với máy chủ bằng cách tạo thông tin xác thực (ở góc trên bên phải, vào Settings → Workspace → Create new credentials), sau đó chạy lệnh bên dưới và làm theo hướng dẫn:
clearml-init
Bây giờ bạn đã sẵn sàng bắt đầu.
Huấn luyện YOLOv5 với ClearML#
Để bật theo dõi thử nghiệm trong ClearML, chỉ cần cài đặt package ClearML pip.
pip install clearmlThao tác này sẽ bật tích hợp với script huấn luyện YOLOv5. Từ giờ trở đi, mọi lần chạy huấn luyện sẽ được trình quản lý thử nghiệm ClearML ghi lại và lưu trữ. Nếu muốn thay đổi project_name hoặc task_name, hãy truy cập logger tùy chỉnh của chúng tôi để chỉnh sửa: utils/loggers/clearml/clearml_utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128.yaml --weights yolov5s.pt --cacheThao tác này sẽ ghi lại:
- Mã nguồn + các thay đổi chưa commit
- Các package đã cài đặt
- (Siêu) tham số
- Các tệp model (dùng --save-period n để lưu checkpoint sau mỗi n epoch)
- Đầu ra console
- Các giá trị vô hướng (mAP50, mAP50-95, độ chính xác, độ thu hồi, loss, learning rate, ...)
- Thông tin chung như chi tiết máy, thời gian chạy, ngày tạo, v.v.
- Tất cả biểu đồ được tạo, chẳng hạn như biểu đồ tương quan nhãn và ma trận nhầm lẫn
- Hình ảnh có bounding box theo từng epoch
- Mosaic theo từng epoch
- Hình ảnh validation theo từng epoch
Giờ đây, chúng ta có thể trực quan hóa toàn bộ thông tin này trong giao diện ClearML để nắm tổng quan về tiến trình huấn luyện. Thêm các cột tùy chỉnh vào chế độ xem bảng (chẳng hạn như mAP50) để dễ dàng sắp xếp theo model có hiệu năng tốt nhất. Hoặc chọn nhiều thí nghiệm và so sánh trực tiếp chúng!
Chúng ta còn có thể làm được nhiều hơn với tất cả thông tin này, chẳng hạn như tối ưu hóa siêu tham số và thực thi từ xa, hãy tiếp tục đọc để tìm hiểu cách thực hiện!
Quản lý phiên bản dataset#
Việc quản lý phiên bản dữ liệu tách biệt với code thường là một ý tưởng hay và cũng giúp dễ dàng lấy phiên bản mới nhất. Repository này hỗ trợ cung cấp ID phiên bản dataset và sẽ đảm bảo lấy dữ liệu nếu dữ liệu chưa có. Ngoài ra, workflow này cũng lưu ID dataset đã dùng trong tham số của task, nhờ đó bạn luôn biết chắc dữ liệu nào đã được dùng trong từng experiment!
Chuẩn bị dataset#
Kho lưu trữ YOLOv5 hỗ trợ nhiều dataset khác nhau bằng cách sử dụng các file YAML chứa thông tin về chúng. Theo mặc định, dataset được tải xuống thư mục ../datasets tính từ thư mục gốc của kho lưu trữ. Vì vậy, nếu tải dataset COCO128 bằng liên kết trong YAML hoặc bằng các script do YOLOv5 cung cấp, bạn sẽ có cấu trúc thư mục sau:
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ LICENSE
|_ README.txtBạn có thể dùng bất kỳ dataset nào mình muốn. Hãy thoải mái sử dụng dataset riêng, miễn là giữ đúng cấu trúc thư mục này.
Tiếp theo, sao chép file YAML tương ứng vào thư mục gốc của dataset. Các file YAML này chứa thông tin ClearML cần để sử dụng dataset đúng cách. Tất nhiên, bạn cũng có thể tự tạo file này, chỉ cần làm theo cấu trúc của các file YAML mẫu.
File YAML cần có các khóa sau: path, train, test, val, nc và names.
..
|_ yolov5
|_ datasets
|_ coco128
|_ images
|_ labels
|_ coco128.yaml # ← HERE!
|_ LICENSE
|_ README.txtTải dataset lên#
Để đưa dataset này vào ClearML dưới dạng dataset có quản lý phiên bản, hãy chuyển đến thư mục gốc của dataset và chạy lệnh sau:
cd coco128
clearml-data sync --project YOLOv5 --name coco128 --folder .Thực ra, lệnh clearml-data sync là một lệnh rút gọn. Bạn cũng có thể chạy lần lượt các lệnh sau:
# Optionally add --parent if you want to base
# this version on another dataset version, so no duplicate files are uploaded!
clearml-data create --name coco128 --project YOLOv5
clearml-data add --files .
clearml-data closeChạy training bằng dataset ClearML#
Giờ đây, khi đã có dataset ClearML, bạn có thể dùng dataset đó để huấn luyện các model YOLOv5 tùy chỉnh.
python train.py --img 640 --batch 16 --epochs 3 --data clearml:// --weights yolov5s.pt --cacheTối ưu hóa siêu tham số#
Giờ đây, khi đã có experiment và phiên bản dữ liệu, đã đến lúc xem chúng ta có thể xây dựng thêm những gì!
Với thông tin mã nguồn, các package đã cài đặt và chi tiết môi trường, giờ đây bản thân thử nghiệm có thể được tái tạo hoàn toàn. Trên thực tế, ClearML cho phép bạn sao chép một thử nghiệm và thậm chí thay đổi các tham số của thử nghiệm đó. Sau đó, chúng ta có thể tự động chạy lại thử nghiệm với các tham số mới này; về bản chất, đó chính là HPO.
Để chạy tối ưu hóa siêu tham số trên máy cục bộ, chúng tôi đã chuẩn bị sẵn một script. Chỉ cần đảm bảo đã chạy một tác vụ huấn luyện ít nhất một lần để tác vụ đó xuất hiện trong trình quản lý thử nghiệm ClearML; script sẽ sao chép tác vụ và thay đổi các siêu tham số.
Bạn cần điền ID của task mẫu này vào script tại utils/loggers/clearml/hpo.py, sau đó chạy script. Bạn có thể đổi task.execute_locally() thành task.execute() để đưa task vào hàng đợi ClearML và để một agent từ xa xử lý task.
# To use optuna, install it first, otherwise you can change the optimizer to just be RandomSearch
pip install optuna
python utils/loggers/clearml/hpo.pyThực thi từ xa (nâng cao)#
Chạy HPO cục bộ rất tiện lợi, nhưng nếu muốn chạy experiment trên một máy từ xa thì sao? Có thể bạn có quyền truy cập vào một máy GPU rất mạnh tại chỗ, hoặc có ngân sách để sử dụng GPU trên cloud. Đây là lúc ClearML Agent phát huy tác dụng.
Tìm hiểu những gì agent có thể làm tại đây:
Tóm lại: mỗi experiment được trình quản lý experiment theo dõi đều chứa đủ thông tin để tái tạo experiment đó trên một máy khác (các package đã cài đặt, những thay đổi chưa commit, v.v.). ClearML agent thực hiện đúng việc đó: agent lắng nghe hàng đợi để nhận task và khi tìm thấy task, agent sẽ tạo lại môi trường rồi chạy task, đồng thời tiếp tục báo cáo các giá trị vô hướng, biểu đồ, v.v. cho trình quản lý experiment.
Bạn có thể biến bất kỳ máy nào (VM trên cloud, máy GPU cục bộ, laptop cá nhân) thành ClearML agent chỉ bằng cách chạy:
clearml-agent daemon --queue QUEUES_TO_LISTEN_TO [--docker]Sao chép, chỉnh sửa và đưa vào hàng đợi#
Khi agent đã chạy, chúng ta có thể giao việc cho agent. Hãy nhớ trong phần HPO, chúng ta có thể sao chép một task rồi chỉnh sửa các siêu tham số. Chúng ta cũng có thể làm điều đó ngay trên giao diện!
- Sao chép thử nghiệm bằng cách nhấp chuột phải vào thử nghiệm đó.
- Chỉnh sửa siêu tham số thành các giá trị bạn muốn.
- Đưa tác vụ vào bất kỳ hàng đợi nào bằng cách nhấp chuột phải vào tác vụ đó.
Thực thi task từ xa#
Giờ đây, bạn có thể sao chép một task như đã hướng dẫn ở trên, hoặc chỉ cần đánh dấu script hiện tại bằng cách thêm task.execute_remotely(); khi thực thi, script sẽ được đưa vào hàng đợi để agent bắt đầu xử lý!
Để chạy script training YOLOv5 từ xa, bạn chỉ cần thêm dòng này vào script train.py, sau khi khởi tạo ClearML logger:
# ...
# Loggers
data_dict = None
if RANK in {-1, 0}:
loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # đối tượng loggers
if loggers.clearml:
loggers.clearml.task.execute_remotely(queue="my_queue") # <------ THÊM DÒNG NÀYCó câu hỏi nào không? Tham gia cộng đồng của chúng tôi và gửi câu hỏi ngay hôm nay!
Được viết bởi
Bình luận
Đặt câu hỏi, chia sẻ kết quả hoặc giúp đỡ người khác.










