Hướng dẫn chi tiết: Cài đặt, chạy thử và xuất mô hình YOLOv5-6.1

1. Giới thiệu

Loạt bài viết này hướng dẫn sử dụng phiên bản YOLOv5-6.1 của Ultralytics cho các tác vụ phát hiện đối tượng. Nội dung bao gồm chạy thử với trọng số có sẵn, huấn luyện trên tập dữ liệu riêng, và triển khai mô hình. Người đọc cần nắm cơ bản về PyTorch và kiến trúc YOLOv5.

2. Môi trường phát triển

Yêu cầu môi trường cơ bản:

Python 3.6.5
Pytorch 1.71
OpenCV-Python 4.5.5
OpenVINO 2022 Python
onnxruntime-gpu 1.10.0

Khởi tạo môi trường ảo với conda:

conda create -n yolov5 python=3.6.5
conda activate yolov5

Các lệnh cài đặt gói:

pip install opencv-python==4.5.5.64
pip install opencv-contrib-python==4.5.5.64
pip install openvino-dev==2022.3.1
pip install onnxruntime-gpu==1.10.0
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch

Nếu gặp lỗi phiên bản, thử giảm số hiệu phụ. Việc tải PyTorch có thể chậm, bạn có thể tải file .whl từ danh sách PyTorch và dùng IDM hoặc XunLei để tăng tốc. Ví dụ với Windows, CUDA 12.0, Python 3.6.5, cần torch 1.7.0, tải các file .whl tương ứng, kiểm tra phiên bản khớp với lệnh trên.

3. Tải mã nguồn từ GitHub

YOLOv5 có nhiều nhánh, chúng tôi chọn bản chính thức từ ultralytics. Không dùng lệnh git clone ngay mà chọn bản phát hành ổn định. Trên trang GitHub, nhấp vào tab "Tags" và chọn v6.1 (không nên dùng v7.0 vì thêm tính năng phân đoạn).

Kéo xuống phần Assets, chọn "Source code (zip)" để tải xuống. Giải nén để có thư mục dự án.

4. Cài đặt bổ sung và chạy thử nghiệm

4.1 Cài đặt các gói phụ thuộc

Mở terminal tại thư mục dự án, kích hoạt môi trường ảo và chạy:

pip install -r requirements.txt

File requirements.txt bao gồm tất cả các thư viện cần thiết, trong đó có nhóm # Export sẽ dùng sau.

4.2 Kiểm tra phát hiện đối tượng

Mở file tutorial.ipynb trong Jupyter Notebook, đảm bảo kernel là môi trường yolov5. Nếu không thấy, chạy:

python -m ipykernel install --user --name yolov5

Chạy lệnh phát hiện với ảnh mẫu:

python detect.py --source data/images/zidane.jpg

Lần chạy đầu sẽ tải font Arial và trọng số yolov5s.pt. Nếu tải chậm, có thể tải thủ công từ link bằng XunLei, đặt vào thư mục dự án. Chạy lại lệnh, kết quả hiển thị các bước: tải mô hình, fuse layers, tiền xử lý, suy luận, NMS và đường dẫn lưu kết quả. Mở ảnh kết quả trong thư mục runs/detect/exp để xem các box phát hiện.

Để dùng webcam, chạy:

python detect.py --source 0

Nhấn Q hai lần để thoát.

5. Xuất và sử dụng các định dạng suy luận khác

5.1 Xuất mô hình

YOLOv5-6.1 hỗ trợ xuất nhiều định dạng. Chúng tôi sẽ xuất ONNX và OpenVINO IR. Trong file tutorial.ipynb có hướng dẫn, chạy lệnh:

python export.py --weights yolov5s.pt --include onnx openvino

Nếu lỗi thiếu thư viện export, cài đặt:

pip install onnx

Chạy lại lệnh export. Kết quả tạo file yolov5s.onnx và thư mục yolov5s_openvino_model chứa file IR.

5.2 Chạy suy luận với các định dạng đã xuất

Dùng ONNX (gọi onnxruntime):

python detect.py --weights yolov5s.onnx --source data/images/zidane.jpg

Kết quả hiển thị: 2 người, 2 cà vạt, thời gian suy luận 182.1ms (tiền xử lý 4.4ms, NMS 3.5ms).

Dùng OpenVINO IR:

python detect.py --weights yolov5s_openvino_model --source data/images/zidane.jpg

So sánh, OpenVINO cho tốc độ nhanh hơn onnxruntime trong môi trường hiện tại.

5.3 Trực quan hóa cấu trúc mô hình

Dùng Netron để xem cấu trúc. Cách nhanh: vào netron.app và mở file .onnx (không khuyến khích vì upload file). Cách an toàn: cài đặt local:

pip install netron
netron

Mở trình duyệt tại http://localhost:8080, chọn "Open Model..." và tìm yolov5s.onnx. Nhấp vào nút "images" ở đầu để xem thông tin đầu vào/ra. Đầu vào là float32[1,3,640,640]. Đầu ra gồm 4 phần: output (float32[1,25200,85]) tổng hợp từ 3 detection heads (float32[1,3,80,80,85], float32[1,3,40,40,85], float32[1,3,20,20,85]). Chỉ cần dùng output. Việc giữ 3 heads là để tương thích ngược.

Để tìm hiểu sâu về kiến trúc YOLOv5, tham khảo các bài viết của "江大白" trên Zhihu, bắt đầu từ YOLOv3.

6. Biến thể yolov5s6

YOLOv5-6.1 có biến thể yolov5s6 với kiến trúc mạnh hơn. Tải trọng số yolov5s6.pt từ GitHub và xuất ONNX:

python export.py --weights yolov5s6.pt --include onnx

Xem bằng Netron, đầu ra gồm 4 phần, trong đó có thêm detection head float32[1,3,10,10,85]. Điều này cho thấy mô hình kết hợp đặc trưng từ 4 giai đoạn, thay vì 3 như bản thường.

Thẻ: YOLOv5 Ultralytics PyTorch opencv ONNX

Đăng vào ngày 20 tháng 5 lúc 00:39