يحتوي هذا المستودع على رمز التدريب للورقة في الوقت الفعلي في الوقت الفعلي للتشكل على وحدة المعالجة المركزية: Openwose خفيفة الوزن. يعمل هذا العمل بشكل كبير على تحسين النهج المفتوح للوصول إلى الاستدلال في الوقت الفعلي على وحدة المعالجة المركزية مع انخفاض دقة مستوحاة. يكتشف هيكلًا عظميًا (يتكون من نقاط المفاتيح والاتصالات بينهما) لتحديد الوضع البشري لكل شخص داخل الصورة. قد يحتوي الوضع على ما يصل إلى 18 نقطة مفاتيح: الأذنين ، العيون ، أنف ، الرقبة ، الكتفين ، المرفقين ، المعصمين ، الوركين ، الركبتين ، والكاحلين. على COCO 2017 ، حدد التحقق من صحة Keypoint Condaction هذا الرمز 40 ٪ AP لاستدلال المقياس المفرد (لا يوجد قلب أو أي ما بعد المعالجة). يمكن استنساخ النتيجة باستخدام هذا المستودع. يتداخل هذا الريبو بشكل كبير مع https://github.com/opencv/openvino_training_extensions ، ومع ذلك يحتوي فقط على الكود اللازم لتقدير الوضع البشري.

تحقق من عملنا الجديد على تقدير دقيق (لا يزال سريعًا) ، والذي احتل المرتبة العاشرة في CVPR'19.
تحقق من تقديرنا ثلاثي الأبعاد خفيفة الوزن ، والذي يعتمد على تقدير ثلاثي الأبعاد متعدد الشخصيات من ورق RGB أحادي اللقطة وهذا العمل.
<COCO_HOME> .pip install -r requirements.txt يتكون التدريب من 3 خطوات (بالنظر إلى قيم AP لمجموعة بيانات التحقق الكاملة):
قم بتنزيل الأوزان MobiLenet V1 المدربة مسبقًا mobilenet_sgd_68.848.pth.tar من: https://github.com/marvis/pytorch-mobilenet (خيار SGD). إذا لم ينجح هذا ، فقم بتنزيل من GoogleRive.
تحويل التعليقات التوضيحية للقطار بالتنسيق الداخلي. Run python scripts/prepare_train_labels.py --labels <COCO_HOME>/annotations/person_keypoints_train2017.json . سوف تنتج prepared_train_annotation.pkl مع تحويلها في تعليقات تنسيق داخلي.
[اختياري] للتحقق من الصحة السريعة ، يوصى بعمل مجموعة فرعية من مجموعة بيانات التحقق من الصحة. Run python scripts/make_val_subset.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json . سوف تنتج val_subset.json مع التعليقات التوضيحية فقط لـ 250 صورة عشوائية (من أصل 5000).
للتدريب من أوزان Mobilenet ، قم بتشغيل 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
بعد ذلك ، للتدريب من نقطة التفتيش من الخطوة السابقة ، قم بتشغيل 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
أخيرًا ، للتدريب من نقطة التفتيش من خطوة سابقة و 3 مراحل صقل في الشبكة ، قم بتشغيل 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 . أخذنا نقطة التفتيش بعد 370000 تكرار كأخير.
لم نقم بإجراء أفضل اختيار نقطة تفتيش في أي خطوة ، لذلك يمكن تحقيق نتيجة مماثلة بعد عدد أقل من التكرارات.
نلاحظ هذا الخطأ بأقصى عدد من الملفات المفتوحة ( ulimit -n ) يساوي 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
للتخلص منه ، قم بزيادة الحد إلى العدد الأكبر ، على سبيل المثال 65536 ، تشغيل في المحطة: ulimit -n 65536
python val.py --labels <COCO_HOME>/annotations/person_keypoints_val2017.json --images-folder <COCO_HOME>/val2017 --checkpoint-path <CHECKPOINT> يتوقع النموذج صورة طبيعية (يعني = [128 ، 128 ، 128] ، مقياس = [1/256 ، 1/256 ، 1/256]) بتنسيق BGR مستوي. يتوفر مسبقًا على نموذج Coco على: https://download.01.org/opencv/openvino_training_extensions/models/human_pose_estimation/checkpoint_iter_370000.pth ، يحتوي على 40 ٪ من AP على مجموعة التحقق من COCO (38.6 ٪ من AP على Val subet ).
python scripts/convert_to_onnx.py --checkpoint-path <CHECKPOINT> . وهي تنتج 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 . هذا ينتج نموذجًا human-pose-estimation.xml human-pose-estimation.bin يمكن العثور على C ++ Demo في مجموعة أدوات Intel® OpenVino ™ ، النموذج المقابل هو human-pose-estimation-0001 . يرجى اتباع التعليمات الرسمية لتشغيلها.
نحن نقدم Python Demo فقط لمعاينة النتائج السريعة. من فضلك ، النظر في العرض التوضيحي C ++ للحصول على أفضل أداء. لتشغيل Python Demo من كاميرا ويب:
python demo.py --checkpoint-path <path_to>/checkpoint_iter_370000.pth --video 0 إذا كان هذا يساعد بحثك ، فيرجى الاستشهاد بالورقة:
@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}
}