Versuchen Sie es mit PlaidML, das auf der GPU Ihres Mac mit OpenPose Part 2 auf MacBookPro ausgeführt wird. Was funktioniert außer dem Benchmark noch? Als ich es nachgeschlagen habe, habe ich einen Artikel wie diesen über Qiita gefunden, also habe ich versucht zu sehen, ob es in der aktuellen Situation (2020) funktioniert.
Richten Sie eine virtuelle Python-Umgebung ein.
Erstellen Sie eine virtuelle Umgebung
$ virtualenv plaidvison-plaidml
Betreten Sie die virtuelle Umgebung
$ source plaidvison-plaidml/bin/activate
Installieren Sie nach dem Aufrufen der virtuellen Umgebung das PlaidML-Paket und konfigurieren Sie das zu verwendende Gerät. Dies ist dasselbe wie OpenPose auf MacBookPro Teil 2.
Installieren Sie PlaidML- und Benchmark-Pakete
$ pip install plaidml-keras plaidbench
Stellen Sie das von PlaidML verwendete Gerät ein
$ plaidml-setup
* Verwenden Sie y mit Ausnahme der Geräteeinstellungen
・ ・ ・
<Unterlassung>
・ ・ ・
Wählen Sie im Abschnitt Geräteeinstellungen die in der Liste angezeigte Gerätenummer aus und drücken Sie die Eingabetaste.
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
・ ・ ・
<Unterlassung>
・ ・ ・
Überprüfen Sie nach der Installation des Pakets und dem Einstellen des Geräts den Betrieb.
Bestätigter Betrieb mit 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"* Wenn diese Anzeige angezeigt wird, wird sie auf dem ausgewählten Gerät ausgeführt.
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
Es scheint, dass sich die Quelle zum Zeitpunkt der Veröffentlichung des Referenzartikels im PlaidML-Repository befand, aber als ich es versuchte Der Link war defekt und als ich ihn nachschlug, wurde er unter hier gefunden.
Also werde ich es von git klonen.
$ git clone https://github.com/jbruestle/plaidvision.git
Geben Sie nach dem Klonen das Verzeichnis ein.
$ cd plaidvision
Installieren Sie die erforderlichen Pakete.
$ pip install -r requirements.txt
Nach der Installation des Pakets habe ich es mit dem folgenden Befehl gestartet, aber aus irgendeinem Grund endete es mit einem Fehler.
$ 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'
Es scheint, dass ein Fehler vorliegt, da es kein Attribut namens imresize gibt. Daher habe ich es überprüft und versucht, die Quelle von plaidvision.py zu ändern, während ich mich auf Folgendes beziehe.
<Unterlassung>
import pygame
import scipy.misc
from PIL import Image <-Fügen Sie diese Zeile hinzu
<Unterlassung>
Der Teil, der hier imresize nennt
def classify(self, img, top_n=5):
if img.shape != self.shape:
img = scipy.misc.imresize(img, self.shape).astype(float) <==Hier
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]
Ändern Sie wie unten
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) <==Ändere dich so
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]
Nach der Korrektur, als ich versuchte, sie erneut auszuführen, wurde die Fehlerbeendigung nicht angezeigt, aber das graue Fenster wurde angezeigt und nichts wurde angezeigt.
Als ich nach dem Grund suchte, fand ich solche Informationen.
Anscheinend gab es ein Problem mit der Kompatibilität zwischen dem standardmäßig installierten Pygame und dem Mac, und es scheint, dass ich eine andere Version von Pygame installieren musste.
Deinstallieren Sie also das aktuell enthaltene Pygame.
$ pip uninstall pygame
Geben Sie dann die Version an und installieren Sie sie.
$ pip install pygame==2.0.0.dev6
Nach der Installation von pygame habe ich versucht, es auszuführen.
$ python plaidvision.py mobilenet
Diesmal funktionierte es ohne Probleme und ich konnte das Bild beurteilen.
Recommended Posts