物体検出,物体検出のための学習の実行(YOLOv5,PyTorch,Python を使用)(Windows 上)

Windowsで,YOLOv5をインストールし,物体検出,セグメンテーション,画像分類の実行が可能である.インストールは公式のGitHubページの説明に従って行い,コマンドプロンプトで操作する.YOLOv5 に付属の物体検出の学習済みモデルは,COCOデータセットで学習され,yolov5n.ptなどから選ぶことができる.学習のために必要となる画像データとアノテーションは,YOLO形式のオープンデータを用いることができる.そのとき,クラス番号を 80 やそれより大きい値に振り直す.そのためのPythonプログラムはこのページで提供している.学習は,オプションを指定して実行する.

目次

  1. 前準備
  2. YOLOv5 のインストール(Windows 上)
  3. 物体検出を実行する Python プログラム(YOLOv5 を使用)(Windows 上)
  4. YOLO形式のオープンデータを用いて,新しいクラスの物体検出ができるように学習(書きかけ)

前準備

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)または Visual Studio 2022 のインストール(Windows 上)

CUDAツールキットは、GPU上でコードをコンパイルするためにC++コンパイラを必要とします。そのため、事前にMicrosoft C++ Build Tools または Visual Studio (C++開発ワークロードを含む) をインストールしておく必要があります。

インストールの判断Build Tools for Visual Studio は,C++コンパイラなどを含む開発ツールセットです. Visual Studio は統合開発環境であり,いくつかのエディションがあり,Build Tools for Visual Studioの機能を含むか連携して使用します.インストールは以下の基準で判断してください:

不明な点がある場合は,Visual Studio 全体をインストール する方が、後で機能を追加する手間が省ける場合があります.

Build Tools for Visual Studio 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動します(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)。

    以下のwingetコマンドを実行します。wingetはWindows標準のパッケージマネージャーです。

    --scope machine オプションはシステム全体にインストールすることを意味します。

    次のコマンドは,Build Tools for Visual Studio 2022と、多くのプログラムで必要とされるVC++ 2015以降の再頒布可能パッケージをインストールします.

    winget install --scope machine Microsoft.VisualStudio.2022.BuildTools
    winget install --scope machine Microsoft.VCRedist.2015+.x64
    
  2. Build Tools for Visual Studio 2022 で C++ によるデスクトップ開発関連コンポーネントのインストール

    CUDA開発には、標準のC++開発ツールに加えて、特定のコンポーネントが必要になる場合があります。

    1. Visual Studio Installer を起動します。

      起動方法: スタートメニューから「Visual Studio Installer」を探して実行します.

    2. Visual Studio Build Tools 2022 の項目で「変更」ボタンをクリックします.
    3. 「ワークロード」タブで「C++ によるデスクトップ開発」をクリックして選択します。画面右側の「インストールの詳細」で、必要に応じて「v143 ビルドツール用 C++/CLI サポート(最新)」、「ATL」、「MFC」などをチェックします(これらは一般的なC++開発や特定のプロジェクトタイプで必要になる場合があります)。その後、「変更」をクリックしてインストールまたは変更を適用します.

Visual Studio Community 2022 のインストール(Windows 上)

  1. Windows で,コマンドプロンプト管理者権限で起動します。
  2. インストールコマンドの実行

    以下のwingetコマンドを実行します。--override "--add ..." 部分で、インストールするワークロードやコンポーネントを指定しています。

    winget install Microsoft.VisualStudio.2022.Community --scope machine --override "--add Microsoft.VisualStudio.Workload.NativeDesktop Microsoft.VisualStudio.ComponentGroup.NativeDesktop.Core Microsoft.VisualStudio.Component.VC.CLI.Support Microsoft.VisualStudio.Component.CoreEditor Microsoft.VisualStudio.Component.NuGet Microsoft.VisualStudio.Component.Roslyn.Compiler Microsoft.VisualStudio.Component.TextTemplating Microsoft.VisualStudio.Component.Windows.SDK.Latest Microsoft.VisualStudio.Component.VC.Tools.x86.x64 Microsoft.VisualStudio.Component.VC.ATL Microsoft.VisualStudio.Component.VC.ATLMFC"
    winget install Microsoft.VisualStudio.2022.Community --scope machine Microsoft.VCRedist.2015+.x64
    

    インストールされる主要なコンポーネントの説明:

    • NativeDesktop (C++によるデスクトップ開発): CUDA開発に必要なC++コンパイラ(VC.Tools.x86.x64)やWindows SDK (Windows.SDK.Latest)など、基本的な開発ツール一式を含みます。
    • CoreEditor: Visual Studioの基本的なコードエディタ機能を提供します。
    • VC.CLI.Support: C++/CLIを用いた開発サポート(通常、純粋なCUDA C++開発では不要な場合もあります)。
    • NuGet: .NETライブラリ管理用(C++プロジェクトでも利用されることがあります)。
    • VC.ATL / VC.ATLMFC: 特定のWindowsアプリケーション開発フレームワーク(通常、CUDA開発自体には直接必要ありません)。

    システム要件と注意事項:

    • 管理者権限でのインストールが必須です。
    • 必要ディスク容量:10GB以上(選択するコンポーネントにより変動)。
    • 推奨メモリ:8GB以上のRAM。
    • インストール過程でシステムの再起動が要求される可能性があります。
    • 安定したインターネット接続環境が必要です。

    後から追加のコンポーネントが必要になった場合は,Visual Studio Installerを使用して個別にインストールすることが可能です.

  3. インストール完了の確認

    インストールが成功したか確認するには、管理者権限のコマンドプロンプトで以下のコマンドを実行します。

    winget list Microsoft.VisualStudio.2022.Community
    

    リストに表示されればインストールされています。

    トラブルシューティング:

    インストール失敗時は,以下のログファイルを確認すると原因究明の手がかりになります:

    %TEMP%\dd_setup_.log
    %TEMP%\dd_bootstrapper_.log

    ( は実行日時に対応する文字列)

  4. (オプション) Visual Studio Installer での確認と変更

    wingetでのインストール後も、Visual Studio Installerを使ってインストール内容を確認・変更できます。

    1. Visual Studio Installer を起動します。
    2. Visual Studio Community 2022 の項目で「変更」をクリックします。
    3. 「ワークロード」タブで「C++ によるデスクトップ開発」がチェックされていることを確認します。必要であれば、「個別のコンポーネント」タブで特定のツール(例: 特定バージョンのMSVCコンパイラ、CMakeツールなど)を追加・削除できます。「インストールの詳細」で「v143 ビルドツール用 C++/CLI サポート(最新)」などが選択されているかも確認できます。変更後、「変更」または「インストール」をクリックします。

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

Pythonは,プログラミング言語の1つ. Gitは,分散型のバージョン管理システム.

手順

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)

    次のコマンドを実行

    次のコマンドは,Python ランチャーとPython 3.10とGitをインストールし,Gitパスを通すものである.

    次のコマンドでインストールされるGitは 「git for Windows」と呼ばれるものであり, Git,MinGW などから構成されている.

    winget install --scope machine Python.Launcher
    winget install --scope machine Python.Python.3.10
    winget install --scope machine Git.Git
    powershell -command "$oldpath = [System.Environment]::GetEnvironmentVariable(\"Path\", \"Machine\"); $oldpath += \";c:\Program Files\Git\cmd\"; [System.Environment]::SetEnvironmentVariable(\"Path\", $oldpath, \"Machine\")"
    

関連する外部ページ

サイト内の関連ページ

関連項目Python, Git バージョン管理システム, Git の利用

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

サイト内の関連ページNVIDIA グラフィックスボードを搭載しているパソコンの場合には, NVIDIA ドライバNVIDIA CUDA ツールキットNVIDIA cuDNN のインストールを行う.

関連する外部ページ

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

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. PyTorch のページを確認

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

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

    次のコマンドを実行することにより, PyTorch 2.3 (NVIDIA CUDA 11.8 用)がインストールされる. 但し,Anaconda3を使いたい場合には別手順になる.

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

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

    python -m pip install -U --ignore-installed pip
    python -m pip uninstall -y torch torchvision torchaudio torchtext xformers
    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())"
    

    Anaconda3を使いたい場合には, Anaconda プロンプト (Anaconda Prompt)管理者として実行し, 次のコマンドを実行する. (PyTorch と NVIDIA CUDA との連携がうまくいかない可能性があるため,Anaconda3を使わないことも検討して欲しい).

    conda install -y pytorch torchvision torchaudio pytorch-cuda=11.8 cudnn -c pytorch -c nvidia
    py -c "import torch; print(torch.__version__, torch.cuda.is_available())"
    

    サイト内の関連ページ

    関連する外部ページ

YOLOv5 のインストールと実行手順(Windows環境)

YOLOv5 の公式リポジトリ https://github.com/ultralytics/yolov5 の手順に従ってインストールを実施する.

  1. Windows で,コマンドプロンプト管理者権限で起動する(例:Windowsキーを押し,「cmd」と入力し,「管理者として実行」を選択)
  2. 必要なパッケージのインストールとソースコードの取得
    python -m pip install -U pillow wandb clearml comet_ml
    cd /d c:%HOMEPATH%
    rmdir /s /q yolov5
    git clone https://github.com/ultralytics/yolov5
    cd yolov5
    pip install -r requirements.txt
    icacls . /grant Everyone:F /T
    
  3. Windows で,コマンドプロンプトを実行
  4. 物体検出の実行プロセス

    YOLOv5 の公式リポジトリ https://github.com/ultralytics/yolov5 の手順に従って進める.

    物体検出には,COCO データセットで学習済みの以下のモデルから選択が可能: yolov5n.pt, yolov5s.pt, yolov5m.pt, yolov5l.pt, yolov5x.pt.詳細は公式ドキュメント https://github.com/ultralytics/yolov5/tree/master/models を参照

    cd /d c:%HOMEPATH%
    cd yolov5
    python detect.py --weights yolov5s.pt --source=https://ultralytics.com/images/bus.jpg --exist-ok
    runs\detect\exp\bus.jpg
    

    続いて「--visualize」オプションを追加して実行

    cd /d c:%HOMEPATH%
    cd yolov5
    python detect.py --weights yolov5s.pt --source=https://ultralytics.com/images/bus.jpg --visualize  --exist-ok
    runs\detect\exp\bus.jpg
    

    --visualize」オプションにより,以下の可視化結果が生成される.

物体検出プログラムの実装(YOLOv5使用)(Windows環境)

以下のPythonプログラムで物体検出を実行できる.

  1. Python環境の起動

    Python実行環境の選択

    開発環境オプション: Jupyter Qt ConsoleJupyter NotebookJupyter LabNteractSpyderPyCharmPyScripter

    Python関連情報: 別ページ »

    python
    
  2. 物体検出の実装例

    yolov5s はCOCOデータセットで事前学習済みのモデル.

    詳細は公式ドキュメント https://github.com/ultralytics/yolov5/blob/master/data/coco.yaml を参照

    import torch
    model = torch.hub.load("ultralytics/yolov5", "yolov5s")
    img = "https://ultralytics.com/images/zidane.jpg"  # or file, Path, PIL, OpenCV, numpy, list
    results = model(img)
    results.pandas()
    results.show()  # or .print(), .save(), .crop(), .pandas(), etc.
    exit()
    
  3. より高性能な yolov5m モデルの使用例 物体検出には,COCOデータセットで学習済みの以下のモデルから選択可能: yolov5n.pt, yolov5s.pt, yolov5m.pt, yolov5l.pt, yolov5x.pt.詳細は公式ドキュメント https://github.com/ultralytics/yolov5/blob/master/data/coco.yaml を参照
    import torch
    model = torch.hub.load("ultralytics/yolov5", "yolov5m")
    img = "https://ultralytics.com/images/zidane.jpg"  # or file, Path, PIL, OpenCV, numpy, list
    results = model(img)
    results.pandas()
    results.show()  # or .print(), .save(), .crop(), .pandas(), etc.
    exit()
    

YOLO形式オープンデータを用いた新規クラスの物体検出学習(開発中)

画像データと物体検出アノテーション(クラス名とバウンディングボックス)を活用し, Traffic Signs Datasetを使用した学習を実施する.

Traffic Signs Datasetのダウンロードと前処理後,以下の手順で学習を進める:

  1. Traffic Signs Dataset in YOLO format へアクセス

    https://www.kaggle.com/datasets/valentynsichkar/traffic-signs-dataset-in-yolo-format?resource=downloa

  2. Download」ボタンをクリック
  3. Kaggleアカウント登録またはGoogleアカウントでのサインインが必要な場合は指示に従い,再度「Download」をクリック
  4. archive.zipのダウンロード完了
  5. C:\archive ディレクトリを作成し,archive.zipを展開

    下図のように配置:

  6. Windowsコマンドプロンプトを起動
  7. 以下のコマンドでディレクトリを移動しPythonを起動
    cd C:\archive
    python
    
  8. クラス番号更新プログラムの実行

    このプログラムは900個のアノテーションファイル(00000.txt~00899.txt)を処理し, 各ファイルの行頭のクラス番号(0-3)に対して,80未満の場合は80を加算して更新する. ファイルが存在しない場合はエラーを出力.

    def update_class_number(filename):
        with open(filename, "r", encoding="utf-8") as file:
            lines = file.readlines()
        updated_lines = []
        for line in lines:
            parts = line.strip().split()
            if len(parts) >= 5:
                class_number = int(parts[0])
                # もともとのクラス番号 (class_number) は 0, 1, 2, 3 である。80を加えて,元のファイルのクラス番号を更新する
                if class_number < 80:
                    updated_class_number = class_number + 80
                    x1, y1, x2, y2 = map(float, parts[1:])
                    updated_line = f"{updated_class_number} {x1} {y1} {x2} {y2}\n"
                    updated_lines.append(updated_line)
                else:
                    updated_lines.append(line)
            else:
                updated_lines.append(line)
        with open(filename, "w", encoding="utf-8") as file:
            file.writelines(updated_lines)
    
    file_not_found = False
    for i in range(0, 900):
        # 00000.txt から 00899.txt まで
        filename = f"ts/{i:05}.txt"
        try:
            update_class_number(filename)
            # 確認表示
            with open(filename, "r", encoding="utf-8") as file:
                first_line = file.readline().strip()
                print(f"filename: {filename} , {first_line}")
        except FileNotFoundError:
            print(f"{filename} が見つかりませんでした")
            file_not_found = True
    
    exit()
    
  9. 処理完了の確認

    このプログラムにより,クラス番号を80-83に変更.

    クラス番号とクラス名の対応は c:\archive\classes.names に以下の通り定義:

    80, prohibitory
    81, danger
    82, mandatory
    83, other
    
  10. 画像サイズの標準化

    以下のコマンドを実行:

    cd c:\archive\ts\ts
    python
    

    次のPythonプログラムを実行

    from PIL import Image
    import os
    
    # 新しい幅
    new_width = 640
    
    # カレントディレクトリ内のすべてのファイル
    for filename in os.listdir('.'):
        # .jpgファイルのみを処理
        if filename.endswith('.jpg'):
            print(f"{filename} を変換")
            with Image.open(filename) as img:
                # アスペクト比を保持した高さを計算
                aspect_ratio = new_width / img.width
                new_height = int(img.height * aspect_ratio)
                # リサイズ
                resized_img = img.resize((new_width, new_height))
                # 元のファイルを上書き
                resized_img.save(filename)
    
    exit()
    
  11. validation 用のディレクトリを用意する.これらのディレクトリにいくつかのファイルを移動する.
    mkdir c:\archive\ts\ts\images
    mkdir c:\archive\ts\ts\images\train
    mkdir c:\archive\ts\ts\images\val
    mkdir c:\archive\ts\ts\labels
    mkdir c:\archive\ts\ts\labels\train
    mkdir c:\archive\ts\ts\labels\val
    cd c:\archive\ts\ts
    move *1.txt labels\val
    move *1.jpg images\val
    move *.txt labels\train
    move *.jpg images\train
    icacls c:\archive\ts /grant Everyone:F /T
    
  12. ファイル ts.yaml を作成する

    エディタを起動

    cd /d c:%HOMEPATH%
    cd yolov5
    notepad ts.yaml
    

    エディタで次のように作成し保存する.

    names は 84 個の文字列のリストである.最初の 80 個は COCO データセットのクラス名.残りの 4 個は,いまから学習を行うデータセットのクラス名になる.

    path: c:/archive/ts/ts
    train: images/train
    val: images/val
    nc: 84
    names:
      0: person
      1: bicycle
      2: car
      3: motorcycle
      4: airplane
      5: bus
      6: train
      7: truck
      8: boat
      9: traffic light
      10: fire hydrant
      11: stop sign
      12: parking meter
      13: bench
      14: bird
      15: cat
      16: dog
      17: horse
      18: sheep
      19: cow
      20: elephant
      21: bear
      22: zebra
      23: giraffe
      24: backpack
      25: umbrella
      26: handbag
      27: tie
      28: suitcase
      29: frisbee
      30: skis
      31: snowboard
      32: sports ball
      33: kite
      34: baseball bat
      35: baseball glove
      36: skateboard
      37: surfboard
      38: tennis racket
      39: bottle
      40: wine glass
      41: cup
      42: fork
      43: knife
      44: spoon
      45: bowl
      46: banana
      47: apple
      48: sandwich
      49: orange
      50: broccoli
      51: carrot
      52: hot dog
      53: pizza
      54: donut
      55: cake
      56: chair
      57: couch
      58: potted plant
      59: bed
      60: dining table
      61: toilet
      62: tv
      63: laptop
      64: mouse
      65: remote
      66: keyboard
      67: cell phone
      68: microwave
      69: oven
      70: toaster
      71: sink
      72: refrigerator
      73: book
      74: clock
      75: vase
      76: scissors
      77: teddy bear
      78: hair drier
      79: toothbrush
      80: prohibitory
      81: danger
      82: mandatory
      83: other
    
  13. 学習の実行

    実行にかかる時間の目安は10分から数十分である.

    cd /d c:%HOMEPATH%
    python yolov5/train.py --data yolov5/ts.yaml --weights yolov5/yolov5s.pt --img 640 --epochs 30
    

    GPU を使わないときは,次のように「--device cpu」を付ける.このときは,実行に10時間ほどかかる.

    cd /d c:%HOMEPATH%
    cd yolov5
    python train.py --data ts.yaml --weights yolov5s.pt --img 640 --epochs 30 --device cpu
    

    学習が実質開始する前にエラーメッセージが出た場合,YOLOv5 のインストールを再度行うことで改善する可能性がある.

  14. 学習の終了の確認

    このとき,結果が保存されているディレクトリを確認する. 最後のところに「Results saved to runs\detect\...」のように表示されるので確認

  15. dir コマンドでファイルを確認.

    「runs\train\exp2」のところには,「結果が保存されているディレクトリ」を指定すること.

    dir runs\train\exp2
    dir runs\train\exp2\weights
    
  16. 学習したデータで物体検出してみる

    「runs\train\exp2」のところには,「結果が保存されているディレクトリ」を指定すること.

    python detect.py --weights ./runs/train/exp2/weights/best.pt --source=c:/archive/ts/ts/images/val/00001.jpg
    

    このとき,結果が保存されているディレクトリを確認する. 最後のところに「Results saved to runs\detect\...」のように表示されるので確認

    結果が保存されているディレクトリに画像があるので表示してみる.