Dieser Artikel wurde aus unserem Blog nachgedruckt.
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.)
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.
Mac book Pro (2.7 GHz Intel Core i5,16 GB 1867 MHz DDR3) Python2.7 (Chainer, Numpy)
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.)
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')
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
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