トップページ -> 最新情報技術の実習と研究ツール -> オープンデータ -> マイクロソフト coco のデータとモデルを使ってみる
[サイトマップへ]  

マイクロソフト coco のデータとモデルを使ってみる


前準備

Windows で、Anaconda を用いて隔離されたPython環境を作り、 そこに TensorFlow, Keras をインストールする手順について説明します

Anaconda のインストール

Windows での Anaconda のインストール手順は、 別の Web ページに記載しています

Ubuntu での Anaconda のインストール手順は、 別の Web ページに記載しています

隔離された Python 環境の作成.Tensorflow, Keras のインストール

Windows での 手順は、 別の Web ページに記載しています

以下,Windows での Anaconda をインストール済み, 隔離された Python 環境(名前は keras)に、Tensorflow, Keras をインストール済みであるものとして説明を続けます.


Cython, cocoapi, imgaug のインストール

https://github.com/philferriere/cocoapi の Python パッケージをインストール

  1. Windows のコマンドプロンプトを管理者として実行する.

  2. Python 環境(名前は keras)を有効に

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

    activate keras 
    

    「Could not find conda environment: keras」というメッセージが出たときは、 隔離された Python 環境の作成(名前は keras).Tensorflow, Keras のインストールを行う.

  3. Cython のインストール

    conda install -y Cython
    

  4. Windows 版の cocoapi のインストール

    mkdir c:\pytools
    cd c:\pytools
    rmdir /s /q cocoapi
    

    git clone https://github.com/philferriere/cocoapi 
    cd cocoapi/PythonAPI
    python setup.py build
    python setup.py install 
    

    (途中省略)

    (以下省略)

imgaug のインストール

  1. Windows のコマンドプロンプトを管理者として実行する.

  2. Python 環境(名前は keras)を有効に

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

    activate keras 
    

  3. imgaug の前提パッケージのインストール

    conda の行は1行ずつ実行.

    conda install -y certifi pyyaml setuptools vc vs2015_runtime wheel wincertstore yaml
    
    conda install -y scipy six scikit-image numpy
    

  4. imgaug のインストール

    mkdir c:\pytools
    cd c:\pytools
    rmdir /s /q imgaug
    

    git clone https://github.com/aleju/imgaug 
    cd imgaug
    python setup.py build
    python setup.py install 
    

matterport/Mask_RCNN のインストール

  1. Windows のコマンドプロンプトを管理者として実行する.

  2. Python 環境(名前は keras)を有効に

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

    activate keras 
    

  3. matterport/Mask_RCNN のインストール

    mkdir c:\pytools
    cd c:\pytools
    rmdir /s /q Mask_RCNN
    

    git clone https://github.com/matterport/Mask_RCNN 
    cd Mask_RCNN
    python setup.py build
    python setup.py install 
    

matterport/Mask_RCNN を実行してみる

  1. spyder(keras) を開く

    Windows のスタートメニューで、 「spyder」の方ではなく、 「spyder(keras)」を開く。 これで、spyder の中で、Python環境kerasが有効になる

    起動できないときは、Windowsのコマンドプロントで次を実行

    activate keras
    spyder
    

  2. いまから、spyder でプログラムを実行する

    参考Webページ

    https://github.com/matterport/Mask_RCNN/blob/master/samples/demo.ipynb

  3. カレントディレクトリの移動

    C:/pytools/Mask_RCNN」のところは、展開(解凍)したディレクトリにする

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

    cd C:/pytools/Mask_RCNN
    

  4. ROOT_DIR の設定

    C:/pytools/Mask_RCNN」のところは、展開(解凍)したディレクトリにする

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

    ROOT_DIR = 'C:/pytools/Mask_RCNN'
    

  5. 前準備

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

    import os
    import sys
    import random
    import math
    import numpy as np
    import skimage.io
    import matplotlib
    import matplotlib.pyplot as plt
    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
    
    %matplotlib inline 
    
    # 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")
    

  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()
    

  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)
    

  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']
    
    

  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
    r = results[0]
    visualize.display_instances(image, r['rois'], r['masks'], r['class_ids'], 
                                class_names, r['scores'])
    

    実際の動作画面

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