勉強しないとな~blog

ちゃんと勉強せねば…な電気設計エンジニアです。

GPU使ってYOLO動かす

前回、YOLOをお試しで動かして画像認識したが、CPUでの動作だった。
今回、Windows環境でGPUを使えるようにセットアップする。

nokixa.hatenablog.com

参考サイト

ここを参考にする。
というより、ほとんど内容同じ。
PyTorchインストールからちょっとだけ違う。

happy-shibusawake.com

物体認識に使う画像

前回はEZVIZ CP1の画像を入力にしていたが、YOLOv5のdetect.pyを見た感じ、画像ファイルを入力にすると、最後に処理時間の平均を出してくれるようだった。
このほうがGPUを使った効果の評価がしやすいので、適当なデータを選ぶこととする。

前に使ったMOT16のデータがちょうど良さそうなので、これを使う。

nokixa.hatenablog.com

MOT16 - https://motchallenge.net/data/MOT16/

セットアップ手順

ここからしばらくはセットアップした経過をだらだらと記録しているだけなので、結果だけ見たい人はこちらへ。

いざGPU使ったYOLO実施

NVIDIAドライバーインストール

NVIDIAのサイトに移動。
使っているPCの仕様に応じて、「製品シリーズ」、「製品ファミリー」を選択。

公式ドライバー | NVIDIA

「ダウンロードタイプ」の選択肢もある。 見ると、Game ReadyとStudioの2種類がある。

Game Readyは新しいバージョンがすぐにリリースされるもの、Studioはしっかりテストされたバージョンがリリースされるもの、という感じのよう。

今回はStudioで。

【PC自作の新常識】Game ReadyドライバとStudioドライバはどこが違う?GPUドライバが多機能になっているみたいだけど? - AKIBA PC Hotline!

こんな感じのバージョン。

ダウンロードして、exeを実行。

途中のスクリーンショット

GeForce Experienceを入れるかどうかの質問が来る。
ユーザーの環境をアンケートしたい、ということか?

そんなに心配することはないと思うので、同意しておく。

結構インストールに時間かかる。

完了。

GeForce Experienceが起動して、ログインを求められているが、面倒なので一旦パスで。

Build Tools for Visual Studio

C++コンパイラを入れておく必要があるよう。

参考サイトのリンクに従って。

Visual StudioのCommunityを入れる。

Visual Studio Tools のダウンロード - Windows、Mac、Linux 用の無料インストール

ダウンロードしたインストーラを起動して、インストールするコンポーネントの選択まで来たところで、まず「C++によるデスクトップ開発」だけチェックが入っているようにする。他に「.NETデスクトップ開発」などにチェックが入っていたが、今は不要なのでチェックを外しておく。

あと、参考サイトに従い、右側の「インストールの詳細」の中の、「v143ビルドツール用C++/CLIサポート」にチェックを入れておく。

最後に、「インストール」をクリックする。
(画面右側、スクショで右側切れてしまった...)

インストール完了して、再起動をお勧めされたが、一旦なしで。

インストールできた。
閉じる。

PyTorch確認

今回確認したところでは、今の安定版PyTorchは、CUDA 11.8に対応しているよう。

Start Locally | PyTorch

というわけで、この後の手順では、CUDA Toolkit 11.8をインストールしていく。

CUDA Toolkitインストール

11.8のバージョンで。
最新のCUDA Toolkitバージョンではないので、公式サイトのアーカイブから取ってくる。

localのインストーラを選んだら、3.0GBとかなり大きかった。

CUDA Toolkit 11.8 Downloads | NVIDIA Developer

ダウンロードしたインストーラを実行。

古いバージョンを使っていることについての注意が出る。
コンピュータのドッキング(?)をしたときに新しいバージョンがインストールされてしまうかもと。

インストール終わり。

システム環境変数を見ると、PathにCUDA\v11.8\binとCUDA\v11.8\libnvvpが含まれていたのでOK。

コマンドプロンプトで、nvccへのパスが通っていることも確認できた。

C:\Users\a>nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Wed_Sep_21_10:41:10_Pacific_Daylight_Time_2022
Cuda compilation tools, release 11.8, V11.8.89
Build cuda_11.8.r11.8/compiler.31833905_0

C:\Users\a>

cuDNNインストール

NVIDIAサイトに行ったところ、まずアカウント登録が必要のよう。

cuDNN Download | NVIDIA Developer

メールアドレスとパスワードを設定して登録。

メールでの認証ののち、少し設定があって登録完了。

まだ色々入力項目あった。
多分入力しておいたほうがいいんだろう。

所属するOrganizationの項目もあったが、個人だったらどう入力したらいいのか?
今回は実際に自分が勤めている会社情報を入れといた。

そしたらcuDNNのダウンロード画面になった。
"cuDNN v8.9.4 (August 8th, 2023), for CUDA 11.x" をダウンロードする。

プラットフォームごとのダウンロードデータが色々ある。
今回はWindows用。

で、こんなものをダウンロードした。

これを適当なところに解凍する。

この中のinclude、lib、binの3フォルダを、CUDAインストール先にコピーする。

あとは環境変数の追加。
CUDNN_PATHを、システム環境変数に新規追加する。

既存conda環境のPyTorchでGPU使えるようにする

ここから参考サイト通りでなくなる。

前回作ったYOLOv5環境に既にPyTorchが入っているが、 これをCUDAが使えるPyTorchに置き換える感じか。

さっきPyTorch確認で見たPyTorch公式サイトで、PyTorchインストールのコマンドが表示される。

YOLOv5環境をセットアップしたときは、pipを使ったので、同じくpipでインストールするようにしたい。
この公式サイトで、"Package"で"Pip"を選択しておくと、pipでのインストールコマンドが表示される。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118

--index-urlオプションで、https://download.pytorch.org/whl/cu118というのが指定されていて、pip標準のリポジトリではなく、PyTorchのリポジトリを指定するようになっている、ということか。

コマンド実行前に、現状のPyTorchを確認。

(base) PS C:\work\yolo_test> conda activate yolov5
(yolov5) PS C:\work\yolo_test> pip list | Where-Object {$_ -like "*torch*"}  
torch              2.0.1
torchvision        0.15.2
(yolov5) PS C:\work\yolo_test> 

PowerShellで文字列抽出する方法は下記参照。
これを機にPowerShellも少し使ってみるか。

PowerShell: 配列から条件に一致する要素を抽出(フィルタ)

本当に現状のPyTorchでGPU使えないのか?

試してみる。

YOLOv5サンプルのdetect.pyで、--deviceオプションで CUDAデバイスの指定が可能。

(yolov5) PS C:\work\yolo_test> cd yolov5  
(yolov5) PS C:\work\yolo_test\yolov5> python detect.py --help | Where-Object {$_ -like "*device*"}
                 [--max-det MAX_DET] [--device DEVICE] [--view-img]
  --device DEVICE       cuda device, i.e. 0 or 0,1,2,3 or cpu
(yolov5) PS C:\work\yolo_test\yolov5> 

では実施。
コマンドは以下の通り。
--sourceオプションで画像データ(ファイルそのもの、もしくは配置されているディレクトリ)を指定するが、パスを間違えないように。

python detect.py --device 0 --source ../MOT16/train/MOT16-09/img1

結果。

(yolov5) PS C:\work\yolo_test\yolov5> python detect.py --device 0 --source ../MOT16/train/MOT16-09/img1 
detect: weights=yolov5s.pt, source=MOT16/train/MOT16-09/img1, 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=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
Traceback (most recent call last):
  File "C:\work\yolo_test\yolov5\detect.py", line 262, in <module>
    main(opt)
  File "C:\work\yolo_test\yolov5\detect.py", line 257, in main
    run(**vars(opt))
  File "C:\Users\a\.conda\envs\yolov5\Lib\site-packages\torch\utils\_contextlib.py", line 115, in decorate_context       
    return func(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "C:\work\yolo_test\yolov5\detect.py", line 98, in run
    device = select_device(device)
             ^^^^^^^^^^^^^^^^^^^^^
  File "C:\work\yolo_test\yolov5\utils\torch_utils.py", line 118, in select_device
    assert torch.cuda.is_available() and torch.cuda.device_count() >= len(device.replace(',', '')), \
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: Invalid CUDA '--device 0' requested, use '--device cpu' or pass valid CUDA device(s)
(yolov5) PS C:\work\yolo_test\yolov5> 

エラーになった。

よく見たら、torchモジュールで確認できそうだった

torchモジュールのバージョンを見たり、torch.cuda.is_available()GPU利用可否を見たり。
参考サイトにも書いてあった。

(yolov5) PS C:\work\yolo_test\yolov5> python 
Python 3.11.4 | packaged by Anaconda, Inc. | (main, Jul  5 2023, 13:47:18) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'2.0.1+cpu'
>>> torch.cuda.is_available()
False

torchのバージョンを見ると、"+cpu"という形で、動作環境についても書かれている。

やっぱり何も考えずにインストールしたPyTorchではGPUは使えないよう。

PyTorchインストールコマンド実施

前記のコマンドを実施した。一瞬で終わった。
結果ログは下記の通り。

(yolov5) PS C:\work\yolo_test\yolov5> pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
Looking in indexes: https://download.pytorch.org/whl/cu118
Requirement already satisfied: torch in c:\users\a\.conda\envs\yolov5\lib\site-packages (2.0.1)
Requirement already satisfied: torchvision in c:\users\a\.conda\envs\yolov5\lib\site-packages (0.15.2)
Collecting torchaudio
  Downloading https://download.pytorch.org/whl/cu118/torchaudio-2.0.2%2Bcu118-cp311-cp311-win_amd64.whl (2.5 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5/2.5 MB 39.5 MB/s eta 0:00:00
Requirement already satisfied: filelock in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torch) (3.12.2)
Requirement already satisfied: typing-extensions in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torch) (4.7.1) 
Requirement already satisfied: sympy in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torch) (1.12)
Requirement already satisfied: networkx in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torch) (3.1)
Requirement already satisfied: jinja2 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torch) (3.1.2)
Requirement already satisfied: numpy in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torchvision) (1.25.2)      
Requirement already satisfied: requests in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torchvision) (2.31.0)   
Requirement already satisfied: pillow!=8.3.*,>=5.3.0 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from torchvision) (10.0.0)
Requirement already satisfied: MarkupSafe>=2.0 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from jinja2->torch) (2.1.3)
Requirement already satisfied: charset-normalizer<4,>=2 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from requests->torchvision) (3.2.0)
Requirement already satisfied: idna<4,>=2.5 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from requests->torchvision) (3.4)
Requirement already satisfied: urllib3<3,>=1.21.1 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from requests->torchvision) (2.0.4)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from requests->torchvision) (2023.7.22)
Requirement already satisfied: mpmath>=0.19 in c:\users\a\.conda\envs\yolov5\lib\site-packages (from sympy->torch) (1.3.0)
Installing collected packages: torchaudio
Successfully installed torchaudio-2.0.2+cu118
(yolov5) PS C:\work\yolo_test\yolov5> 

インストール成功したのか?
pipを確認してみると、

(yolov5) PS C:\work\yolo_test\yolov5> pip list | Where-Object {$_ -like "*torch*"}
torch              2.0.1
torchaudio         2.0.2+cu118
torchvision        0.15.2
(yolov5) PS C:\work\yolo_test\yolov5> 

torchとtorchvisionのバージョンは変わってない…?
torchaudioは入っていなかったので、新しくインストールされて、こちらはCUDA対応しているように見える。

改めてtorchモジュールの状況を見てみると、

(yolov5) PS C:\work\yolo_test\yolov5> python
Python 3.11.4 | packaged by Anaconda, Inc. | (main, Jul  5 2023, 13:47:18) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'2.0.1+cpu'
>>> torch.cuda.is_available()
False

ということで、やっぱり変わってない。

pip installで強制的に再インストールする設定?

--upgrade --force-reinstallオプションを付ければよさそう。

[Python]pip install時に既存のパッケージを上書き(reinstall)する

改めてPyTorchインストールのコマンドは、

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 --upgrade --force-reinstall

これを実行すると、今度は結構時間かかった。
色々とダウンロードしている。

なお、自宅の回線が速かったので、それなりの時間でインストールが完了したと思われる。
NUROにしてよかった!

結果のログ。
長いので閉じれるようにしておきます。

クリックで開く/閉じる

(yolov5) PS C:\work\yolo_test\yolov5> pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 --upgrade --force-reinstall
Looking in indexes: https://download.pytorch.org/whl/cu118
Collecting torch
  Downloading https://download.pytorch.org/whl/cu118/torch-2.0.1%2Bcu118-cp311-cp311-win_amd64.whl (2619.2 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.6/2.6 GB 1.8 MB/s eta 0:00:00
Collecting torchvision
  Downloading https://download.pytorch.org/whl/cu118/torchvision-0.15.2%2Bcu118-cp311-cp311-win_amd64.whl (4.9 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.9/4.9 MB 35.0 MB/s eta 0:00:00
Collecting torchaudio
  Using cached https://download.pytorch.org/whl/cu118/torchaudio-2.0.2%2Bcu118-cp311-cp311-win_amd64.whl (2.5 MB)
Collecting filelock (from torch)
  Downloading https://download.pytorch.org/whl/filelock-3.9.0-py3-none-any.whl (9.7 kB)
Collecting typing-extensions (from torch)
  Downloading https://download.pytorch.org/whl/typing_extensions-4.4.0-py3-none-any.whl (26 kB)
Collecting sympy (from torch)
  Downloading https://download.pytorch.org/whl/sympy-1.11.1-py3-none-any.whl (6.5 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.5/6.5 MB 59.3 MB/s eta 0:00:00
Collecting networkx (from torch)
  Downloading https://download.pytorch.org/whl/networkx-3.0-py3-none-any.whl (2.0 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 32.3 MB/s eta 0:00:00
Collecting jinja2 (from torch)
  Downloading https://download.pytorch.org/whl/Jinja2-3.1.2-py3-none-any.whl (133 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.1/133.1 kB ? eta 0:00:00
Collecting numpy (from torchvision)
  Downloading https://download.pytorch.org/whl/numpy-1.24.1-cp311-cp311-win_amd64.whl (14.8 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 14.8/14.8 MB 65.5 MB/s eta 0:00:00
Collecting requests (from torchvision)
  Downloading https://download.pytorch.org/whl/requests-2.28.1-py3-none-any.whl (62 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB ? eta 0:00:00
Collecting pillow!=8.3.*,>=5.3.0 (from torchvision)
  Downloading https://download.pytorch.org/whl/Pillow-9.3.0-cp311-cp311-win_amd64.whl (2.5 MB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.5/2.5 MB 39.6 MB/s eta 0:00:00
Collecting MarkupSafe>=2.0 (from jinja2->torch)
  Downloading https://download.pytorch.org/whl/MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl (16 kB)
Collecting charset-normalizer<3,>=2 (from requests->torchvision)
  Downloading https://download.pytorch.org/whl/charset_normalizer-2.1.1-py3-none-any.whl (39 kB)
Collecting idna<4,>=2.5 (from requests->torchvision)
  Downloading https://download.pytorch.org/whl/idna-3.4-py3-none-any.whl (61 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.5/61.5 kB ? eta 0:00:00
Collecting urllib3<1.27,>=1.21.1 (from requests->torchvision)
  Downloading https://download.pytorch.org/whl/urllib3-1.26.13-py2.py3-none-any.whl (140 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 140.6/140.6 kB ? eta 0:00:00
Collecting certifi>=2017.4.17 (from requests->torchvision)
  Downloading https://download.pytorch.org/whl/certifi-2022.12.7-py3-none-any.whl (155 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.3/155.3 kB 9.7 MB/s eta 0:00:00
Collecting mpmath>=0.19 (from sympy->torch)
  Downloading https://download.pytorch.org/whl/mpmath-1.2.1-py3-none-any.whl (532 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 532.6/532.6 kB 16.8 MB/s eta 0:00:00
Installing collected packages: mpmath, urllib3, typing-extensions, sympy, pillow, numpy, networkx, MarkupSafe, idna, filelock, charset-normalizer, certifi, requests, jinja2, torch, torchvision, torchaudio
  Attempting uninstall: mpmath
    Found existing installation: mpmath 1.3.0
    Uninstalling mpmath-1.3.0:
      Successfully uninstalled mpmath-1.3.0
  Attempting uninstall: urllib3
    Found existing installation: urllib3 2.0.4
    Uninstalling urllib3-2.0.4:
      Successfully uninstalled urllib3-2.0.4
  Attempting uninstall: typing-extensions
    Found existing installation: typing_extensions 4.7.1
    Uninstalling typing_extensions-4.7.1:
      Successfully uninstalled typing_extensions-4.7.1
  Attempting uninstall: sympy
    Found existing installation: sympy 1.12
    Uninstalling sympy-1.12:
      Successfully uninstalled sympy-1.12
  Attempting uninstall: pillow
    Found existing installation: Pillow 10.0.0
    Uninstalling Pillow-10.0.0:
      Successfully uninstalled Pillow-10.0.0
  Attempting uninstall: numpy
    Found existing installation: numpy 1.25.2
    Uninstalling numpy-1.25.2:
      Successfully uninstalled numpy-1.25.2
  Attempting uninstall: networkx
    Found existing installation: networkx 3.1
    Uninstalling networkx-3.1:
      Successfully uninstalled networkx-3.1
  Attempting uninstall: MarkupSafe
    Found existing installation: MarkupSafe 2.1.3
    Uninstalling MarkupSafe-2.1.3:
      Successfully uninstalled MarkupSafe-2.1.3
  Attempting uninstall: idna
    Found existing installation: idna 3.4
    Uninstalling idna-3.4:
      Successfully uninstalled idna-3.4
  Attempting uninstall: filelock
    Found existing installation: filelock 3.12.2
    Uninstalling filelock-3.12.2:
      Successfully uninstalled filelock-3.12.2
  Attempting uninstall: charset-normalizer
    Found existing installation: charset-normalizer 3.2.0
    Uninstalling charset-normalizer-3.2.0:
      Successfully uninstalled charset-normalizer-3.2.0
  Attempting uninstall: certifi
    Found existing installation: certifi 2023.7.22
    Uninstalling certifi-2023.7.22:
      Successfully uninstalled certifi-2023.7.22
  Attempting uninstall: requests
    Found existing installation: requests 2.31.0
    Uninstalling requests-2.31.0:
      Successfully uninstalled requests-2.31.0
  Attempting uninstall: jinja2
    Found existing installation: Jinja2 3.1.2
    Uninstalling Jinja2-3.1.2:
      Successfully uninstalled Jinja2-3.1.2
  Attempting uninstall: torch
    Found existing installation: torch 2.0.1
    Uninstalling torch-2.0.1:
      Successfully uninstalled torch-2.0.1
  Attempting uninstall: torchvision
    Found existing installation: torchvision 0.15.2
    Uninstalling torchvision-0.15.2:
      Successfully uninstalled torchvision-0.15.2
  Attempting uninstall: torchaudio
    Found existing installation: torchaudio 2.0.2+cu118
    Uninstalling torchaudio-2.0.2+cu118:
      Successfully uninstalled torchaudio-2.0.2+cu118
Successfully installed MarkupSafe-2.1.2 certifi-2022.12.7 charset-normalizer-2.1.1 filelock-3.9.0 idna-3.4 jinja2-3.1.2 mpmath-1.2.1 networkx-3.0 numpy-1.24.1 pillow-9.3.0 requests-2.28.1 sympy-1.11.1 torch-2.0.1+cu118 torchaudio-2.0.2+cu118 torchvision-0.15.2+cu118 typing-extensions-4.4.0 urllib3-1.26.13
(yolov5) PS C:\work\yolo_test\yolov5>

pipの状況は、

(yolov5) PS C:\work\yolo_test\yolov5> pip list | Where-Object {$_ -like "*torch*"}                                             
torch              2.0.1+cu118
torchaudio         2.0.2+cu118
torchvision        0.15.2+cu118
(yolov5) PS C:\work\yolo_test\yolov5> 

となり、今度はうまくいっているよう。
torchモジュールでの確認は、

(yolov5) PS C:\work\yolo_test\yolov5> python
Python 3.11.4 | packaged by Anaconda, Inc. | (main, Jul  5 2023, 13:47:18) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch      
>>> torch.__version__            
'2.0.1+cu118'
>>> torch.cuda.is_available()    
True
>>> torch.cuda.get_device_name()
'NVIDIA GeForce RTX 3060 Laptop GPU'

ということで、こちらもOK。

いざGPU使ったYOLO実施

GPU使う設定ができたようなので、YOLOでの物体認識をやってみる。
実行したコマンドは前記と同じだが、以下の通り。

python detect.py --device 0 --source ../MOT16/train/MOT16-09/img1

結果。

(yolov5) PS C:\work\yolo_test\yolov5> python detect.py --device 0 --source ../MOT16/train/MOT16-09/img1   
detect: weights=yolov5s.pt, source=../MOT16/train/MOT16-09/img1, 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=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
YOLOv5  v7.0-210-gdd10481 Python-3.11.4 torch-2.0.1+cu118 CUDA:0 (NVIDIA GeForce RTX 3060 Laptop GPU, 6144MiB)

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
image 1/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000001.jpg: 384x640 9 persons, 1 umbrella, 1 handbag, 1 chair, 70.5ms
image 2/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000002.jpg: 384x640 9 persons, 1 backpack, 1 umbrella, 1 handbag, 1 chair, 5.0ms
image 3/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000003.jpg: 384x640 7 persons, 1 backpack, 1 umbrella, 1 handbag, 1 chair, 6.0ms
image 4/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000004.jpg: 384x640 9 persons, 1 backpack, 1 umbrella, 1 handbag, 1 chair, 8.0ms
image 5/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000005.jpg: 384x640 9 persons, 1 handbag, 1 chair, 6.0ms
image 6/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000006.jpg: 384x640 9 persons, 1 handbag, 1 chair, 7.4ms
image 7/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000007.jpg: 384x640 7 persons, 1 handbag, 1 chair, 6.0ms
image 8/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000008.jpg: 384x640 7 persons, 1 backpack, 1 chair, 6.0ms
image 9/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000009.jpg: 384x640 7 persons, 1 backpack, 1 chair, 7.0ms
image 10/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000010.jpg: 384x640 9 persons, 1 chair, 5.9ms
image 11/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000011.jpg: 384x640 12 persons, 1 handbag, 1 chair, 5.0ms
image 12/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000012.jpg: 384x640 9 persons, 1 handbag, 1 chair, 14.4ms
image 13/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000013.jpg: 384x640 10 persons, 1 chair, 5.0ms

...

image 519/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000519.jpg: 384x640 11 persons, 1 umbrella, 35.6ms
image 520/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000520.jpg: 384x640 11 persons, 1 umbrella, 37.2ms
image 521/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000521.jpg: 384x640 10 persons, 1 umbrella, 1 skateboard, 35.1ms
image 522/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000522.jpg: 384x640 11 persons, 1 umbrella, 1 handbag, 1 skateboard, 36.4ms
image 523/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000523.jpg: 384x640 10 persons, 1 umbrella, 2 handbags, 35.2ms
image 524/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000524.jpg: 384x640 9 persons, 1 umbrella, 35.1ms
image 525/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000525.jpg: 384x640 9 persons, 1 umbrella, 1 handbag, 35.3ms
Speed: 1.7ms pre-process, 28.7ms inference, 1.7ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs\detect\exp15
(yolov5) PS C:\work\yolo_test\yolov5> 

推論時間は、平均で28.7msとなっている。

タスクマネージャで見ても、きちんとGPU動いているよう。

認識結果の画像。

MOT16 - https://motchallenge.net/data/MOT16/

たくさんいる人も認識できているし、かばんやリュックも認識できている。
なかなかいい感じ。

CPUの場合は?

バイスをCPUにしてYOLO実施。
--deviceオプションで、cpuを指定する。

python detect.py --device cpu --source ../MOT16/train/MOT16-09/img1
(yolov5) PS C:\work\yolo_test\yolov5> python detect.py --device cpu --source ../MOT16/train/MOT16-09/img1
detect: weights=yolov5s.pt, source=../MOT16/train/MOT16-09/img1, data=data\coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=cpu, 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=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
YOLOv5  v7.0-210-gdd10481 Python-3.11.4 torch-2.0.1+cu118 CPU

Fusing layers... 
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
image 1/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000001.jpg: 384x640 9 persons, 1 umbrella, 1 handbag, 1 chair, 122.6ms
image 2/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000002.jpg: 384x640 9 persons, 1 backpack, 1 umbrella, 1 handbag, 1 chair, 102.7ms
image 3/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000003.jpg: 384x640 7 persons, 1 backpack, 1 umbrella, 1 handbag, 1 chair, 124.2ms
image 4/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000004.jpg: 384x640 9 persons, 1 backpack, 1 umbrella, 1 handbag, 1 chair, 120.9ms
image 5/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000005.jpg: 384x640 9 persons, 1 handbag, 1 chair, 110.0ms
image 6/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000006.jpg: 384x640 9 persons, 1 handbag, 1 chair, 112.7ms
image 7/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000007.jpg: 384x640 7 persons, 1 handbag, 1 chair, 101.5ms
image 8/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000008.jpg: 384x640 7 persons, 1 backpack, 1 chair, 104.3ms
image 9/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000009.jpg: 384x640 7 persons, 1 backpack, 1 chair, 106.4ms
image 10/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000010.jpg: 384x640 9 persons, 1 chair, 104.7ms
image 11/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000011.jpg: 384x640 12 persons, 1 handbag, 1 chair, 104.6ms
image 12/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000012.jpg: 384x640 9 persons, 1 handbag, 1 chair, 103.7ms
image 13/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000013.jpg: 384x640 10 persons, 1 chair, 99.2ms

...

image 519/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000519.jpg: 384x640 11 persons, 1 umbrella, 93.2ms
image 520/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000520.jpg: 384x640 11 persons, 1 umbrella, 118.2ms
image 521/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000521.jpg: 384x640 10 persons, 1 umbrella, 1 skateboard, 106.6ms
image 522/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000522.jpg: 384x640 11 persons, 1 umbrella, 1 handbag, 1 skateboard, 113.6ms
image 523/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000523.jpg: 384x640 10 persons, 1 umbrella, 2 handbags, 98.2ms
image 524/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000524.jpg: 384x640 9 persons, 1 umbrella, 98.9ms
image 525/525 C:\work\yolo_test\MOT16\train\MOT16-09\img1\000525.jpg: 384x640 9 persons, 1 umbrella, 1 handbag, 93.5ms
Speed: 1.2ms pre-process, 114.4ms inference, 1.7ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs\detect\exp17
(yolov5) PS C:\work\yolo_test\yolov5> 

推論時間が、GPU使用時に28.7msだったのが114.4msと、約4倍の違いになっている。

今回ここまで

PyTorchでGPU使用する環境設定ができたのと、今回の条件ではGPUを使うとCPUより4倍速く処理できることが確認できた。

今回は、使用した学習済みモデル、推論のときの解像度、など、デフォルトのままにしているので、今後色々変えながら試していきたい。