[PYTHON] OpenPose auf MacBook Pro Teil 2

Ich habe festgestellt, dass OpenPose auf MacBook Pro mit OpenPose auf MacBook Pro funktioniert, habe mich aber gefragt, ob es auf einer GPU ausgeführt werden kann. Da es etwas gibt, das [PlaidML] heißt (https://www.intel.ai/plaidml/), habe ich Folgendes gelesen und es versucht, weil ich dachte, ich könnte es selbst verwalten.

Umgebung

Einrichtungsschritte

Vorbereitung

Richten Sie zur Vorbereitung eine virtuelle Umgebung für Python ein. Es war in Ordnung, die vorherige Umgebung zu verwenden, aber ich habe sie neu erstellt, falls es zu Konflikten kommt.

Erstellen Sie eine virtuelle Umgebung
$ virtualenv mppose-plaidml

Betreten Sie die virtuelle Umgebung
$ source mppose-plaidml/bin/activate

PlaidML-Einstellung, Funktionsprüfung

Installieren Sie nach dem Aufrufen der virtuellen Umgebung das PlaidML-Paket und konfigurieren Sie das zu verwendende Gerät. Mein MacBook Pro hatte eine Radeon Pro 555x, also habe ich mich dafür entschieden.

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

Ich wusste, dass es funktioniert, aber ich habe mich gefragt, was ich tun soll, weil ich nicht wusste, ob es schneller oder langsamer ist als bei Verwendung der CPU, sondern vor dem Befehl `` PLAIDML_DEVICE_IDS = "Gerätename". "Es gibt Informationen, dass, wenn Sie schreiben" `, es auf diesem Gerät funktioniert, also habe ich es versucht.

Bank mit CPU als Ausführungsgerät eingestellt
$ PLAIDML_DEVICE_IDS="opencl_cpu.0" plaidbench keras mobilenet
Running 1024 examples with mobilenet, batch size 1, on backend plaid
INFO:plaidml:Opening device "opencl_cpu.0"
Compiling network... Warming up... Running...
Example finished, elapsed: 3.034s (compile), 141.360s (execution)

-----------------------------------------------------------------------------------------
Network Name         Inference Latency         Time / FPS          
-----------------------------------------------------------------------------------------
mobilenet            138.05 ms                 134.30 ms / 7.45 fps
Correctness: FAIL, max_error: 0.005546755623072386, max_abs_error: 0.0003522038459777832, fail_ratio: 0.076

Infolgedessen scheint die Radeon Pro 555x etwa die zehnfache Leistung der CPU zu haben, daher denke ich, dass sie effektiv ist.

Wenn Sie im Aktivitätsmonitor "Fenster-> GPU-Verlauf" auswählen, können Sie die GPU-Geräteliste und den Betriebsstatus in Echtzeit anzeigen, sodass Sie damit auch den Betriebsstatus anzeigen können.

OpenPose-Einstellungen

Jetzt richten wir OpenPose ein. Das Verfahren ist größtenteils das gleiche wie beim letzten Mal, es müssen jedoch einige Schritte geändert werden, um PlaidML verwenden zu können.

Installieren Sie das Paket, um OpenPose auszuführen.
$ pip install ipython configobj pillow opencv-python

Klonen Sie die Keras-Backend-Version von OpenPose von Github.
$ git clone https://github.com/michalfaber/keras_Realtime_Multi-Person_Pose_Estimation.git

Wechseln Sie in das Verzeichnis.
$ cd keras_Realtime_Multi-Person_Pose_Estimation/

Gehen Sie zum Modellverzeichnis im Repository und laden Sie die Trainingsmodelle für Kaffee und Keras herunter.
$ cd model
$ sh get_caffe_model.sh 
$ sh get_keras_model.sh 

Ändern Sie das Modellverarbeitungsmodul, um PlaidML zu verwenden.
$ vi cmu_model.py

* Fügen Sie einfach die folgenden zwei Zeilen am Anfang des Quelltextes hinzu.
import plaidml.keras
plaidml.keras.install_backend()

Leere Init.Erstellen Sie einen Py.(Wenn ich dies in meiner Umgebung nicht erstelle, kann das Python-Modul unter dem Modellverzeichnis nicht geladen werden, wenn das Python-Skript später ausgeführt wird, und es tritt ein Fehler auf.)
$ touch __init.py__

Gehen Sie zurück zum oberen Rand des Repositorys und legen Sie die Ebene des numpy-Trainingsmodells von caffe ab.
$ cd ../
$ docker run -v `pwd`:/workspace -it bvlc/caffe:cpu python dump_caffe_layers.py

Konvertieren Sie die Caffe-Trainingsmodell-Ebene für Keras.
$ python caffe_to_keras.py 

Damit sind die Einstellungen abgeschlossen.

Die Operation war erfolgreich, aber ...

Also habe ich versucht, den Betrieb mit einem Beispielfoto und einer Kamera wie zuvor zu überprüfen ...

Versuchen Sie, die Haltung des Beispielfotos zu erkennen.
$ python demo_image.py --image sample_images/ski.jpg 

Starten Sie die Kamera und versuchen Sie, die Haltung zu erkennen.
$ python demo_camera.py

Die Haltungserkennung der Kamera führte zu einer Verarbeitungszeit von etwa 0,21 Sekunden, was niedriger war als das Betriebsergebnis der CPU (Verarbeitungszeit von etwa 0,07 Sekunden). Als ich "Warum?" Untersuchte, fand ich diese Art von Austausch in der PlaidML-Ausgabe. Plaidml backend slower than TF backend #530

Eine mögliche Möglichkeit ist, dass "das aktuelle PlaidML nicht viele Berechnungsmodelle unterstützt", und ich denke, dass es das diesmal verwendete OpenPose-Berechnungsmodell (CMU?) Nicht unterstützt. Ich werde.

Normalerweise halte ich es für gerechtfertigt, hier aufzugeben und "eine Umgebung mit GPU vorzubereiten". Dieses Mal fragte ich: "Wie viel kann ich in der aktuellen Umgebung zu Hause tun?", Also habe ich bisher getan, also den Rest

An einem solchen Ort denke ich, dass ich es tun werde, während ich über verschiedene Dinge nachdenke.

Recommended Posts

OpenPose auf MacBook Pro Teil 2
OpenPose auf dem MacBook Pro
Hinweise zum Einrichten der Tensorflow-GPU auf dem MacBook Pro (Mitte 2012)
Implementieren Sie ESPnet auf einem Macbook
Führen Sie Openpose unter Python (Windows) aus.
Installieren Sie OpenPose auf einem Mac (Catalina)
Dual Boot (nicht VM) für Kali Linux Version 2020.2 auf MacBook Pro 2017
Installieren Sie Ubuntu 18.04 auf dem MacBook Pro Touchbar-Modell und stellen Sie eine Verbindung zu WIFI her
Versuchen Sie es mit Pillow auf iPython (Teil 1)
Einführung in Python Hands On Teil 1
Versuchen Sie es mit Pillow auf iPython (Teil 2)
Versuchen Sie es mit Pillow auf iPython (Teil 3).