トップページ情報工学を学ぶ人工知能の実行,Python プログラム (Windows 上)Detectron2 による物体検出,インスタンス・セグメンテーション(Detectron2,PyTorch, Python を使用)(Windows 上)

Detectron2 による物体検出,インスタンス・セグメンテーション(Detectron2,PyTorch, Python を使用)(Windows 上)

前準備

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

Build Tools for Visual Studio は,Windows で動くMicrosoft の C++ コンパイラーである.

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)のダウンロードページ

https://visualstudio.microsoft.com/ja/downloads/

インストール手順の詳細(別ページ)

Build Tools for Visual Studio 2022 (ビルドツール for Visual Studio 2022)のインストール: 別ページで説明している.

インストール手順の概要

  1. ダウンロード URL を開く

    https://visualstudio.microsoft.com/ja/downloads/

  2. このページの下の方の「Visual Studio 2022用のツール」を展開

    [image]
  3. Build Tools for Visual Studio 2022」の右の「ダウンロード」をクリック.

    [image]
  4. ダウンロードが始まる

    [image]
  5. ダウンロードした .exe ファイルを実行する
  6. 表示を確認し,「続行」をクリック

    [image]
  7. C++ によるデスクトップ開発」をクリック.「インストール」をクリック.

    [image]
  8. ダウンロードとインストールが始まる
  9. インストール終了の確認

Git のインストール

NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.7.0, NVIDIA cuDNN 8.4.1 のインストール

GPU は,グラフィックス・プロセッシング・ユニットの略で、コンピュータグラフィックス関連の機能,乗算や加算の並列処理の機能などがある. NVIDIA CUDA ツールキット は,NVIDIA社が提供している GPU 用のプラットフォームである.

【インストール手順の詳細説明】

NVIDIA ドライバについて

  1. 古いNVIDIA ドライバ,NVIDIA CUDA ツールキットがインストール済みのとき,不要なものがあればアンインストール

    Windows のスタートメニューで「設定」,「アプリ」と操作して,「NVIDIA ・・・」を削除

  2. NVIDIA グラフィックス・カードの種類を調べる

    hwinfo (URL: https://www.hwinfo.com) を使って調べることができる.

  3. あとで,NVIDIA CUDA ツールキットをインストールするときに,NVIDIA ドライバを同時にインストールすることができる.

    但し, NVIDIA CUDA ツールキットの古いバージョンを使うという場合は,NVIDIA CUDA ツールキットのインストールのときに NVIDIA ドライバをインストールするのでなく,次のページから最新のNVIDIA ドライバをダウンロードして,インストールする.

    NVIDIA ドライバのダウンロードページ】

    https://www.nvidia.co.jp/Download/index.aspx?lang=jp

NVIDIA CUDA ツールキット 11.7.0,NVIDIA cuDNN 8.4.1 のインストール

インストール手順の詳細(別ページ)

Windows での NVIDIA ドライバ,NVIDIA CUDA ツールキット 11.7.1NVIDIA cuDNN v8.5 のインストールと動作確認: 別ページで説明している.

インストール手順の概要

NVIDIA CUDA ツールキット 11.7.1 のダウンロードとインストール

NVIDIA cuDNN v8.5 のインストール(Windows 上)

要点

インストール手順

  1. ZLIB DLL のダウンロードとインストール

    Windows では,コマンドプロン プトを管理者として実行し, 次のコマンドを実行.

    Windows のコマンドプロンプト管理者として実行するには, 検索窓で「cmd」と入れたあと, 右クリックメニューで「管理者として実行」を選ぶのが簡単.

    [image]

    v11.7」のところは,実際にインストールされているバージョンを確認し,読み替えてください.

    cd "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\bin"
    curl -O http://www.winimage.com/zLibDll/zlib123dllx64.zip
    call powershell -command "Expand-Archive zlib123dllx64.zip"
    copy zlib123dllx64\dll_x64\zlibwapi.dll .
    

    [image]

    Windows で 「Could not locate zlibwapi.dll. Please make sure it is in your library path!」と表示されるときの対処:

    ここの説明を参考に ZLIB DLL をインストールする.

  2. NVidia の cuDNN のウェブページを開く

    https://developer.nvidia.com/cuDNN

  3. ダウンロードしたいので,cuDNNのところにある「Download cuDNN」をクリック.

    [image]
  4. NVIDIA Developer Program メンバーシップに入る

    cuDNN のダウンロードのため.

    Join now」をクリック.その後,画面の指示に従う. 利用者本人が,電子メールアドレス,表示名,パスワード,生年月日を登録.利用条件等に合意.

    [image]
  5. ログインする

    [image]
  6. 調査の画面が出たときは,調査に応じる
  7. ライセンス条項の確認

    [image]
  8. ダウンロードしたいバージョンを選ぶ

    ここでは「NVIDIA cuDNN v8.5.0 for CUDA 11.x」を選んでいる.

    このとき,画面の「for CUDA ...」のところを確認し,使用するNVIDIA CUDA のバージョンに合うものを選ぶこと.

    [image]
  9. Windows にインストールするので Windows 版を選ぶ

    [image]
  10. ダウンロードが始まる.

    [image]
  11. ダウンロードした .zip ファイルを展開(解凍)する. その中のサブディレクトリを確認しておく.

    Windows での展開(解凍)のためのソフトには,「7-Zip」などがある.

    [image]
  12. CUDA ツールキットをインストールしたディレクトリ」は,「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7」 のようになっている.確認する.

    [image]
  13. 確認したら, さきほど展開してできたすべてのファイルとディレクトリを,「CUDA ツールキットをインストールしたディレクトリ」にコピーする

    [image]
  14. パスが通っていることを確認.

    次の操作により,cudnn64_8.dllパスが通っていることを確認する.

    Windowsのコマンドプロンプトを開き,次のコマンドを実行.エラーメッセージが出ないことを確認.

    where cudnn64_8.dll
    

    [image]
  15. システム環境変数 CUDNN_PATH の設定を行う.

    システム環境変数 CUDNN_PATH の設定のため, 管理者として実行した コマンドプロンプトで,次のコマンドを実行.

    call powershell -command "[System.Environment]::SetEnvironmentVariable(\"CUDNN_PATH\", \"C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.7\", \"Machine\")"
    

    [image]

Python 64 ビット版のインストール,pip と setuptools の更新(Windows 上)

Windows での Python 3.10 のインストール,pip と setuptools の更新: 別ページで説明している.

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

Python の opencv-python のインストール

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

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

  2. opencv-python のインストール

    ※ 「pip install ...」は,Python パッケージをインストールするための操作

    python -m pip install -U opencv-python opencv-contrib-python
    

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

次の記事に記載の手順による.

https://dgmaxime.medium.com/how-to-easily-install-detectron2-on-windows-10-39186139101c

  1. コマンドプロンプト管理者として実行
  2. torch, torchvision, torchaudio のインストール

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

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

    python -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu116
    
  3. cython のインストール
    python -m pip install cython
    
  4. pycocotools のインストール
    python -m pip install "git+https://github.com/philferriere/cocoapi.git#egg=pycocotools&subdirectory=PythonAPI"
    
  5. Detectron2 のインストール

    https://github.com/DGMaxime/detectron2-windows を使用している.

    python -m pip uninstall detectron2
    cd %HOMEPATH%
    rmdir /s /q detectron2-windows
    git clone --recursive https://github.com/DGMaxime/detectron2-windows.git
    cd detectron2-windows
    python -m pip install -e .
    python tests\test_windows_install.py
    
  6. インストールの確認

    [image]

Detectron2 の物体検出,インスタンス・セグメンテーションのPython プログラム

画像の準備

coco (common object in context) データセットの中の画像ファイルをダウンロード

https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt の記載による

cd %HOMEPATH%\detectron2-windows
curl -O http://images.cocodataset.org/val2017/000000439715.jpg

[image]

物体検出

  1. Windows のコマンドプロンプトを開く
  2. Python プログラムの実行

    Python プログラムの実行

    Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

    Python のまとめ: 別ページにまとめている.

    コマンドプロンプトで次を実行

    cd %HOMEPATH%\detectron2-windows
    python
    

    次の Python プログラムを実行

    RetinaNet, R101, FPN, 3x による物体検出. COCO データセットによる学習済みモデルを使用.

    https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成

    Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md

    「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.

    import detectron2
    from detectron2 import model_zoo
    from detectron2.engine import DefaultPredictor
    from detectron2.config import get_cfg
    from detectron2.utils.visualizer import Visualizer
    from detectron2.data import MetadataCatalog, DatasetCatalog
    
    def setup_config(configfile):
        cfg = get_cfg()
        # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library
        cfg.merge_from_file(model_zoo.get_config_file(configfile))
        cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
        # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well
        cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile)
        return cfg
    
    def look_instance(outputs):
        # インスタンス・セグメンテーションの結果の確認
        # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification
        print(outputs["instances"].pred_classes)
        print(outputs["instances"].pred_boxes)
    
    def visualize_instance(im, cfg, outputs):
        # 画面表示
        # We can use `Visualizer` to draw the predictions on the image.
        v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
        out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        cv2.imshow("", out.get_image()[:, :, ::-1])
        cv2.waitKey(15)
    
    import cv2
    im = cv2.imread('000000439715.jpg')
    cfg = setup_config('COCO-Detection/retinanet_R_101_FPN_3x.yaml')
    predictor = DefaultPredictor(cfg)
    outputs = predictor(im)
    look_instance(outputs)
    visualize_instance(im, cfg, outputs)
    

    [image]

    [image]

インスタンス・セグメンテーションのPython プログラム (COCO データセット)

  1. Windows のコマンドプロンプトを開く
  2. Python プログラムの実行

    Python プログラムの実行

    Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

    Python のまとめ: 別ページにまとめている.

    コマンドプロンプトで次を実行

    cd %HOMEPATH%\detectron2-windows
    python
    

    次の Python プログラムを実行

    Mask-RCNN, R101, FPN, 3x によるインスタンス・セグメンテーション. COCO データセットによる学習済みモデルを使用.

    https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成

    Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md

    「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.

    import detectron2
    from detectron2 import model_zoo
    from detectron2.engine import DefaultPredictor
    from detectron2.config import get_cfg
    from detectron2.utils.visualizer import Visualizer
    from detectron2.data import MetadataCatalog, DatasetCatalog
    
    def setup_config(configfile):
        cfg = get_cfg()
        # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library
        cfg.merge_from_file(model_zoo.get_config_file(configfile))
        cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
        # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well
        cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile)
        return cfg
    
    def look_instance(outputs):
        # インスタンス・セグメンテーションの結果の確認
        # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification
        print(outputs["instances"].pred_classes)
        print(outputs["instances"].pred_boxes)
    
    def visualize_instance(im, cfg, outputs):
        # 画面表示
        # We can use `Visualizer` to draw the predictions on the image.
        v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
        out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        cv2.imshow("", out.get_image()[:, :, ::-1])
        cv2.waitKey(15)
    
    import cv2
    im = cv2.imread('000000439715.jpg')
    cfg = setup_config('COCO-InstanceSegmentation/mask_rcnn_R_101_FPN_3x.yaml')
    predictor = DefaultPredictor(cfg)
    outputs = predictor(im)
    look_instance(outputs)
    visualize_instance(im, cfg, outputs)
    

    [image]

    [image]

パノプティック・セグメンテーションのPython プログラム

  1. Windows のコマンドプロンプトを開く
  2. Python プログラムの実行

    Python プログラムの実行

    Python 開発環境(Jupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, Spyder, PyCharm, PyScripterなど)も便利である.

    Python のまとめ: 別ページにまとめている.

    コマンドプロンプトで次を実行

    cd %HOMEPATH%\detectron2-windows
    python
    

    次の Python プログラムを実行

    Panoptic FPN, R101, 3x によるパノプティック・セグメンテーション. COCO データセットによる学習済みモデルを使用.

    https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成

    Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md

    「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.

    import detectron2
    from detectron2 import model_zoo
    from detectron2.engine import DefaultPredictor
    from detectron2.config import get_cfg
    from detectron2.utils.visualizer import Visualizer
    from detectron2.data import MetadataCatalog, DatasetCatalog
    
    def setup_config(configfile):
        cfg = get_cfg()
        # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library
        cfg.merge_from_file(model_zoo.get_config_file(configfile))
        cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
        # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well
        cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile)
        return cfg
    
    def look_instance(outputs):
        # インスタンス・セグメンテーションの結果の確認
        # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification
        print(outputs["instances"].pred_classes)
        print(outputs["instances"].pred_boxes)
    
    def visualize_instance(im, cfg, outputs):
        # 画面表示
        # We can use `Visualizer` to draw the predictions on the image.
        v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
        out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        cv2.imshow("", out.get_image()[:, :, ::-1])
        cv2.waitKey(15)
    
    import cv2
    im = cv2.imread('000000439715.jpg')
    cfg = setup_config('COCO-PanopticSegmentation/panoptic_fpn_R_101_3x.yaml')
    predictor = DefaultPredictor(cfg)
    outputs = predictor(im)
    look_instance(outputs)
    visualize_instance(im, cfg, outputs)
    

    [image]

    [image]

    次の Python プログラムを実行

    Panoptic FPN R101 によるパノプティック・セグメンテーション.

    https://colab.research.google.com/drive/16jcaJoc6bCFAQ96jDe2HwtXj7BMD_-m5#scrollTo=FsePPpwZSmqt のプログラムをもとに作成

    Detectron2 の学習済みモデルは https://github.com/facebookresearch/detectron2/blob/main/MODEL_ZOO.md

    「im = cv2.imread('000000439715.jpg')」で,処理したい画像ファイルをロードしている.

    import detectron2
    from detectron2 import model_zoo
    from detectron2.engine import DefaultPredictor
    from detectron2.config import get_cfg
    from detectron2.utils.visualizer import Visualizer
    from detectron2.data import MetadataCatalog, DatasetCatalog
    
    def setup_config(configfile):
        cfg = get_cfg()
        # add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library
        cfg.merge_from_file(model_zoo.get_config_file(configfile))
        cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
        # Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well
        cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(configfile)
        return cfg
    
    def look_instance(outputs):
        # インスタンス・セグメンテーションの結果の確認
        # look at the outputs. See https://detectron2.readthedocs.io/tutorials/models.html#model-output-format for specification
        print(outputs["instances"].pred_classes)
        print(outputs["instances"].pred_boxes)
    
    def visualize_instance(im, cfg, outputs):
        # 画面表示
        # We can use `Visualizer` to draw the predictions on the image.
        v = Visualizer(im[:, :, ::-1], MetadataCatalog.get(cfg.DATASETS.TRAIN[0]), scale=1.2)
        out = v.draw_instance_predictions(outputs["instances"].to("cpu"))
        cv2.imshow("", out.get_image()[:, :, ::-1])
        cv2.waitKey(15)
    
    import cv2
    im = cv2.imread('000000439715.jpg')
    cfg = setup_config('Misc/panoptic_fpn_R_101_dconv_cascade_gn_3x.yaml')
    predictor = DefaultPredictor(cfg)
    outputs = predictor(im)
    look_instance(outputs)
    visualize_instance(im, cfg, outputs)
    

    [image]

    [image]