トップページ情報工学を学ぶ人工知能の実行,Python プログラム (Windows 上)Mask RCNN によるインスタンス・セグメンテーション(matterport/Mask_RCNN, Python 3.7,TensorFlow 1.15.5, Keras 2.3.1 を使用)(Windows 上)(Windows 上)

Mask RCNN によるインスタンス・セグメンテーション(matterport/Mask_RCNN, Python 3.7,TensorFlow 1.15.5, Keras 2.3.1 を使用)(Windows 上)(Windows 上)

Mask RCNN を用いた画像の物体認識.

手順の要点: 前準備として,NVIDIA CUDA 10.0, NVIDIA cuDNN 7.6.5, Python 3.7, TensorFlow 1.15.5 等をインストール.

ソフトウェア等の利用条件等は,利用者で確認すること.

謝辞:ソフトウェアの作者に感謝します.

前準備

Visual Studio Community 2017 のインストール

NVIDIA CUDA 10.0 は Visual Studio Commnity 2017, 2015, 2013, 2012 と連携して動く機能がある.

NVIDIA CUDA 10.0 のインストールの前に, Visual Studio Commnity 2017 のインストールを行う.

Visual Studio Commnity 2017 のインストールは, https://visualstudio.microsoft.com/ja/vs/older-downloads/ で「2017」を選び,「ダウンロード」をクリック. その後表示されるダウンロードの画面で, 「Visual Studio Commnity 2017」を選ぶ.

Git のインストール

Git のページ https://git-scm.com/ からダウンロードしてインストール:

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

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

インストールの詳細説明

Windows での NVIDIA ドライバ,NVIDIA CUDA ツールキット 10.0,NVIDIA cuDNN 7.6.5 のインストール: 別ページで説明している.

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

インストールの要点

インストールの詳細説明

NVIDIA CUDA ツールキット 10.0, NVIDIA cuDNN 7.6.5 のインストール

インストールの詳細説明

Windows での NVIDIA ドライバ,NVIDIA CUDA ツールキット 10.0,NVIDIA cuDNN 7.6.5 のインストール: 別ページで説明している.

インストールの要点

Python 3.7 64 ビット版のインストール,pip と setuptools の更新,Python 開発環境 (JupyterLab, spyder, nteract)のインストール

① Python 3.7 64 ビット版のインストール(Windows 上)

インストールの詳細説明

https://www.kkaneko.jp/tools/win/python37.html

Python のインストールでの注意点

インストール手順

Windows での Python 3.7 のインストール(あとのトラブルが起きにくいような手順を定めている)

  1. Python の URL を開く

    URL: https://www.python.org

  2. Windows 版の Python 3.7 をダウンロード

    ページの上の方にある「Downloads」をクリック,「Downloads」の下にメニューが出るので,その中の「Windows」をクリック.

    そして,Python 3.7.x (x は数字)を探す.

    そして,Windows の 64ビット版のインストーラをダウンロードしたいので,「Windows x86-64 executable installer」を選ぶ

    [image]
  3. インストール時の設定
    1. いまダウンロードした .exe ファイルを右クリック, 右クリックメニューで「管理者として実行」を選ぶ.

      [image]
    2. Python ランチャーをインストールするために,「Install launcher for all users (recommended)」をチェック.

      ※ すでに Python ランチャーをインストール済みのときは, 「Install launcher for all users (recommended)」がチェックできないようになっている場合がある.そのときは,チェックせずに進む.

    3. Add Python 3.7 to PATH」をチェック.

      [image]
    4. Customize installation」をクリック.

      [image]
    5. オプションの機能 (Optional Features)は,既定(デフォルト)のままでよい. 「Next」をクリック

      [image]
    6. Install for all users」を選んでおいたほうが,複数人で使えて便利という考え方もある.

      そして,Python のインストールディレクトリは,「C:\Program Files\Python37」のように自動設定されることを確認.

      Install」をクリック

      [image]
    7. Disable path length limit」が表示される場合がある.クリックして,パス長の制限を解除する

      [image]
    8. インストールが終了したら,「Close」をクリック
  4. インストールのあと,Windows のスタートメニューに「Python 3.7」が増えていることを確認.
  5. システムの環境変数 Path の確認のため,新しくコマンドプロンプトを開き,次のコマンドを実行.

    pypipパスが通っていることの確認である.

    where py
    where pip
    

    where py では「C:\Windows\py.exe」 が表示され, where pip では「C:\Program Files\Python37\Scripts\pip.exe」 が表示されることを確認.

② pip と setuptools の更新(Windows 上)

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

    Windowspip を実行するときは,コマンドプロンプト管理者として実行し,それを使って pip を実行することにする.

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

  2. 次のコマンドを実行

    py -3.7 -m pip install -U pip setuptools
    

【pip の利用】

pip は,次のコマンドで起動できる.

③ Python 開発環境 (JupyterLab, spyder, nteract)のインストール

Python 開発環境のコマンドでの起動のまとめ. (Python 3.7 を指定する場合

Windows の Python ランチャーでバージョン指定

インストール手順

  1. Python 開発環境,Python コンソールJupyter Qt Console, Jupyter ノートブック (Jupyter Notebook), Jupyter Lab, Nteract, spyder)のインストール(Windows 上)

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

    Python の使用は「py -3.7」で行う.

    Windowspip を実行するときは,コマンドプロンプト管理者として実行し,それを使って pip を実行することにする.

    py -3.7 -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext nteract_on_jupyter spyder
    

    もし,Python の隔離された環境を使用したいときは,次のような手順で, venv を用いて,Python の隔離された環境を作る.

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

    Python の使用は「C:\venv\py37\Scripts\activate.bat」の後,「python」で行う.

    py -3.7 -m pip install -U pip setuptools
    py -3.7 -m venv C:\venv\py37
    C:\venv\py37\Scripts\activate.bat
    python -m pip install -U pip setuptools jupyterlab jupyter jupyter-console jupytext PyQt5 nteract_on_jupyter spyder
    

インストール

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

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

  2. ディレクトリ(フォルダ)を空にする操作

    cd %HOMEPATH%
    rmdir /s /q Mask_RCNN
    
  3. matterport/Mask_RCNN のインストール

    最新版の Keras は TensorFlow 1.15 では動かない. Keras のバージョン 2.3.1 をインストールする

    git clone https://github.com/matterport/Mask_RCNN
    cd Mask_RCNN
    py -3.7 -m pip install -U numpy==1.16.2 protobuf==3.19.4 tensorflow-gpu==1.15.5 keras==2.3.1 scipy==1.5.4
    py -3.7 -m pip install -r requirements.txt
    py -3.7 setup.py build
    py -3.7 setup.py install 
    

Mask RCNN によるインスタンス・セグメンテーションを動かしてみる

Python コンソールで,SSD.ipynb に記載のコマンドを実行しながら結果を確認したい.結果は,画像などでプロットされる場合がある.

Windows での手順を下に示す.Ubuntu でも同様の手順になる.

  1. Windows で,コマンドプロンプトを実行.
  2. カレントディレクトリ

    cd %HOMEPATH%\Mask_RCNN
    

    [image]
  3. jupyter qtconsole の起動

    これ以降の操作は,jupyter qtconsole で行う.

    py -3.7 -m jupyter qtconsole
    

    [image]
  4. ROOT_DIR の設定

    エラーメッセージが出ないことを確認

    import os
    ROOT_DIR = os.environ['HOMEPATH'] + '\\Mask_RCNN'
    

    [image]
  5. 前準備

    前準備 として、mask_rcnn_coco.h5 のダウンロードなどを行う

    import os
    import sys
    import random
    import math
    import numpy as np
    import skimage.io
    import matplotlib
    %matplotlib inline
    import matplotlib.pyplot as plt
    import warnings
    warnings.filterwarnings('ignore')   # Suppress Matplotlib warnings
    import imgaug
    
    # Import Mask RCNN
    sys.path.append(ROOT_DIR)  # To find local version of the library
    from mrcnn import utils
    import mrcnn.model as modellib
    from mrcnn import visualize
    # Import COCO config
    sys.path.append(os.path.join(ROOT_DIR, "samples/coco/"))  # To find local version
    
    
    # Directory to save logs and trained model
    MODEL_DIR = os.path.join(ROOT_DIR, "logs")
    
    # Local path to trained weights file
    COCO_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_coco.h5")
    # Download COCO trained weights from Releases if needed
    if not os.path.exists(COCO_MODEL_PATH):
        utils.download_trained_weights(COCO_MODEL_PATH)
    
    # Directory of images to run detection on
    IMAGE_DIR = os.path.join(ROOT_DIR, "images")
    

    [image]
  6. 設定
    import coco
    class InferenceConfig(coco.CocoConfig):
        # Set batch size to 1 since we'll be running inference on
        # one image at a time. Batch size = GPU_COUNT * IMAGES_PER_GPU
        GPU_COUNT = 1
        IMAGES_PER_GPU = 1
    
    config = InferenceConfig()
    config.display()
    

    [image]
  7. 学習済みデータのロード
    # Create model object in inference mode.
    model = modellib.MaskRCNN(mode="inference", model_dir=MODEL_DIR, config=config)
    
    # Load weights trained on MS-COCO
    model.load_weights(COCO_MODEL_PATH, by_name=True)
    

    [image]
  8. クラス名の設定
    # COCO Class names
    # Index of the class in the list is its ID. For example, to get ID of
    # the teddy bear class, use: class_names.index('teddy bear')
    class_names = ['BG', 'person', 'bicycle', 'car', 'motorcycle', 'airplane',
                   'bus', 'train', 'truck', 'boat', 'traffic light',
                   'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird',
                   'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear',
                   'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie',
                   'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball',
                   'kite', 'baseball bat', 'baseball glove', 'skateboard',
                   'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup',
                   'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
                   'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza',
                   'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed',
                   'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote',
                   'keyboard', 'cell phone', 'microwave', 'oven', 'toaster',
                   'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors',
                   'teddy bear', 'hair drier', 'toothbrush']
    
    

    [image]
  9. 画像からのオブジェクト検出
    # Load a random image from the images folder
    file_names = next(os.walk(IMAGE_DIR))[2]
    image = skimage.io.imread(os.path.join(IMAGE_DIR, random.choice(file_names)))
    
    # Run detection
    results = model.detect([image], verbose=1)
    
    # Visualize results
    %matplotlib inline 
    r = results[0]
    visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], 
                                class_names, r['scores'])
    

    実際の動作画面

    画像はランダムで選択されるので、違う画像が表示されても問題なし

    [image]