LoginSignup
1
0

More than 3 years have passed since last update.

PlaidMLの画像判定をMacで動かしてみる

Last updated at Posted at 2020-05-01

MacBookPro でOpenPose その2 でMacのGPUを利用して動作するPlaidMLを使ってみて、ベンチマークの他に何が動くのかな?ということで調べてみるとqiitaでこのような記事を見つけたので、現状(2020年)で動作するのか試してみました。

環境

  • MacBook Pro 15in 2018 2.2 GHz Core i7 32GB Memory
  • Mojave 10.14.6
  • python 3.7.5
  • homebrew でpythonとvirtualenv、wgetをインストール

準備

Pythonの仮想環境を設定します。

仮想環境を作成
$ virtualenv plaidvison-plaidml

仮想環境へ入る
$ source plaidvison-plaidml/bin/activate

設定

PlaidML設定、動作確認

仮想環境へ入った後、PlaidMLパッケージのインストールと使用するデバイスの設定を行います。ここは MacBookPro でOpenPose その2 と同じです。

PlaidMLとベンチマークのパッケージをインストール
$ pip install plaidml-keras plaidbench

PlaidMLで使用するデバイスを設定
$ plaidml-setup
※デバイスの設定以外は y で
・・・
< 中略 >
・・・
デバイスの設定箇所では一覧に表示されたデバイスの番号を選択してEnter
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:

   1 : llvm_cpu.0
   2 : opencl_intel_uhd_graphics_630.0
   3 : opencl_cpu.0
   4 : opencl_amd_radeon_pro_555x_compute_engine.0
   5 : metal_intel(r)_uhd_graphics_630.0
   6 : metal_amd_radeon_pro_555x.0

Default device? (1,2,3,4,5,6)[1]:6
・・・
< 中略 >
・・・

パッケージのインストールとデバイスの設定が終わったら、動作確認を行います。

ベンチマークで動作を確認
$ plaidbench keras mobilenet
Running 1024 examples with mobilenet, batch size 1, on backend plaid
INFO:plaidml:Opening device "metal_amd_radeon_pro_555x.0" ※この表示が出ていれば選択したデバイスで動作している
Compiling network... Warming up... Running...
Example finished, elapsed: 0.545s (compile), 14.425s (execution)

-----------------------------------------------------------------------------------------
Network Name         Inference Latency         Time / FPS          
-----------------------------------------------------------------------------------------
mobilenet            14.09 ms                  0.00 ms / 1000000000.00 fps
Correctness: PASS, max_error: 1.675534622336272e-05, max_abs_error: 7.674098014831543e-07, fail_ratio: 0.0

plaidvisionの設定

設定、しかしエラー終了

参考記事掲載時にはPlaidMLのリポジトリにソースはあったようなのですが、私が試したところ
リンク切れとなっており、調べてみたところこちらにありました。

ということでgitよりクローンします。

$ git clone https://github.com/jbruestle/plaidvision.git

クローン後、ディレクトリに入ります。

$ cd plaidvision

必要なパッケージをインストールします。

$ pip install -r requirements.txt 

パッケージインストール後に、下記コマンドで起動しましたが何故かエラー終了してしまいました。

$ python plaidvision.py mobilenet
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Using PlaidML backend.
INFO:plaidml:Opening device "metal_amd_radeon_pro_555x.0"
Traceback (most recent call last):
  File "plaidvision.py", line 320, in <module>
    main()
  File "plaidvision.py", line 289, in main
    predictions = model.classify(frame)
  File "plaidvision.py", line 219, in classify
    img = scipy.misc.imresize(img, self.shape).astype(float)
AttributeError: module 'scipy.misc' has no attribute 'imresize'

エラーの調査と修正、しかし

どうもimresizeというattributeがないのでエラーとなっているということなので調べてみたところ、下記を参考にしつつplaidvision.pyのソースを修正してみました。

<中略>
import pygame
import scipy.misc
from PIL import Image <- この行を追加

<中略>

ここのimresizeを呼び出している部分を

    def classify(self, img, top_n=5):
        if img.shape != self.shape:
            img = scipy.misc.imresize(img, self.shape).astype(float)   <== ここを
        data = np.expand_dims(img, axis=0)
        data = self.preprocess_input(data)
        predictions = self.model.predict(data)
        return self.decode_predictions(predictions, top=top_n)[0]

下記のように変更

    def classify(self, img, top_n=5):
        if img.shape != self.shape:
            img = np.array(Image.fromarray(img).resize((int(self.shape[1]),int(self.shape[0])), resample=0)).astype(float)  <== このように変更
        data = np.expand_dims(img, axis=0)
        data = self.preprocess_input(data)
        predictions = self.model.predict(data)
        return self.decode_predictions(predictions, top=top_n)[0]

修正後、再度実行してみたところエラー終了は表示されなくなったですが、グレーのウィンドウが表示されたまま何も表示されない状態となってしまいました。

graywindow.png

表示の問題を修正

なぜだろうと調べてみたところ、このような情報がありました。

どうやらデフォルトでインストールしたpygameとMacの相性に問題があるようで、別のバージョンのpygameをインストールする必要があったようです。

ということで現在入っているpygameをアンインストールします。

$ pip uninstall pygame

そしてバージョンを指定してインストールします。

$ pip install pygame==2.0.0.dev6

結果は

pygameをインストール後、実行してみました。

$ python plaidvision.py mobilenet

今度は、問題なく動作し画像判定も行えました。

success.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0