金子邦彦研究室人工知能Windows でのインストールと動作確認(人工知能関係)YOLOv7 のインストールと動作確認(物体検出)(Python,PyTorch を使用)(Windows 上)

YOLOv7 のインストールと動作確認(物体検出)(Python,PyTorch を使用)(Windows 上)

Windows で YOLOv7 のインストールと動作確認を行う.

目次

  1. 前準備
  2. YOLOv7 のインストール(Windows 上)
  3. 物体検出,姿勢推定(YOLOv7 を使用)

前準備

Git のインストール(Windows 上)

Windows での Git のインストール: 別ページ »で説明

関連する外部ページ

Git の公式ページ: https://git-scm.com/

Python のインストール(Windows 上)

Windows での Python 3.10,関連パッケージ,Python 開発環境のインストール: 別ページ »で説明

サイト内の関連ページ

Python のまとめ: 別ページ »にまとめ

関連する外部ページ

Python の公式ページ: https://www.python.org/

Build Tools for Visual Studio 2022,NVIDIA ドライバ,NVIDIA CUDA ツールキット,NVIDIA cuDNN のインストール(Windows 上)

Windows での Build Tools for Visual Studio 2022NVIDIA ドライバNVIDIA CUDA ツールキット 11.8,NVIDIA cuDNN v8.6 のインストールと動作確認: 別ページ »で説明

関連する外部ページ

PyTorch のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページ »で説明

  2. PyTorch のページを確認

    PyTorch のページ: https://pytorch.org/index.html

  3. 次のようなコマンドを実行(実行するコマンドは,PyTorch のページの表示されるコマンドを使う).

    次のコマンドは, PyTorch 2.0 (NVIDIA CUDA 11.8 用) をインストールする. 事前に NVIDIA CUDA のバージョンを確認しておくこと(ここでは,NVIDIA CUDA ツールキット 11.8 が前もってインストール済みであるとする).

    PyTorch で,GPU が動作している場合には,「torch.cuda.is_available()」により,True が表示される.

    python -m pip install -U pip
    python -m pip install -U torch torchvision torchaudio numpy --index-url https://download.pytorch.org/whl/cu118
    python -c "import torch; print(torch.__version__, torch.cuda.is_available())" 
    

    [image]

Windows での COCO 2017 データセットのダウンロードと展開

Windows での COCO 2017 のダウンロードと展開の手順は次の通り.

  1. 7-Zip 22.01 のインストール

    Windows では, コマンドプロンプトを管理者として開き, 次のコマンドを実行することにより, 7-Zip 22.01 のインストールを行うことができる.

    mkdir %HOMEPATH%\7zip
    cd %HOMEPATH%\7zip
    curl -O https://www.7-zip.org/a/7z2201-x64.exe
    .\7z2201-x64.exe
    call powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\7-Zip\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    
  2. COCO データセットの公式ページから, 2017 Train images, 2017 Val images, 2017 Train/Val annotations をダウンロード

    コマンドプロンプトを管理者として開き ダウンロードと展開のため,次のコマンドを実行

    cd %HOMEPATH%
    mkdir coco2017
    mkdir coco2017\coco
    cd %HOMEPATH%\coco2017
    # labels
    curl -O -L https://github.com/ultralytics/yolov5/releases/download/v1.0/coco2017labels-segments.zip
    # 19G, 118k images
    curl -O http://images.cocodataset.org/zips/train2017.zip
    # 1G, 5k images
    curl -O http://images.cocodataset.org/zips/test2017.zip
    # 7G, 41k images (optional)
    curl -O http://images.cocodataset.org/zips/val2017.zip
    #
    curl -O http://images.cocodataset.org/annotations/stuff_annotations_trainval2017.zip
    #
    cd %HOMEPATH%\coco2017
    "c:\Program Files\7-Zip\7z.exe" x coco2017labels-segments.zip
    cd %HOMEPATH%\coco2017\coco
    "c:\Program Files\7-Zip\7z.exe" x ..\train2017.zip
    "c:\Program Files\7-Zip\7z.exe" x ..\test2017.zip
    "c:\Program Files\7-Zip\7z.exe" x ..\val2017.zip
    "c:\Program Files\7-Zip\7z.exe" x ..\stuff_annotations_trainval2017.zip
    
  3. ファイルの配置は次のようになる.
     └─%HOMEPATH%\coco2017\coco
         |
         ├── annotations
            ├── instances_val2017.json
            ├── stuff_train2017.json (the original json files)
            └── stuff_val2017.json (the original json files)
    
         ├─labels/
            ├─train2017/
            └─val2017/
         ├─test2017/
         ├─train2017/
         ├─val2017/
         ├─test-dev2017.txt
         ├─train2017.txt
         └─val2017.txt
    

関連する外部ページ

COCO データセットの公式ページ: https://cocodataset.org/#home

YOLOv7 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者として実行

    コマンドプロンプトを管理者として実行: 別ページ »で説明

  2. ダウンロードとインストール

    cd %HOMEPATH%
    rmdir /s /q yolov7
    git clone --recursive https://github.com/WongKinYiu/yolov7
    cd yolov7
    python -m pip install -r requirements.txt
    python -m pip install -U pycocotools
    
  3. ジャンクションの作成

    cd %HOMEPATH%\yolov7
    mklink /J coco ..\coco2017\coco
    
  4. 学習済みモデルのダウンロード

    参考ページ: https://github.com/WongKinYiu/yolov7

    cd %HOMEPATH%\yolov7
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7x.pt
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6.pt
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6.pt
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-d6.pt
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-e6e.pt
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-w6-pose.pt
    curl -O -L https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7-mask.pt
    
  5. 動作確認

    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
    

物体検出,姿勢推定(YOLOv7 を使用)

姿勢推定のプログラム例

https://github.com/WongKinYiu/yolov7/blob/main/tools/keypoint.ipynb に記載のプログラムを書き換えて使用.

import matplotlib.pyplot as plt
import torch
import cv2
from torchvision import transforms
import numpy as np
from utils.datasets import letterbox
from utils.general import non_max_suppression_kpt
from utils.plots import output_to_keypoint, plot_skeleton_kpts
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
weigths = torch.load('yolov7-w6-pose.pt', map_location=device)
model = weigths['model']
_ = model.float().eval()

if torch.cuda.is_available():
    model.half().to(device)

v = cv2.VideoCapture(0)
while(v.isOpened()):
    r, f = v.read()
    if ( r == False ):
        break
    image = letterbox(f, 960, stride=64, auto=True)[0]
    image_ = image.copy()
    image = transforms.ToTensor()(image)
    image = torch.tensor(np.array([image.numpy()]))

    if torch.cuda.is_available():
        image = image.half().to(device) 
  
    output, _ = model(image)
    output = non_max_suppression_kpt(output, 0.25, 0.65, nc=model.yaml['nc'], nkpt=model.yaml['nkpt'], kpt_label=True)
    with torch.no_grad():
        output = output_to_keypoint(output)

    nimg = image[0].permute(1, 2, 0) * 255
    nimg = nimg.cpu().numpy().astype(np.uint8)
    nimg = cv2.cvtColor(nimg, cv2.COLOR_RGB2BGR)
    for idx in range(output.shape[0]):
        plot_skeleton_kpts(nimg, output[idx, 7:].T, 3)

    cv2.imshow("", nimg)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

v.release()
cv2.destroyAllWindows()