Windows 11のWSL2でDockerを使用してYOLOv9を実行 (GPGPUを使用)

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月に撮影した画像で、こちらのページから抜粋した画像になります。

下の画像は別の例です。こちらのページから抜粋した源太峰に登ったときに撮影した画像になります。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA