تقييم تشكل الإنسان
قبل بضعة أشهر ، صادفت مشروعًا مثيرًا للاهتمام ومفتوح المصدر على شبكة الإنترنت - افتح الهدف الذي يهدف إلى تقدير صورة الإنسان في الوقت الفعلي على دفق الفيديو. نظرًا لأنشطتي الاحترافية ، كنت مهتمًا بتشغيلها على أحدث جهاز يعمل بنظام iOS من Apple للتحقق من الأداء ومعرفة ما إذا كان ذلك ممكنًا على الإطلاق. كان من المثير للاهتمام أيضًا أن نرى كيف تم تغيير أداء إطار الشبكة العصبية لنظام iOS في السنوات الأخيرة.
مشروع Openpose الأصلي مكتوب بلغة C ++ ولا يستخدم CoreML - إطار الشبكة العصبية على نظام التشغيل iOS. لذلك اضطررت إلى إعادة كتابة جزء أساسي في Swift واستخدام CoreML للقيام بهذا الاستنتاج. دعونا نلقي نظرة على الصورة التالية في كيفية تمثيل جسم الإنسان:

يمكن العثور على مزيد من المعلومات حول نموذج تشكل الإنسان هنا: MPI- تشكل
تظهر النتيجة في الصورة أدناه:
تحضير النموذج
لبدء استخدام إطار العمل ، يلزم إنشاء نموذج ML ML. يعتمد هذا النموذج على نموذج من المشروع المفتوح . لتحضير نموذج ، اتبع الخطوات التالية:
1) تثبيت أدوات Python و CoreML
2) تشغيل النماذج / getModels.sh من Open Pose للحصول على النماذج openpos الأصلية
3) انسخ النماذج / تشكل / mpi / pose_deploy_linevec_faster_4_stages.prototxt إلى النماذج / تشكل / mpi / pose_deploy_linevec_faster_4_stages_fixed_size.protxt
4) تغيير ما يلي في الملف pose_deploy_linevec_faster_4_stages_fixed_size.prototxt:
input_dim: 1 # This value will be defined at runtime -> input_dim: 512 input_dim: 1 # This value will be defined at runtime -> input_dim: 512
5) إنشاء رابط إلى دليل النماذج. دعنا نفترض أن مشروع إطار العمل المفتوح والمشروع المفتوح في الدليل الرئيسي ، فسيكون الأمر التالي لإنشاء رابط هو:
ln -s ~/openpose/models ~/models
6) انتقل إلى ~ / pose / pose / CoreMLModels ثم قم بتشغيل الأمر التالي:
python convertModel.py
يحتوي النص المذكور أعلاه على قيم مضغوطة للملف pose_deploy_linevec_faster_4_stages_fixed_size.prototxt وملف الطراز pose_iter_160000.caffemodel.
يمكن تغييرها إلى طراز آخر ، لكن من فضلك لا تنسَ تغيير ملف .prototxt ليكون له حجم ثابت لصورة الإدخال:
input_dim: XXX - يتوافق مع الإدخال NN.
input_dim: XXX - يتوافق مع ارتفاع إدخال NN.
لا تنس أيضًا تغيير تكوين النموذج PoseModelConfigurationMPI15.inputSize إلى قيمة إدخال محددة واستخدام هذا التكوين بدلاً من التكوين الموجود في الإطار الذي يحدد 512 × 512 كحجم إدخال.
ستنجح أي قيم ولكن يمكن تحقيق أفضل النتائج إذا كانت نسبة العرض إلى الارتفاع تتطابق مع الصورة الأصلية. أيضًا ، يجب أن يؤخذ في الاعتبار أن القيم الأكبر ستؤثر على الأداء بشكل كبير والذي يظهر في قسم الأداء.
تفاصيل إخراج الشبكة العصبية
دعونا نلقي نظرة فاحصة على إخراج NN. إخراج نموذج MPI15 هو مجموعة من المصفوفات مع الأبعاد (input_image_width / 8, input_image_height / 8)
. كل عنصر في المصفوفة لديه نوع تعويم. التعيين بين فهرس المصفوفة في الإخراج والجزء الأساسي:
POSE_MPI_BODY_PARTS { {0, "Head"}, {1, "Neck"}, {2, "RShoulder"}, {3, "RElbow"}, {4, "RWrist"}, {5, "LShoulder"}, {6, "LElbow"}, {7, "LWrist"}, {8, "RHip"}, {9, "RKnee"}, {10, "RAnkle"}, {11, "LHip"}, {12, "LKnee"}, {13, "LAnkle"}, {14, "Chest"}, {15, "Background"} };
نظرًا لأن كل مصفوفة لها حجم ثابت ، فإن الوصول إلى واحدة معينة هو قراءة تافهة من خلال عملية الإزاحة: [الخلفية] = NNOutput [sizeOfTheMatrix * 15]
Heatmaps و PAFs
هناك نوعان من مصفوفات الإخراج في نموذج MPI15. تلك التي تمثل خرائط الحرارة وغيرها التي تمثل PAFs. تقابل كل مصفوفة حرارة جزء مشترك واحد يبلغ 15 في المجموع. تمثل مصفوفات القوات الجوية الباكستانية وصلات الجسم. لكل اتصال الجسم ، هناك مصفوفة X و Y وهو 28 في المجموع (14 + 14). المبلغ الإجمالي للمصفوفات بما في ذلك الخلفية واحد هو 44.
مشروع تجريبي
يحتوي مستودع المشروع أيضًا على مشروع تجريبي "poseDemo" يوضح استخدام الإطار. فيما يلي مصفوفات نتائج NN لصورة إدخال معينة:
المشروع الهدف سيكون عديم الفائدة دون قياسات الأداء. يظهر بوضوح في النتائج أدناه أن شركة Apple حققت زيادة هائلة في أداء محرك NN في الموديلات الأخيرة. علاوة على ذلك ، وفقًا لتوقعات المحللين ، ستقوم Apple بصنع أجهزة NN أسرع في iPhone القادم. نتائج قياسات الأداء موضحة أدناه:
الوقت اللازم لمعالجة إطار واحد (1-2 أشخاص في العرض)
تجدر الإشارة إلى أن جميع الأرقام الموضحة أعلاه يمكن أن تختلف لكل تشغيل معين. أفترض أن هذا يحدث بسبب التحسين الداخلي لـ CoreML.
مصادر الكود
الرابط إلى مستودع جيثب: انقر للتحقق منه
تطبيقات
من المهم أن تلاحظ أن جميع التطبيقات المذكورة أدناه خرجت من الرأس ولم يتم تأكيدها رسميًا من قِبل Apple أو بعض السلطات.
الرعاية الصحية
1) اكتشاف الحالات الشاذة في العمود الفقري البشري على الصور الثابتة:

2) دليل الصحة واللياقة البدنية.
1) اكتشاف ما إذا كان الأشخاص في المنزل ومعرفة ما إذا كانت جميع المعدات مغلقة (الحديد / الأوين).
2) تحديد مكان الأشخاص داخل منطقة المعيشة والقيام بالأتمتة (تشغيل الأنوار / الموسيقى / التلفزيون)
الإضافات لتطبيقات استوديو الفن
1) 2D -> 3D التعيين وتشكل الاستدلال لإعادة بناء تشكل 3D على أساس مصدر 2D
التحسينات والمزيد من التطورات
هناك العديد من التحسينات التي يمكن إجراؤها لزيادة أداء خطوة ما بعد المعالجة ولجعلها أكثر دقة. أيضًا ، قد يكون من المثير للاهتمام الجمع بينه وبين تعيين ثنائي الأبعاد> ثلاثي الأبعاد لإعادة بناء الوضع ثلاثي الأبعاد. قائمة التحسينات الممكنة موضحة أدناه:
1) NMS الأمثل. تطبيق GPU الموازي باستخدام METAL API.
2) استخدم تقريبًا مختلفًا لاتصال المفاصل الأقرب إلى عظام الهيكل العظمي الواقعية. العظام ليست مستقيمة.
3) تنفيذ تصفية أكثر قوة لإخراج تشكل للتخلص من القطع الأثرية.
4) تنفيذ تقدير تشكل على دفق الفيديو
5) 2D -> 3D رسم الخرائط
بالنسبة لأولئك المهتمين بخلفية هذا المشروع و Openpos ، يمكنهم العثور على معلومات مفيدة أدناه:
1) http://posefs1.perception.cs.cmu.edu/Users/ZheCao/Multi-person٪20pose٪20estimation-CMU.pdf
2) https://www.ri.cmu.edu/wp-content/uploads/2017/04/thesis.pdf
3) https://pose.mpi-inf.mpg.de/
بعض المرح
من المثير للاهتمام دائمًا أن نرى كيف سيعمل تطبيق التكنولوجيا على مدخلات غير عادية. وتظهر بعض النتائج المرح أدناه. يرجى ملاحظة كيف تنبأت الشبكة NN بالقدم حيث يتم إخفاءها في الواقع:
استنتاج
في هذه المقالة ، يتم وصف تطبيق iOS لاستنتاج تشكل الإنسان. وفقًا لنتائج الأداء ، من الواضح أن شركة أبل حققت قفزة هائلة في أداء محرك الشبكة العصبية. علاوة على ذلك ، فإن طرز iPhone التالية ستسمح على الأرجح بالاستنتاج في الوقت الفعلي. الجمع بين ذلك مع إعادة الإعمار تشكل 2D-> 3D يفتح إمكانية في استنتاج تشكل الإنسان 3D في الوقت الحقيقي على دفق الفيديو!