前回、YOLOをお試しで動かして画像認識したが、CPUでの動作だった。
今回、Windows環境でGPUを使えるようにセットアップする。
参考サイト
ここを参考にする。
というより、ほとんど内容同じ。
PyTorchインストールからちょっとだけ違う。
物体認識に使う画像
前回はEZVIZ CP1の画像を入力にしていたが、YOLOv5のdetect.pyを見た感じ、画像ファイルを入力にすると、最後に処理時間の平均を出してくれるようだった。
このほうがGPUを使った効果の評価がしやすいので、適当なデータを選ぶこととする。
前に使ったMOT16のデータがちょうど良さそうなので、これを使う。
セットアップ手順
ここからしばらくはセットアップした経過をだらだらと記録しているだけなので、結果だけ見たい人はこちらへ。
NVIDIAドライバーインストール
NVIDIAのサイトに移動。
使っているPCの仕様に応じて、「製品シリーズ」、「製品ファミリー」を選択。
「ダウンロードタイプ」の選択肢もある。 見ると、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
参考サイトのリンクに従って。
Visual StudioのCommunityを入れる。
Visual Studio Tools のダウンロード - Windows、Mac、Linux 用の無料インストール
ダウンロードしたインストーラを起動して、インストールするコンポーネントの選択まで来たところで、まず「C++によるデスクトップ開発」だけチェックが入っているようにする。他に「.NETデスクトップ開発」などにチェックが入っていたが、今は不要なのでチェックを外しておく。
あと、参考サイトに従い、右側の「インストールの詳細」の中の、「v143ビルドツール用C++/CLIサポート」にチェックを入れておく。
最後に、「インストール」をクリックする。
(画面右側、スクショで右側切れてしまった...)
インストール完了して、再起動をお勧めされたが、一旦なしで。
インストールできた。
閉じる。
PyTorch確認
今回確認したところでは、今の安定版PyTorchは、CUDA 11.8に対応しているよう。
というわけで、この後の手順では、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動いているよう。
認識結果の画像。
たくさんいる人も認識できているし、かばんやリュックも認識できている。
なかなかいい感じ。
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倍速く処理できることが確認できた。
今回は、使用した学習済みモデル、推論のときの解像度、など、デフォルトのままにしているので、今後色々変えながら試していきたい。