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).
Configurez un environnement virtuel Python.
Créer un environnement virtuel
$ virtualenv plaidvison-plaidml
Entrez dans l'environnement virtuel
$ source plaidvison-plaidml/bin/activate
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
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'
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.
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
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.
Recommended Posts