Đào tạo và giám sát từ xa Ultralytics YOLOv5 Sử dụng ClearML

Ngày 21 tháng 10 năm 2022
Khám phá mối quan hệ đối tác của chúng tôi với ClearML để nâng cao Ultralytics YOLOv5 trải nghiệm tích hợp ML liền mạch, theo dõi thử nghiệm và nhiều hơn nữa.


Ngày 21 tháng 10 năm 2022
Khám phá mối quan hệ đối tác của chúng tôi với ClearML để nâng cao Ultralytics YOLOv5 trải nghiệm tích hợp ML liền mạch, theo dõi thử nghiệm và nhiều hơn nữa.

Tại Ultralytics chúng tôi hợp tác thương mại với các công ty khởi nghiệp khác để giúp chúng tôi tài trợ cho việc nghiên cứu và phát triển các công cụ nguồn mở tuyệt vời của chúng tôi, như YOLOv5 , để giữ chúng miễn phí cho tất cả 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 các đố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 ML dễ dàng tích hợp vào bất kỳ sản phẩm Phần mềm và Phần cứng nào hiện có.
Sự tích hợp này làm cho việc đào tạo mô hình YOLOv5 và sử dụng nó trở nên đơn giản hơn ClearML người quản lý thí nghiệm để track nó tự động. Bạn có thể dễ dàng chỉ định một ClearML ID phiên bản tập dữ liệu làm dữ liệu đầu vào và nó sẽ tự động được sử dụng để đào tạo mô hình của bạn.
Bạn có thể tùy ý sử dụng bao nhiêu công cụ trong số này, bạn có thể gắn bó với trình quản lý thử nghiệm hoặc xâu chuỗi tất cả chúng lại với nhau thành một quy trình ấn tượng.
Để giữ track của các thí nghiệm và dữ liệu của bạn, ClearML cần giao tiếp với máy chủ. Bạn có hai lựa chọn: đăng ký miễn phí ClearML Dịch vụ lưu trữ hoặc thiết lập máy chủ của riêng bạn, xem tại đây .
Ngay cả máy chủ cũng là mã nguồn mở, vì vậy nếu bạn đang xử lý dữ liệu nhạy cảm, thì đó không phải là vấn đề!
Và thế là xong! Bạn đã sẵn sàng để bắt đầu...
Để kích hoạt ClearML theo dõi thử nghiệm, chỉ cần cài đặt ClearML gói pip.
cài đặt pip clearml
Điều này sẽ cho phép tích hợp với YOLOv5 kịch bản đào tạo. Mọi lần chạy đào tạo từ bây giờ sẽ được ghi lại và lưu trữ bởi ClearML Trình quản lý thử nghiệm. Nếu bạn muốn thay đổi project_name hoặc task_name, hãy truy cập trình ghi nhật ký tùy chỉnh của chúng tôi, nơi bạn có thể thay đổi: utils/loggers/ clearml / clearml _utils.py
python train.py --img 640 --batch 16 --epochs 3 --data coco128. yaml --weights yolov5s.pt --cache
Điều này sẽ ghi lại:
Không tệ lắm! Bây giờ, chúng ta có thể hình dung tất cả thông tin này trong ClearML Giao diện người dùng để có cái nhìn tổng quan về tiến độ đào tạo của chúng tôi. Thêm các cột tùy chỉnh vào chế độ xem bảng (ví dụ: mAP _0,5) để bạn có thể dễ dàng sắp xếp theo mô hình hiệu suất 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 thậm chí có thể làm được nhiều hơn nữa với tất cả thông tin này, như tối ưu hóa siêu tham số và thực thi từ xa, vì vậy hãy tiếp tục đọc để tìm hiểu cách thực hiện!
Việc kiểm soát phiên bản dữ liệu của bạn riêng biệt với mã của bạn thường là một ý tưởng hay và giúp bạn dễ dàng có được phiên bản mới nhất. Kho lưu trữ này hỗ trợ cung cấp ID phiên bản tập dữ liệu và nó sẽ đảm bảo lấy dữ liệu nếu nó chưa có ở đó. Bên cạnh đó, quy trình làm việc này cũng lưu ID tập dữ liệu đã sử dụng như một phần của các tham số tác vụ, vì vậy bạn sẽ luôn biết chắc chắn dữ liệu nào đã được sử dụng trong thí nghiệm nào!
Các YOLOv5 Kho lưu trữ hỗ trợ một số tập dữ liệu khác nhau bằng cách sử dụng các tệp YAML chứa thông tin của chúng. Theo mặc định, các tập dữ liệu được tải xuống thư mục ../datasets liên quan đến thư mục gốc của kho lưu trữ. Vì vậy, nếu bạn đã tải xuống tập dữ liệu coco128 bằng liên kết trong YAML hoặc bằng các tập lệnh được cung cấp bởi yolov5 , bạn sẽ nhận được cấu trúc thư mục này:
..
|_ yolov5
|_ tập dữ liệu
|_ coco128
|_ hình ảnh
|_ nhãn
|_ GIẤY PHÉP
|_ README.txt
Nhưng đây có thể là bất kỳ bộ dữ liệu nào bạn muốn. Vui lòng sử dụng bộ dữ liệu của riêng bạn, miễn là bạn tuân thủ cấu trúc thư mục này.
Tiếp theo, ⚠️sao chép tệp YAML tương ứng vào thư mục gốc của thư mục tập dữ liệu⚠️. Các tệp YAML này chứa thông tin ClearML sẽ cần sử dụng tập dữ liệu một cách chính xác. Tất nhiên, bạn cũng có thể tự làm điều này, chỉ cần làm theo cấu trúc của tệp YAML mẫu.
Về cơ bản, chúng ta cần các key sau: path, train, test, val, nc, names.
..
|_ yolov5
|_ tập dữ liệu
|_ coco128
|_ hình ảnh
|_ nhãn
|_ coco128. yaml # ← ĐÂY!
|_ GIẤY PHÉP
|_ README.txt
Để có được tập dữ liệu này vào ClearML với tư cách là một tập dữ liệu có phiên bản, hãy chuyển đến thư mục gốc của tập dữ liệu và chạy lệnh sau:
cd coco128
clearml -đồng bộ dữ liệu --dự án YOLOv5 --tên coco128 --thư mục .
Lệnh clearml -data sync thực chất là một lệnh viết tắt. Bạn cũng có thể chạy các lệnh này lần lượt:
# Tùy chọn thêm --parent nếu bạn muốn dựa phiên bản này
# trên một phiên bản dataset khác, để không có file trùng lặp nào được tải lên!
clearml -data tạo --tên coco128 --dự án YOLOv5 /p>
clearml -data thêm --files .
clearml -dữ liệu đóng
Bây giờ bạn đã có một ClearML tập dữ liệu, bạn có thể dễ dàng sử dụng nó để đào tạo tùy chỉnh YOLOv5 các mô hình.
python train.py --img 640 --batch 16 --epochs 3 --data clearml :// --weights yolov5s.pt --cache
Bây giờ chúng ta đã có các thử nghiệm và phiên bản dữ liệu, đã đến lúc xem xét những gì chúng ta có thể xây dựng trên đó!
Sử dụng thông tin mã, các gói đã cài đặt và chi tiết môi trường, bản thân thí nghiệm giờ đây 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 thông số của nó. Sau đó, chúng ta có thể tự động chạy lại thí nghiệm với các thông số mới này, về cơ bản đây chính là những gì HPO thực hiện!
Để chạy tối ưu hóa siêu tham số cục bộ, chúng tôi đã bao gồm một tập lệnh được tạo sẵn cho bạn. Chỉ cần đảm bảo rằng tác vụ đào tạo đã được chạy ít nhất một lần, để nó nằm trong ClearML người quản lý thí nghiệm, về cơ bản chúng ta sẽ sao chép nó và thay đổi các siêu tham số của nó.
Bạn sẽ cần điền ID của tác vụ mẫu này vào tập lệnh được tìm thấy tại utils/loggers/ clearml /hpo.py và sau đó chỉ cần chạy nó. Bạn có thể thay đổi task.execute_locally() thành task.execute() để đưa nó vào ClearML xếp hàng và để một tác nhân từ xa xử lý thay thế.
# Để sử dụng optuna, hãy cài đặt nó trước, nếu không, bạn có thể thay đổi trình tối ưu hóa thành RandomSearch pip install optuna python tiện ích/người ghi nhật ký/ clearml /hpo.py
Chạy HPO cục bộ thực sự tiện lợi, nhưng nếu chúng ta muốn chạy thử nghiệm trên một máy tính từ xa thì sao? Có thể bạn có quyền truy cập vào một công cụ rất mạnh mẽ GPU máy tại chỗ hoặc bạn có một số ngân sách để sử dụng GPU đám mây. Đây là nơi ClearML Người đại diện tham gia vào cuộc chơi.
Xem những gì agent có thể làm tại đây:
Tóm lại: mọi thử nghiệm được theo dõi bởi người quản lý thử nghiệm đều chứa đủ thông tin để tái tạo thử nghiệm đó trên một máy khác (các gói đã cài đặt, các thay đổi chưa được cam kết, v.v.). Vì vậy, ClearML tác nhân thực hiện chính xác như vậy: nó lắng nghe hàng đợi các tác vụ đến và khi tìm thấy, nó sẽ tạo lại môi trường và chạy trong khi vẫn báo cáo các số vô hướng, biểu đồ, v.v. cho người quản lý thử nghiệm.
Bạn có thể biến bất kỳ máy nào (máy ảo đám mây, máy cục bộ GPU máy tính xách tay của riêng bạn) thành một ClearML tác nhân bằng cách chỉ cần chạy:
clearml -agent daemon --queue [--docker]
Khi agent của chúng ta đang chạy, chúng ta có thể giao việc cho nó. Bạn còn nhớ từ phần HPO rằng chúng ta có thể nhân bản một tác vụ và chỉnh sửa các siêu tham số không? Chúng ta cũng có thể làm điều đó từ giao diện!
🪄 Nhân bản thử nghiệm bằng cách nhấp chuột phải vào nó
🎯 Chỉnh sửa các siêu tham số theo ý muốn của bạn
⏳ Đưa tác vụ vào hàng đợi bất kỳ bằng cách nhấp chuột phải vào nó
Bây giờ bạn có thể nhân bản một tác vụ như chúng tôi đã giải thích ở trên, hoặc chỉ cần đánh dấu script hiện tại của bạn bằng cách thêm task.execute_remotely() và khi thực thi, nó sẽ được đưa vào hàng đợi để agent bắt đầu làm việc!
Để chạy YOLOv5 tập lệnh đào tạo từ xa, tất cả những gì bạn phải làm là thêm dòng này vào tập lệnh training.py sau ClearML logger đã được khởi tạo:
# ... # Loggers data_dict = None if RANK in {-1, 0}: loggers = Loggers(save_dir, weights, opt, hyp, LOGGER) # loggers instance if loggers.clearml: loggers.clearml.task.execute_remotely(queue='my_queue') # <------ ADD THIS LINE # Data_dict is either None is user did not choose for ClearML dataset or is filled in by ClearML data_dict = loggers.clearml.data_dict # ...
Khi chạy tập lệnh đào tạo sau khi thay đổi này, python sẽ chạy tập lệnh cho đến dòng đó, sau đó nó sẽ đóng gói mã và gửi vào hàng đợi!
ClearML Công cụ này cũng đi kèm với bộ tự động điều chỉnh quy mô! Công cụ này sẽ tự động khởi tạo các máy chủ từ xa mới trên nền tảng đám mây bạn chọn (AWS, GCP, Azure) và biến chúng thành ClearML Các tác nhân hỗ trợ bạn bất cứ khi nào phát hiện có thí nghiệm trong hàng đợi. Sau khi xử lý xong các tác vụ, bộ điều chỉnh tự động sẽ tự động tắt các máy từ xa và bạn sẽ không phải trả phí nữa! Xem video hướng dẫn sử dụng bộ điều chỉnh tự động bên dưới.
Bạn có câu hỏi nào không? Tham gia cộng đồng của chúng tôi và đặt câu hỏi của bạn ngay hôm nay!