Este repositório contém código de treinamento para o papel em tempo real em tempo real, estimativa de pose de várias pessoas na CPU: UPIR UNSO LIVO. Este trabalho otimiza fortemente a abordagem de uso aberto para atingir a inferência em tempo real na CPU com queda de precisão negligente. Ele detecta um esqueleto (que consiste em pontos -chave e conexões entre eles) para identificar poses humanas para todas as pessoas dentro da imagem. A pose pode conter até 18 pontos -chave: orelhas, olhos, nariz, pescoço, ombros, cotovelos, pulsos, quadris, joelhos e tornozelos. No Coco 2017, a Validação da Detecção de Teclados Defina este código Achives 40% AP para a inferência de escala única (sem flip ou qualquer pós-processamento feito). O resultado pode ser reproduzido usando este repositório. Esse repositório se sobrepõe significativamente a https://github.com/opencv/openvino_training_extensions, no entanto, contém exatamente o código necessário para a estimativa de pose humana.

Confira nosso novo trabalho sobre a estimativa precisa (e ainda rápida) da pose de uma pessoa, que classificou 10º no desafio da aparência de CVPR'19.
Confira nossa estimativa leve de pose 3D, baseada na estimativa de pose 3D de várias pessoas de tiro único no papel monocular RGB e neste trabalho.
<COCO_HOME> pasta.pip install -r requirements.txt O treinamento consiste em 3 etapas (dados valores de AP para o conjunto de dados de validação total):
Faça o download dos pesos mobilenet v1 pré-treinados mobilenet_sgd_68.848.pth.tar de: https://github.com/marvis/pytorch-mobilenet (opção SGD). Se isso não funcionar, faça o download do Googledrive.
Converter anotações de trem em formato interno. Execute python scripts/prepare_train_labels.py --labels <COCO_HOME>/annotations/person_keypoints_train2017.json . Produzirá prepared_train_annotation.pkl com convertido em anotações de formato interno.
[Opcional] Para validação rápida, é recomendável fazer o subconjunto de dados de validação. Execute python scripts/make_val_subset.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json . Produzirá val_subset.json com anotações apenas para 250 imagens aleatórias (de 5000).
Para treinar a partir de pesos mobilenet, execute 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
Em seguida, para treinar do ponto de verificação da etapa anterior, execute 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 treinar do ponto de verificação das etapas anteriores e 3 estágios de refinamento na rede, execute 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 o posto de controle após 370000 iterações como a final.
Não realizamos a melhor seleção de ponto de verificação em nenhuma etapa, portanto, o resultado semelhante pode ser alcançado após menos número de iterações.
Observamos esse erro com o número máximo de arquivos abertos ( ulimit -n ) é 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 se livrar dele, aumente o limite para um número maior, por exemplo, 65536, execute no terminal: ulimit -n 65536
python val.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json --images-folder <COCO_HOME>/val2017 --checkpoint-path <CHECKPOINT> O modelo espera imagem normalizada (média = [128, 128, 128], escala = [1/256, 1/256, 1/256]) no formato planar BGR. O modelo pré-treinado no Coco está disponível em: https://download.01.org/opencv/openvino_training_extensions/models/human_pose_estimation/checkpoint_iter_370000.th, possui 40% do conjunto de validação de coco (38.6% do AP no Val Subs ).
python scripts/convert_to_onnx.py --checkpoint-path <CHECKPOINT> . Produz- 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 . Isso produz model human-pose-estimation.xml e pesos human-pose-estimation.bin em formato de ponto flutuante de precisão única (FP32). A demonstração C ++ pode ser encontrada no kit de ferramentas Intel® OpenVino ™, o modelo correspondente é human-pose-estimation-0001 . Siga a instrução oficial para executá -lo.
Fornecemos uma demonstração em Python apenas para a visualização rápida dos resultados. Por favor, considere a demonstração do C ++ para obter o melhor desempenho. Para executar a demonstração do Python de uma webcam:
python demo.py --checkpoint-path <path_to>/checkpoint_iter_370000.pth --video 0 Se isso ajudar sua pesquisa, cite o artigo:
@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}
}