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.
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
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.
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.
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