Repositori ini berisi kode pelatihan untuk makalah Estimasi Pose Multi-Person 2D Real-Time pada CPU: OpenPose ringan. Pekerjaan ini sangat mengoptimalkan pendekatan openpose untuk mencapai inferensi real-time pada CPU dengan penurunan akurasi yang diabaikan. Ini mendeteksi kerangka (yang terdiri dari titik tombol dan koneksi di antara mereka) untuk mengidentifikasi pose manusia untuk setiap orang di dalam gambar. Pose mungkin mengandung hingga 18 keypoints: telinga, mata, hidung, leher, bahu, siku, pergelangan tangan, pinggul, lutut, dan pergelangan kaki. Pada Coco 2017 Keypoint Detection Validasi Set Kode ini mencapai 40% AP untuk inferensi skala tunggal (tidak ada flip atau pasca-pemrosesan yang dilakukan). Hasilnya dapat direproduksi menggunakan repositori ini. Repo ini secara signifikan tumpang tindih dengan https://github.com/opencv/openvino_training_extensions, namun hanya berisi kode yang diperlukan untuk estimasi pose manusia.

Lihatlah pekerjaan baru kami tentang estimasi pose orang tunggal yang akurat (dan masih cepat), yang peringkat 10 pada CVPR'19 Look-Into-Person Challenge.
Lihatlah estimasi pose 3D ringan kami, yang didasarkan pada estimasi pose 3D multi-orang tunggal dari kertas RGB monokular dan pekerjaan ini.
<COCO_HOME> .pip install -r requirements.txt Pelatihan terdiri dari 3 langkah (diberikan nilai AP untuk dataset validasi penuh):
Unduh mobileNet pra-terlatih v1 bobot mobilenet_sgd_68.848.pth.tar dari: https://github.com/marvis/pytorch-mobilenet (opsi SGD). Jika ini tidak berhasil, unduh dari GoogledRive.
Konversi anotasi kereta dalam format internal. Jalankan python scripts/prepare_train_labels.py --labels <COCO_HOME>/annotations/person_keypoints_train2017.json . Ini akan menghasilkan prepared_train_annotation.pkl dengan dikonversi dalam anotasi format internal.
[Opsional] Untuk validasi cepat disarankan untuk membuat subset dari dataset validasi. Jalankan python scripts/make_val_subset.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json . Ini akan menghasilkan val_subset.json dengan anotasi hanya untuk 250 gambar acak (dari 5000).
Untuk melatih dari bobot MobileNet, jalankan 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
Next, to train from checkpoint from previous step, run 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
Finally, to train from checkpoint from previous step and 3 refinement stages in network, run 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 . Kami mengambil pos pemeriksaan setelah 370000 iterasi sebagai yang terakhir.
Kami tidak melakukan pemilihan pos pemeriksaan terbaik pada langkah apa pun, sehingga hasil yang serupa dapat dicapai setelah lebih sedikit jumlah iterasi.
Kami mengamati kesalahan ini dengan jumlah maksimum file terbuka ( ulimit -n ) sama dengan 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
Untuk menyingkirkannya, tingkatkan batas menjadi jumlah yang lebih besar, misalnya 65536, dijalankan di terminal: ulimit -n 65536
python val.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json --images-folder <COCO_HOME>/val2017 --checkpoint-path <CHECKPOINT> Model ini mengharapkan gambar yang dinormalisasi (rata -rata = [128, 128, 128], skala = [1/256, 1/256, 1/256]) dalam format planar bgr. Pra-terlatih pada model coco tersedia di: https://download.01.org/opencv/openvino_training_extensions/models/human_pose_estimation/checkpoint_iter_370000.pth, memiliki 40% AP pada set validasi coco (38.6% dari AP pada AP pada katup AP).
python scripts/convert_to_onnx.py --checkpoint-path <CHECKPOINT> . Itu menghasilkan 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 . Ini menghasilkan model human-pose-estimation.xml dan bobot-bobot human-pose-estimation.bin dalam format titik floating presisi tunggal (FP32). Demo C ++ dapat ditemukan di Toolkit Intel® OpenVino ™, model yang sesuai adalah human-pose-estimation-0001 . Silakan ikuti instruksi resmi untuk menjalankannya.
Kami memberikan demo Python hanya untuk pratinjau hasil cepat. Tolong, pertimbangkan demo C ++ untuk kinerja terbaik. Untuk menjalankan demo Python dari webcam:
python demo.py --checkpoint-path <path_to>/checkpoint_iter_370000.pth --video 0 Jika ini membantu penelitian Anda, silakan kutip kertas:
@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}
}