Windows 11のWSL2でDockerを使用し、学習済みの重みデータを使ってYOLOv9による物体検出をしたときのメモになります。GPGPUを使用する設定で動作確認しました。
1. YOLOv9のダウンロード
下記のコマンドでYOLOv9のソースコードをディレクトリ/repos/yolov9にcloneしました。
fukagai@ESPRIMOWD2H2:~$ sudo mkdir /repos fukagai@ESPRIMOWD2H2:~$ sudo chown fukagai.fukagai /repos/ fukagai@ESPRIMOWD2H2:~$ cd /repos/ fukagai@ESPRIMOWD2H2:/repos$ git clone https://github.com/WongKinYiu/yolov9.git
2. 学習済みの重みのダウンロード
下記のページからリンクが張られている学習済みの重みデータyolov9-c-converted.ptをダウンロードし、/repos/yolov9/weights/yolov9-c-converted.ptとして保存しました。
https://github.com/WongKinYiu/yolov9
fukagai@ESPRIMOWD2H2:/repos/yolov9$ mkdir weights fukagai@ESPRIMOWD2H2:/repos/yolov9$ cd weights/ fukagai@ESPRIMOWD2H2:/repos/yolov9/weights$ wget https://github.com/WongKinYiu/yolov9/releases/download/v0.1/yolov9-c-converted.pt
3. YOLOv9の実行環境をDockerで用意 (GPGPUを使用)
3.1. 下記のページのInstallationに記載されているdockerコマンドを少し変更した下記のコマンドを実行しました。
https://github.com/WongKinYiu/yolov9
fukagai@ESPRIMOWD2H2:/repos/yolov9/weights$ sudo docker run --runtime=nvidia --gpus all --name yolov9-gpu -it -v /mnt/c/dev/data/yolov9:/detections -v /repos/yolov9:/yolov9 --shm-size=64g nvcr.io/nvidia/pytorch:21.11-py3 ============= == PyTorch == ============= NVIDIA Release 21.11 (build 29224839) PyTorch Version 1.11.0a0+b6df043 Container image Copyright (c) 2021, NVIDIA CORPORATION & AFFILIATES. All rights reserved. ... NOTE: MOFED driver for multi-node communication was not detected. Multi-node communication performance may be reduced.
物体検出用の画像と出力画像を保存するディレクトリとして、/mnt/c/dev/data/yolov9を指定しています。Windows 11からはフォルダC:\dev\data\yolov9として参照できます。このディレクトリはDockerコンテナ内では/detectionsになります。
yolov9のソースコードと学習済みの重みデータが置かれたディレクトリとして/repos/yolov9を指定しています。このディレクトリはDockerコンテナ内では/yolov9になります。
GPGPUを使用するオプションとして –gpus all を指定しています。
コンテナ名は –name yolov9-gpu のように指定し、yolov9-gpu にしました。
3.2. 下記のページのInstallationに記載されている下記のコマンドをDockerコンテ内で実行しました。
https://github.com/WongKinYiu/yolov9
ダウンロードしたYOLOv9のソースコードと重みデータが存在することを確認してからコマンドを実行しました。
root@d8077311720e:/workspace# cd /yolov9/ root@d8077311720e:/yolov9# ls LICENSE.md classify detect_dual.py hubconf.py requirements.txt tools train_triple.py val_dual.py README.md data export.py models scripts train.py utils val_triple.py benchmarks.py detect.py figure panoptic segment train_dual.py val.py weights root@d8077311720e:/yolov9# ls weights/ yolov9-c-converted.pt root@d8077311720e:/yolov9# apt update root@d8077311720e:/yolov9# apt install -y zip htop screen libgl1-mesa-glx root@d8077311720e:/yolov9# pip install seaborn thop
4. Dockerコンテナ内で物体検出を実行
下記のコマンドを実行し、入力画像 /detections/inputs/Birds-Tobagawa-2023-02-19.JPG 内の物体検出をしました。
–weights ‘./weights/yolov9-c-converted.pt’ でダウンロードした重みデータを指定しています。
root@d8077311720e:/yolov9# python detect.py --source '/detections/inputs/Birds-Tobagawa-2023-02-19.JPG' --device 0 --weights './weights/yolov9-c-converted.pt' --name yolov9_c_c_640_detect detect: weights=['./weights/yolov9-c-converted.pt'], source=/detections/inputs/Birds-Tobagawa-2023-02-19.JPG, data=data/coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=0, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs/detect, name=yolov9_c_c_640_detect, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1 YOLO 🚀 v0.1-89-g93f1a28 Python-3.8.12 torch-1.11.0a0+b6df043 CUDA:0 (NVIDIA GeForce GTX 1650, 4096MiB) Fusing layers... gelan-c summary: 387 layers, 25288768 parameters, 64944 gradients, 102.1 GFLOPs image 1/1 /detections/inputs/Birds-Tobagawa-2023-02-19.JPG: 448x640 17 birds, 44.2ms Speed: 0.6ms pre-process, 44.2ms inference, 7.1ms NMS per image at shape (1, 3, 640, 640) Results saved to runs/detect/yolov9_c_c_640_detect
使用している GPGPU の名称 NVIDIA GeForce GTX 1650 がコンソール出力に含まれていました。
5. 入力画像と物体検出結果の画像
下記のコマンドで物体検出結果の画像をディレクトリ runs/detect/yolov9_c_c_640_detect/ から /detections/outputs/ にコピーし、Windows 11から読み取れるようにしました。
root@d8077311720e:/yolov9# cp runs/detect/yolov9_c_c_640_detect/Birds-Tobagawa-2023-02-19.JPG /detections/outputs/
物体検出結果は下の画像のようになりました。鳥の種類までは推定していないようです。入力画像は私が2023年2月に撮影した画像で、こちらのページから抜粋した画像になります。
下の画像は別の例です。こちらのページから抜粋した源太峰に登ったときに撮影した画像になります。