[PYTHON] Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen

Dieser Artikel wurde aus unserem Blog nachgedruckt.

Einführung

Dieses Mal werde ich OpenPose auf einem Mac mit Chainer ausführen. (Es wird Teil der Funktion sein, die Erkennungswärmekarte anstelle des Ganzen zu generieren.)

    1. Laden Sie das von Caffe geschulte Modell herunter
  1. Laden Sie das Modell von Caffe von Chainer
    1. Wenden Sie Bilder auf das Chainer-Netzwerk an

Es wurde berichtet, dass OpenPose, ein Skelettschätzungsalgorithmus unter Verwendung einer auf CVPR2017 angekündigten Monokular-Kamera, bereits eine Echtzeitverarbeitung unter Ubuntu und Windows realisieren wird. Da jedoch eine GPU erforderlich ist oder der Mac sie nicht unterstützt, habe ich mich gefragt, ob sie irgendwie auf einem Mac oder einer CPU ausgeführt werden kann. Daher werde ich das Caffe-Modell mit Chainer laden und nur den DNN-Teil der ersten Hälfte ausführen.

Ausführungsumgebung (sollte unter Linux funktionieren)

Mac book Pro (2.7 GHz Intel Core i5,16 GB 1867 MHz DDR3) Python2.7 (Chainer, Numpy)

Arbeit

    1. Laden Sie das von Caffe geschulte Modell herunter

Laden Sie die ausführbare Binärdatei für Windows unter [hier] herunter (https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md). Es enthält die Caffe-Parameterdatei. (Wenn Sie an direkten Links interessiert sind, laden Sie die tragbare OpenPose-Demo 1.0 herunter und entpacken Sie sie. In der Mitte von https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md. Bitte fallen Sie von 1.)

  1. Laden Sie das Modell von Caffe von Chainer

Dieses Mal werden wir ein COCO-Modell verwenden, das 18 Skelette schätzt. (Das MPI-Modell kann nach dem gleichen Verfahren erstellt werden.) Das Caffe-Modell wird im folgenden Verzeichnis gespeichert.

OpenPose_demo_1.0.1/models/pose/coco/pose_iter_440000.caffemodel

Lesen Sie dies vom Kettenhändler.

from chainer.functions import caffe
func = caffe.CaffeFunction('pose_iter_440000.caffemodel')
    1. Wenden Sie Bilder auf das Chainer-Netzwerk an

OpenPose_demo_1.0.1/models/pose/coco/pose_deploy_linevec.prototxt Wenn Sie lesen, wird die Netzwerkkonfiguration geschrieben und wenn Sie sich die letzte Ausgabeschicht ansehen

layer {
   name: "concat_stage7"
   type: "Concat"
   bottom: "Mconv7_stage6_L2"
   bottom: "Mconv7_stage6_L1"
   # top: "concat_stage7"
   top: "net_output"
   concat_param {
     axis: 1
   }
 }

Der erste Ausgabeknoten ist mit dem Namen Mconv7_stage6_L2 definiert. (Mconv7_stage6_L1 ist eher wie ein Knochen)

Wenn Sie dies in der Ausgabeebene von func angeben, erhalten Sie die Ausgabekarte von (1,19, h, w).

x = chainer.Variable([Numpy Reihe von Bildern])
y, = func(inputs={'data': x}, outputs=['Mconv7_stage6_L2'])
print y.data.shape #(1,19,h,w)

Die Anzahl der Bilder beträgt 0,0 bis 1,0 (1, 4, Höhe, Breite) anstelle von 0 bis 255. Beachten Sie auch, dass der dtype np.float32 sein muss. (Ich weiß nicht, ob RGBA anstelle von RGB verwendet werden soll, aber ich tippe den 4. mit 0 ein)

↓ Dieses Bild habe ich ausprobiert paku2-200x300.jpg

testout-768x228.png

    POSE_COCO_BODY_PARTS {
        {0,  "Nose"},
        {1,  "Neck"},
        {2,  "RShoulder"},
        {3,  "RElbow"},
        {4,  "RWrist"},
        {5,  "LShoulder"},
        {6,  "LElbow"},
        {7,  "LWrist"},
        {8,  "RHip"},
        {9,  "RKnee"},
        {10, "RAnkle"},
        {11, "LHip"},
        {12, "LKnee"},
        {13, "LAnkle"},
        {14, "REye"},
        {15, "LEye"},
        {16, "REar"},
        {17, "LEar"},
        {18, "Bkg"},
    }

Die Wärmekarte zeigt die Existenzwahrscheinlichkeit jedes Körperteils, der in der obigen Struktur geschrieben ist. Es dauert ungefähr 10 Sekunden pro Blatt, aber es funktioniert auf der CPU, so dass es vielseitiger zu sein scheint.

Recommended Posts

Ich habe versucht, den DNN-Teil von OpenPose mit Chainer-CPU auszuführen
Ich habe versucht, die Sündenfunktion mit Chainer zu trainieren
Ich habe das TensorFlow-Tutorial mit Kommentaren ausgeführt (Textklassifizierung von Filmkritiken).
Ich habe versucht, den negativen Teil von Meros zu löschen
Ich habe versucht, den Beispielcode des Ansible-Moduls auszuführen
Ich habe versucht, die Laufdaten des Rennspiels (Assetto Corsa) mit Plotly zu visualisieren
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, mit TensorFlow den Durchschnitt mehrerer Spalten zu ermitteln
Ich habe versucht, Movidius NCS mit Python von Raspberry Pi3 auszuführen
Ich habe versucht, ListNet of Rank Learning mit Chainer zu implementieren
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe versucht, das Ranking des Qiita-Adventskalenders mit Python zu kratzen
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part2 zu bedienen
Ich habe versucht, die Bewässerung des Pflanzgefäßes mit Raspberry Pi zu automatisieren
Ich habe mit Kaggle Start Book basierend auf Kaggle studiert [Teil 1]
Ich habe die Grundoperation von Pandas im Jupyter Lab geschrieben (Teil 1)
[AWS / Tello] Ich habe versucht, die Drohne mit meiner Stimme Part1 zu bedienen
Ich habe versucht, die Größe des logischen Volumes mit LVM zu erweitern
Ich habe versucht, die Effizienz der täglichen Arbeit mit Python zu verbessern
Ich habe die grundlegende Operation von Pandas im Jupyter Lab geschrieben (Teil 2).
Ich habe versucht, das TensorFlow-Tutorial mit Kommentaren auszuführen (_TensorFlow_2_0_Einführung für Anfänger).
Ich habe den asynchronen Server von Django 3.0 ausprobiert
Ich habe versucht, DeepPose mit PyTorch PartⅡ zu implementieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
765 Ich habe versucht, die drei Berufsfamilien durch CNN zu identifizieren (mit Chainer 2.0.0).
Ich habe versucht, den Authentifizierungscode der Qiita-API mit Python abzurufen.
Ich habe versucht, die Bewegungen von Wiire-Playern automatisch mit Software zu extrahieren
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen
Ich habe versucht, die Negativität von Nono Morikubo zu analysieren. [Vergleiche mit Posipa]
Ich habe versucht, die Standardrolle neuer Mitarbeiter mit Python zu optimieren
Ich habe versucht, den Text des Romans "Wetterkind" mit Word Cloud zu visualisieren
Ich habe versucht, die Filminformationen der TMDb-API mit Python abzurufen
Ich habe versucht, das Verhalten des neuen Koronavirus mit dem SEIR-Modell vorherzusagen.
Ich habe versucht, Runenfiguren mit Scikit-Learn handschriftlich zu erkennen
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Ich habe die Pivot-Table-Funktion von Pandas ausprobiert
Ich habe versucht, die Wetterkarte einer Clusteranalyse zu unterziehen
Ich habe versucht, Bilder mit CIFAR-10 mit Keras-Learning- zu erkennen.
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht, Bilder von CIFAR-10 mit Keras-Bilderkennung zu erkennen.
Ich habe versucht, die Daten mit Zwietracht zu speichern
Ich habe Flask mit Remote-Containern von VS Code ausprobiert
Ich habe mit Chainer eine supereinfache lineare Trennung versucht
Ich habe versucht, die Trapezform des Bildes zu korrigieren
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, Deep Floor Plan mit Python 3.6.10 auszuführen.
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
Ich habe versucht, mit tkinter mit dem Taschenrechner zu spielen
Ich habe versucht, die Texte von Hinatazaka 46 zu vektorisieren!
Ich habe versucht, die Tweets von JAWS DAYS 2017 mit Python + ELK einfach zu visualisieren
Ich habe versucht, Objekte mit YOLO v3 (TensorFlow 2.1) auf der GPU von Windows zu erkennen!
Die Geschichte von soracom_exporter (Ich habe versucht, SORACOM Air mit Prometheus zu überwachen)
Ich habe versucht, ein Modell mit dem Beispiel von Amazon SageMaker Autopilot zu erstellen
Ich habe versucht, die Literatur des neuen Corona-Virus mit Python automatisch an LINE zu senden
Ich habe versucht, mit dem Seq2Seq-Modell von TensorFlow so etwas wie einen Chatbot zu erstellen
Ich habe versucht, Funktionen mit SIFT von OpenCV zu extrahieren