[PYTHON] Essayez d'exécuter le jugement d'image PlaidML sur Mac

Essayez d'utiliser PlaidML, qui fonctionne sur le GPU de votre Mac avec OpenPose Part 2 sur MacBookPro, qu'est-ce qui fonctionne en plus du benchmark? Alors, quand j'ai cherché, j'ai trouvé un article comme celui-ci sur qiita, alors j'ai essayé de voir si cela fonctionne dans la situation actuelle (2020).

environnement

Préparation

Configurez un environnement virtuel Python.

Créer un environnement virtuel
$ virtualenv plaidvison-plaidml

Entrez dans l'environnement virtuel
$ source plaidvison-plaidml/bin/activate

Réglage

Réglage PlaidML, contrôle de fonctionnement

Après être entré dans l'environnement virtuel, installez le package PlaidML et configurez le périphérique à utiliser. C'est la même chose que OpenPose 2 sur MacBookPro.

Installez PlaidML et les packages de référence
$ pip install plaidml-keras plaidbench

Définir l'appareil utilisé par PlaidML
$ plaidml-setup
* Utilisez y sauf pour les paramètres de l'appareil
・ ・ ・
<Omission>
・ ・ ・
Dans la section des paramètres de l'appareil, sélectionnez le numéro de l'appareil affiché dans la liste et appuyez sur Entrée.
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
・ ・ ・
<Omission>
・ ・ ・

Après avoir installé le package et configuré le périphérique, vérifiez le fonctionnement.

Fonctionnement confirmé avec benchmark
$ plaidbench keras mobilenet
Running 1024 examples with mobilenet, batch size 1, on backend plaid
INFO:plaidml:Opening device "metal_amd_radeon_pro_555x.0"* Si cet affichage apparaît, il fonctionne sur le périphérique sélectionné.
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

paramètres de vision à carreaux

Paramètres, mais fin de l'erreur

Il semble que la source se trouvait dans le référentiel PlaidML au moment de la publication de l'article de référence, mais quand je l'ai essayé Le lien était rompu, et quand je l'ai recherché, il a été trouvé sur ici.

Je vais donc le cloner à partir de git.

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

Après le clonage, entrez dans le répertoire.

$ cd plaidvision

Installez les packages requis.

$ pip install -r requirements.txt 

Après avoir installé le package, je l'ai démarré avec la commande suivante, mais pour une raison quelconque, il s'est terminé par une erreur.

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

Recherchez et corrigez les erreurs, mais

Il semble qu'il y ait une erreur car il n'y a pas d'attribut appelé imresize, donc je l'ai vérifié et j'ai essayé de modifier la source de plaidvision.py en me référant à ce qui suit.

<Omission>
import pygame
import scipy.misc
from PIL import Image <-Ajouter cette ligne

<Omission>

La partie qui appelle imresize ici

    def classify(self, img, top_n=5):
        if img.shape != self.shape:
            img = scipy.misc.imresize(img, self.shape).astype(float)   <==Ici
        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]

Changer comme ci-dessous

    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)  <==Changer comme ça
        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]

Après la correction, lorsque j'ai essayé de l'exécuter à nouveau, la fin de l'erreur n'était pas affichée, mais la fenêtre grise était affichée et rien ne s'affichait.

graywindow.png

Problèmes d'affichage résolus

Quand j'ai cherché pourquoi, j'ai trouvé de telles informations.

Apparemment, il y avait un problème de compatibilité entre le pygame installé par défaut et le Mac, et il semble que j'ai dû installer une autre version de pygame.

Alors, désinstallez le pygame actuellement inclus.

$ pip uninstall pygame

Spécifiez ensuite la version et installez.

$ pip install pygame==2.0.0.dev6

Le résultat est

Après avoir installé pygame, j'ai essayé de l'exécuter.

$ python plaidvision.py mobilenet

Cette fois, cela a fonctionné sans problème et j'ai pu juger de l'image.

success.png

Recommended Posts

Essayez d'exécuter le jugement d'image PlaidML sur Mac
Essayez d'exécuter Jupyter Notebook sur Mac
Essayez deepdream sur Mac
Essayez d'exécuter tensorflow sur Docker + anaconda
Essayez d'exécuter le simulateur 3D de Kobuki sur ROS
GPU ~ Implémentation de PlaidML sur Mac ~ (à partir de mai 2020)
Essayez d'exécuter Distributed TensorFlow sur Google Cloud Platform
python sur mac
Essayez d'importer des données MLB sur Mac et Python
Essayez d'exécuter Pyston 0.1
Installez le sélénium sur votre Mac et essayez-le avec python
Essayez d'utiliser E-Cell 4 sur Windows 7 ou Mac OS X
Installez pyenv sur Mac
Pyenv + virtualenv sur Mac
Installez Ansible sur Mac
Installez Python sur Mac
Installer Python 3 dans un environnement Mac
installation de numba sur mac
Exécutez OpenMVG sur Mac
Essayez FEniCS sur Windows!
Essayez Poerty sur Windows
Installez Python 3.4 sur Mac
Installez Caffe sur Mac
Installer mecab sur Mac
installer mecab-python sur Mac