Ce référentiel contient un code de formation pour le papier en temps réel 2D Multi-Person Estimation sur CPU: OpenPose léger. Ce travail optimise fortement l'approche ouverte pour atteindre l'inférence en temps réel sur le CPU avec une baisse de précision négligente. Il détecte un squelette (qui se compose de points clés et de connexions entre eux) pour identifier les poses humaines pour chaque personne à l'intérieur de l'image. La pose peut contenir jusqu'à 18 points clés: oreilles, yeux, nez, cou, épaules, coudes, poignets, hanches, genoux et chevilles. Sur la validation de détection de point de clé Coco 2017, ce code réussit 40% AP pour l'inférence à échelle unique (pas de flip ou tout post-traitement effectué). Le résultat peut être reproduit à l'aide de ce référentiel. Ce repo chevauche considérablement https://github.com/opencv/openvino_training_extensions, mais ne contient que le code nécessaire pour l'estimation de la pose humaine.

Consultez nos nouveaux travaux sur l'estimation de la pose d'une seule personne, précise (et toujours rapide), qui s'est classée 10 e sur CVPR'19 Look-Into-Person Challenge.
Consultez notre estimation de pose 3D légère, qui est basée sur une estimation de pose 3D multi-personnes à tirs à partir du papier RVB monoculaire et de cette œuvre.
<COCO_HOME> .pip install -r requirements.txt La formation se compose de 3 étapes (compte tenu des valeurs AP pour l'ensemble de données de validation complet):
Téléchargez les poids Mobilenet V1 pré-formés mobilenet_sgd_68.848.pth.tar de: https://github.com/marvis/pytorch-mobilenet (option SGD). Si cela ne fonctionne pas, téléchargez depuis GoogledRive.
Convertir les annotations de train au format interne. Exécutez python scripts/prepare_train_labels.py --labels <COCO_HOME>/annotations/person_keypoints_train2017.json . Il produira prepared_train_annotation.pkl avec des annotations au format interne.
[Facultatif] Pour la validation rapide, il est recommandé de faire un sous-ensemble de jeu de données de validation. Exécutez python scripts/make_val_subset.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json . Il produira val_subset.json avec des annotations juste pour 250 images aléatoires (sur 5000).
Pour s'entraîner à partir de poids Mobilenet, exécutez python train.py --train-images-folder <COCO_HOME>/train2017/ --prepared-train-labels prepared_train_annotation.pkl --val-labels val_subset.json --val-images-folder <COCO_HOME>/val2017/ --checkpoint-path <path_to>/mobilenet_sgd_68.848.pth.tar --from-mobilenet
Ensuite, pour s'entraîner à partir de Checkpoint à partir de l'étape précédente, exécutez python train.py --train-images-folder <COCO_HOME>/train2017/ --prepared-train-labels prepared_train_annotation.pkl --val-labels val_subset.json --val-images-folder <COCO_HOME>/val2017/ --checkpoint-path <path_to>/checkpoint_iter_420000.pth --weights-only
Enfin, pour s'entraîner à partir du point de contrôle à partir de l'étape précédente et 3 étapes de raffinement dans le réseau, exécutez python train.py --train-images-folder <COCO_HOME>/train2017/ --prepared-train-labels prepared_train_annotation.pkl --val-labels val_subset.json --val-images-folder <COCO_HOME>/val2017/ --checkpoint-path <path_to>/checkpoint_iter_280000.pth --weights-only --num-refinement-stages 3 . Nous avons pris le point de contrôle après 370000 itérations comme dernière.
Nous n'avons pas effectué la meilleure sélection de points de contrôle à aucune étape, donc un résultat similaire peut être obtenu après moins de nombre d'itérations.
Nous observons cette erreur avec un nombre maximum de fichiers ouverts ( ulimit -n ) équivaut à 1024:
File "train.py", line 164, in <module>
args.log_after, args.val_labels, args.val_images_folder, args.val_output_name, args.checkpoint_after, args.val_after)
File "train.py", line 77, in train
for _, batch_data in enumerate(train_loader):
File "/<path>/python3.6/site-packages/torch/utils/data/dataloader.py", line 330, in __next__
idx, batch = self._get_batch()
File "/<path>/python3.6/site-packages/torch/utils/data/dataloader.py", line 309, in _get_batch
return self.data_queue.get()
File "/<path>/python3.6/multiprocessing/queues.py", line 337, in get
return _ForkingPickler.loads(res)
File "/<path>/python3.6/site-packages/torch/multiprocessing/reductions.py", line 151, in rebuild_storage_fd
fd = df.detach()
File "/<path>/python3.6/multiprocessing/resource_sharer.py", line 58, in detach
return reduction.recv_handle(conn)
File "/<path>/python3.6/multiprocessing/reduction.py", line 182, in recv_handle
return recvfds(s, 1)[0]
File "/<path>/python3.6/multiprocessing/reduction.py", line 161, in recvfds
len(ancdata))
RuntimeError: received 0 items of ancdata
Pour vous en débarrasser, augmentez la limite à un plus grand nombre, par exemple 65536, exécutez dans le terminal: ulimit -n 65536
python val.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json --images-folder <COCO_HOME>/val2017 --checkpoint-path <CHECKPOINT> Le modèle attend une image normalisée (moyenne = [128, 128, 128], échelle = [1/256, 1/256, 1/256]) au format BGR planaire. Le modèle pré-entraîné sur Coco est disponible sur: https://download.01.org/opencv/openvino_training_extensions/models/human_pose_estimation/checkpoint_iter_370000.pth, il a 40% d'AP sur le jeu de validation COCO (38,6% d'AP sur le sous-ensemble Val).
python scripts/convert_to_onnx.py --checkpoint-path <CHECKPOINT> . Il produit human-pose-estimation.onnx .python <OpenVINO_INSTALL_DIR>/deployment_tools/model_optimizer/mo.py --input_model human-pose-estimation.onnx --input data --mean_values data[128.0,128.0,128.0] --scale_values data[256] --output stage_1_output_0_pafs,stage_1_output_1_heatmaps . Cela produit un modèle d' human-pose-estimation.xml et pondera human-pose-estimation.bin au format à virgule flottante à une seule précision (FP32). La démo C ++ peut être trouvée dans la boîte à outils Intel® OpenVino ™, le modèle correspondant est human-pose-estimation-0001 . Veuillez suivre l'instruction officielle pour l'exécuter.
Nous fournissons une démo python juste pour l'aperçu des résultats rapide. Veuillez considérer la démo C ++ pour les meilleures performances. Pour exécuter la démo Python à partir d'une webcam:
python demo.py --checkpoint-path <path_to>/checkpoint_iter_370000.pth --video 0 Si cela aide vos recherches, veuillez citer le document:
@inproceedings{osokin2018lightweight_openpose,
author={Osokin, Daniil},
title={Real-time 2D Multi-Person Pose Estimation on CPU: Lightweight OpenPose},
booktitle = {arXiv preprint arXiv:1811.12004},
year = {2018}
}