Skip to content

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.
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. Evaluation Yolov7

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
Trong đó:

  • --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/data với /container_data
  • nvcr.io/nvidia/pytorch:xx.xx-py3 đây là Docker image để tạo với container với xx.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
Trong ví dụ này chúng ta sẽ cd tới thư mục /container_home/tripx/projects/others/demo_docker và clone code tại đây. Yolov7
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
Trong đó:
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 COCOdata/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
predict_result
### 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
demo_yolov7
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:
container_demo_yolov7
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:
###file data_name.yaml
trai: train_img_paths.txt #file chứa tất cả đường dẫn ảnh của tập train
val: val_img_paths.txt #file chứa tất cả đường dẫn ảnh của tập val
test: test_img_paths.txt  ##file chứa tất cả đường dẫn ảnh của tập test

# number of classes
nc: 4 #số lượng class

# class names
names: [ 'class_1', 'class_2', 'class_3', 'class_4' ]
Ở đây mình đã tạo sẵn file config data demo_yolov7.yaml như sau:
demo_yolov7
Ở 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.
python test.py --data data/demo_yolov7.yaml --img 640 --batch 32 --conf 0.001 --iou 0.65 --device 0 --weights yolov7.pt --name yolov7_640_demo --task test
Sau đây kết quả model đã dự đoán
predict_result