Hướng dẫn chạy Yolov7 với Docker Container
Yolov7 là một thuật toán hiệu quả cho bài toán Object Detection. Bài toán Object Detection sẽ nhận vào là một ảnh chứa object, đầu ra của bài toán là các tọa độ các bounding box và tên của các object tương ứng (class_name). Hình dưới là một ví dụ cho bài toán Object Detection.
Yolov7 là thuật toán được vừa mới được public trong hội nghĩ CVPR đó đạt được tốc độ nhanh những vẫn đảm bảo được độ chính xác so với các thuật toán khác. Trong bài hướng dẫn này chúng ta sẽ setup môi trường bằng docker để chạy thuật toán này.
Tạo môi trường
Tạo Docker container
Tạo Docker Container từ image do nhà Pytorch cung cấp tại đây theo câu lệnh sau:
nvidia-docker run --name test_yolov7 -it -v /data:/container_data -v /home:/container_home --shm-size=64g nvcr.io/nvidia/pytorch:21.08-py3
--name
là tên Docker container (các bạn nên tùy chỉnh tên thích hợp).-it
cho phép tương tác trong container-v
để mount thư mục bên ngoài vào trong docker. Cụ thể ở đây chúng ta đang mount thư mục/home
của server với/container_home
và/data
với/container_data
nvcr.io/nvidia/pytorch:xx.xx-py3
đây là Docker image để tạo với container vớixx.xx
là version của image (trong ví dụ là21.08
)
Update package
Sau khi tạo Docker container, chúng ta cần update và cài đặt thêm thư viện như sau:
apt update
apt install -y zip htop screen libgl1-mesa-glx
pip install seaborn thop
Download souce code
Chúng ta sẽ download source code của Yolov7 bằng cách git clone tại đây
git clone https://github.com/WongKinYiu/yolov7.git
cd
tới thư mục /container_home/tripx/projects/others/demo_docker
và clone code tại đây.
Sau đó chúng ta
cd
vào thư mục yolov7
Dự đoán với pre-train model.
Dự đoán trên tập dữ liệu COCO.
Dữ liệu chúng ta sẽ chạy là tập COCO dataset, source code sẽ tự động tải dữ liệu. Chỉ cần chạy câu lệnh sau để dự đoán kết quả trên tập COCO.
python test.py --data data/coco.yaml --img 640 --batch 32 --conf 0.001 --iou 0.65 --device 0 --weights yolov7.pt --name yolov7_640_val
1.
weights
là loại model. Tác giả hỗ trợ các version sau, chúng ta sẽ sử dụng YOLOv7
Model | Test Size | APtest | AP50test | AP75test | batch 1 fps | batch 32 average time |
---|---|---|---|---|---|---|
YOLOv7 | 640 | 51.4% | 69.7% | 55.9% | 161 fps | 2.8 ms |
YOLOv7-X | 640 | 53.1% | 71.2% | 57.8% | 114 fps | 4.3 ms |
YOLOv7-W6 | 1280 | 54.9% | 72.6% | 60.1% | 84 fps | 7.6 ms |
YOLOv7-E6 | 1280 | 56.0% | 73.5% | 61.2% | 56 fps | 12.3 ms |
YOLOv7-D6 | 1280 | 56.6% | 74.0% | 61.8% | 44 fps | 15.0 ms |
YOLOv7-E6E | 1280 | 56.8% | 74.4% | 62.1% | 36 fps | 18.7 ms |
2. --data là file config của dataset, trong trường hợp này chúng ta chạy trên tập dữ liệu COCO là data/coco.yaml |
||||||
3. Các arguments còn lại chúng ta có thể tham khảo tại trong file ./test.py |
||||||
Kết quả dự đoán được lưu tại đây /home/tripx/projects/others/demo_docker/yolov7/runs/test |
||||||
### Dự đoán trên tập dữ liệu tự custom | ||||||
1. Chuẩn bị dữ liệu: giải sử chúng ta có một tập dữ liệu nằm tại thư mục /data/tripx/demo_yolov7 như sau |
||||||
Tại vì chúng ta đã mount thư mục /data với container_data , nên trong Docker container dữ liệu sẽ chứa tại container_data : |
||||||
2. Tạo file config cho dữ liệu tại thư mục yolov7/data theo cấu trúc sau: |
||||||
Dữ liệu trên được trích từ tập COCO nên chúng ta sẽ sử dụng một số tham số tương tự trong file data/coco.yaml , với cấu trúc file như sau: |
||||||
|
||||||
Ở đây mình đã tạo sẵn file config data demo_yolov7.yaml như sau: |
||||||
Ở line thứ 2 và 3 mình không set đường file txt vì mình không cần sử dụng tới tập train và val, nên chỉ cần set file txt cho tập test | ||||||
3. Dự đoán trên tập mới với câu lệnh sau: | ||||||
Lưu ý: ở đây mình chỉ thay đổi đường dẫn config dataset, còn các tham số còn lại đều giữa nguyên như câu lệnh trên. | ||||||
|
||||||
Sau đây kết quả model đã dự đoán | ||||||