Este repositorio contiene código de capacitación para la estimación de pose de Paper Time Real Time Real Multi-Person en CPU: OpenPose liviano. Este trabajo optimiza en gran medida el enfoque OpenPose para alcanzar la inferencia en tiempo real en la CPU con una caída de precisión neglable. Detecta un esqueleto (que consiste en puntas clave y conexiones entre ellos) para identificar poses humanas para cada persona dentro de la imagen. La pose puede contener hasta 18 puntas de keyas: orejas, ojos, nariz, cuello, hombros, codos, muñecas, caderas, rodillas y tobillos. En Coco 2017, la validación de detección de keypoint establezca este código alcanza el 40% AP para la inferencia de una escala única (sin flip o ningún procesamiento posterior). El resultado se puede reproducir utilizando este repositorio. Este repositorio se superpone significativamente con https://github.com/opencv/openvino_training_extensions, sin embargo, contiene solo el código necesario para la estimación de pose humana.

Echa un vistazo a nuestro nuevo trabajo sobre la estimación de pose de una sola persona precisa (y aún rápida), que ocupó el puesto 10 en el desafío CVPR'19 en la persona.
Consulte nuestra estimación ligera de pose 3D, que se basa en una estimación de pose 3D de una sola persona de papel monocular RGB y este trabajo.
<COCO_HOME> .pip install -r requirements.txt La capacitación consta de 3 pasos (dados valores AP para el conjunto de datos de validación completa):
Descargue los pesos de MobileNet V1 pre-entrenado mobilenet_sgd_68.848.pth.tar de: https://github.com/marvis/pytorch-mobilenet (opción SGD). Si esto no funciona, descargue desde Googledrive.
Convertir anotaciones de trenes en formato interno. Ejecute python scripts/prepare_train_labels.py --labels <COCO_HOME>/annotations/person_keypoints_train2017.json . Producirá prepared_train_annotation.pkl con convertido en anotaciones de formato interno.
[Opcional] Para una validación rápida se recomienda realizar un subconjunto del conjunto de datos de validación. Ejecute python scripts/make_val_subset.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json . Producirá val_subset.json con anotaciones solo para 250 imágenes aleatorias (de 5000).
Para entrenar desde pesas de MobileNet, ejecute 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
A continuación, para entrenar desde el punto de control desde el paso anterior, ejecute 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
Finalmente, para entrenar desde el punto de control desde el paso anterior y 3 etapas de refinamiento en la red, ejecute 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 . Tomamos el punto de control después de 370000 iteraciones como la final.
No realizamos la mejor selección de punto de control en ningún paso, por lo que se puede lograr un resultado similar después de menos número de iteraciones.
Observamos este error con el número máximo de archivos abiertos ( ulimit -n ) es igual a 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
Para deshacerse de él, aumente el límite a un número mayor, por ejemplo, 65536, se ejecute en la terminal: ulimit -n 65536
python val.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json --images-folder <COCO_HOME>/val2017 --checkpoint-path <CHECKPOINT> El modelo espera una imagen normalizada (media = [128, 128, 128], escala = [1/256, 1/256, 1/256]) en formato plano BGR. El modelo pre-Entrenado en Coco está disponible en: https://download.01.org/opencv/openvino_training_extensions/models/human_pose_estimation/checkpoint_iter_370000.pth, tiene el 40% del conjunto de validación de AP en Coco (38.6% de AP en el Val Subspets ).
python scripts/convert_to_onnx.py --checkpoint-path <CHECKPOINT> . Produce 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 . Esto produce modelos human-pose-estimation.xml y pesa human-pose-estimation.bin . La demostración de C ++ se puede encontrar en el kit de herramientas Intel® OpenVino ™, el modelo correspondiente es human-pose-estimation-0001 . Siga la instrucción oficial para ejecutarla.
Proporcionamos una demostración de Python solo para la vista previa de resultados rápidos. Por favor, considere la demostración de C ++ para el mejor rendimiento. Para ejecutar la demostración de Python desde una cámara web:
python demo.py --checkpoint-path <path_to>/checkpoint_iter_370000.pth --video 0 Si esto ayuda a su investigación, cite el documento:
@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}
}