[PYTHON] J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer

Cet article est reproduit à partir de Notre blog.

introduction

Cette fois, je vais lancer OpenPose sur Mac en utilisant chainer. (Ce sera une partie de la fonction pour générer la carte thermique de détection au lieu de l'ensemble)

    1. Télécharger le modèle entraîné de Caffe
  1. Charger le modèle de Caffe depuis Chainer
    1. Appliquer des images au réseau de Chainer

Il a déjà été rapporté qu'OpenPose, un algorithme d'estimation de squelette utilisant une caméra monoculaire annoncé au CVPR2017, réalisera un traitement en temps réel sur Ubuntu et Windows. Cependant, étant donné que le GPU est requis ou que Mac ne le prend pas en charge, je me suis demandé s'il pouvait être exécuté sur Mac ou CPU, je vais donc charger le modèle Caffe avec Chainer et exécuter uniquement la partie DNN de la première moitié.

Environnement d'exécution (devrait fonctionner sous Linux)

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

travail

    1. Télécharger le modèle entraîné de Caffe

Téléchargez l'exécutable binaire pour Windows à ici. Il contient le fichier de paramètres Caffe. (Si vous êtes intéressé par les liens directs, téléchargez et décompressez la démo portable OpenPose 1.0. Au milieu de https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation.md. Veuillez passer de 1.)

  1. Charger le modèle de Caffe depuis Chainer

Cette fois, nous utiliserons un modèle COCO qui estime 18 squelettes. (Le modèle MPI peut être fait par la même procédure) Le modèle Caffe est stocké dans le répertoire suivant.

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

Lisez ceci du chainer.

from chainer.functions import caffe
func = caffe.CaffeFunction('pose_iter_440000.caffemodel')
    1. Appliquer des images au réseau de Chainer

OpenPose_demo_1.0.1/models/pose/coco/pose_deploy_linevec.prototxt Si vous lisez, la configuration du réseau est écrite, et si vous regardez la dernière couche de sortie

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

Le premier nœud de sortie est défini avec le nom Mconv7_stage6_L2. (Mconv7_stage6_L1 ressemble plus à un os)

Ainsi, en spécifiant ceci dans la couche de sortie de func, vous pouvez obtenir la carte de sortie de (1,19, h, w).

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

Le tableau numpy d'images a une taille de 0,0 à 1,0 (1, 4, hauteur, largeur) et des valeurs au lieu de 0 à 255. Notez également que le dtype doit être np.float32. (Je ne sais pas si RGBA est censé être utilisé à la place de RGB, mais je tape dans le 4ème avec 0 rempli)

↓ Cette image j'ai essayé 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"},
    }

La carte thermique montre la probabilité d'existence de chaque partie du corps écrite dans la structure ci-dessus. Cela prend environ 10 secondes par feuille, mais cela fonctionne sur le processeur, donc il semble être plus polyvalent.

Recommended Posts

J'ai essayé d'exécuter la partie DNN d'OpenPose avec le processeur Chainer
J'ai essayé d'entraîner la fonction péché avec chainer
J'ai couru le tutoriel TensorFlow avec des commentaires (classification du texte des critiques de films)
J'ai essayé d'effacer la partie négative de Meros
J'ai essayé d'exécuter l'exemple de code du module Ansible
J'ai essayé de visualiser les données de course du jeu de course (Assetto Corsa) avec Plotly
J'ai essayé de trouver l'entropie de l'image avec python
J'ai essayé la "correction gamma" de l'image avec Python + OpenCV
J'ai essayé de trouver la moyenne de plusieurs colonnes avec TensorFlow
J'ai essayé d'exécuter Movidius NCS avec python de Raspberry Pi3
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé d'exécuter prolog avec python 3.8.2.
J'ai essayé de gratter le classement du calendrier de l'avent Qiita avec Python
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part2
J'ai essayé d'automatiser l'arrosage du pot avec Raspberry Pi
J'ai étudié avec Kaggle Start Book basé sur kaggle [Partie 1]
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 1)
[AWS / Tello] J'ai essayé de faire fonctionner le drone avec ma voix Part1
J'ai essayé d'agrandir la taille du volume logique avec LVM
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python
J'ai écrit le fonctionnement de base de Pandas dans Jupyter Lab (partie 2)
J'ai essayé d'exécuter le didacticiel TensorFlow avec des commentaires (_TensorFlow_2_0_Introduction pour les débutants)
J'ai essayé le serveur asynchrone de Django 3.0
J'ai essayé d'implémenter DeepPose avec PyTorch PartⅡ
J'ai essayé de jouer avec l'image avec Pillow
765 J'ai essayé d'identifier les trois familles professionnelles par CNN (avec Chainer 2.0.0)
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé d'extraire automatiquement les mouvements des joueurs Wiire avec un logiciel
J'ai essayé d'apprendre l'angle du péché et du cos avec le chainer
J'ai essayé d'analyser la négativité de Nono Morikubo. [Comparer avec Posipa]
J'ai essayé de rationaliser le rôle standard des nouveaux employés avec Python
J'ai essayé de visualiser le texte du roman "Weather Child" avec Word Cloud
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé la reconnaissance manuscrite des caractères des runes avec scikit-learn
J'ai essayé de "lisser" l'image avec Python + OpenCV
J'ai essayé des centaines de millions de SQLite avec python
J'ai essayé la fonction de tableau croisé dynamique des pandas
J'ai essayé l'analyse par grappes de la carte météo
J'ai essayé la reconnaissance d'image de CIFAR-10 avec Keras-Learning-
J'ai essayé de "différencier" l'image avec Python + OpenCV
J'ai essayé la reconnaissance d'image de CIFAR-10 avec la reconnaissance d'image Keras-
J'ai essayé de sauvegarder les données avec discorde
J'ai essayé Flask avec des conteneurs distants de VS Code
J'ai essayé la séparation linéaire super facile avec Chainer
J'ai essayé de corriger la forme trapézoïdale de l'image
J'ai essayé de "binariser" l'image avec Python + OpenCV
J'ai essayé d'exécuter faiss avec python, Go, Rust
J'ai essayé d'exécuter Deep Floor Plan avec Python 3.6.10.
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé de jouer avec la calculatrice avec tkinter
J'ai essayé de vectoriser les paroles de Hinatazaka 46!
J'ai essayé de visualiser facilement les tweets de JAWS DAYS 2017 avec Python + ELK
J'ai essayé la détection d'objets avec YOLO v3 (TensorFlow 2.1) sur le GPU de windows!
L'histoire de la fabrication de soracom_exporter (j'ai essayé de surveiller SORACOM Air avec Prometheus)
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
J'ai essayé d'envoyer automatiquement la littérature du nouveau virus corona à LINE avec Python
J'ai essayé de faire quelque chose comme un chatbot avec le modèle Seq2Seq de TensorFlow
J'ai essayé d'extraire des fonctionnalités avec SIFT d'OpenCV