7.12. المعالجات اللاحقة¶
لا تُصدر شبكة الكشف مربعات. إنها تُصدر موتراً واحداً أو أكثر يعتمد تخطيطه على البنية التي دُرّب عليها النموذج -- موتر ثنائي الأبعاد من التنبؤات المرشحة لكاشف من عائلة YOLO، أو زوج موترَين (boxes, scores) لكاشف MediaPipe، أو قائمة مسطّحة من إحداثيات النقاط المفتاحية لشبكة وضعيات. لا يستطيع التطبيق قراءة أي من هذه مباشرةً؛ فما يريده -- قائمة بالمربعات، أو قائمة بالنقاط المفتاحية، أو تفصيل لكل فئة -- يجب فكّ ترميزه من الموتر الخام.
ذلك المفكِّك هو معالج لاحق. تجمعها الوحدة ml.postprocessing حسب النظام البيئي المصدري.
7.12.1. Darknet¶
تفكّ ml.postprocessing.darknet ترميز نماذج من عصر YOLO الأصلي. أدخل YOLO v2 فكرتَي الشبكة والمرساة اللتين ورثهما معظم الكواشف اللاحقة بشكل أو بآخر، لذا فإن تخطيط الإصدار v2 هو أنظف نقطة بداية.
يبدأ YOLO v2 بتقسيم الصورة المدخلة إلى شبكة خشنة -- تخطيط 13 في 13 للمدخل القياسي ذي 416 بكسلاً، وأصغر للنماذج الأصغر -- ويدرّب الشبكة بحيث تكون كل خلية شبكية مسؤولة عن كشف أي كائن يقع مركزه داخلها. يعكس التخطيط المكاني للموتر الناتج تخطيط المدخل: موضع واحد في الناتج لكل خلية في الصورة.
عند كل خلية شبكية، لا تتنبأ الشبكة بمربع من العدم. إنها تختار من بين عدة أشكال مرجعية مختارة مسبقاً تُسمى المراسي -- أزواج (width, height) ثابتة مُشتقّة دون اتصال عبر تجميع أحجام المربعات في مجموعة التدريب بحيث تغطي الكائنات النمطية المتوقّع أن يراها النموذج. مهمة الشبكة عند كل خلية هي أن تتنبأ، لكل مرساة، بإزاحة صغيرة لمركز المربع داخل الخلية، ومقياس على عرض المرساة وارتفاعها، ودرجة الكائنية (احتمال وجود أي شيء هناك)، ومتجه احتمال لكل فئة. لذا فإن شبكة 13 في 13 بالمراسي الافتراضية الخمس و20 فئة تُصدر 13 * 13 * 5 * (4 + 1 + 20) = 21,125 رقماً لكل استدلال.
تفكّ YoloV2 ترميز ذلك التخطيط: تمشي عبر الخلايا، وتطبّق إزاحات كل مرساة ومقاييسها لاستعادة إحداثيات المربع المطلقة، وتجمع الكائنية مع احتمال الفئة للحصول على درجة لكل فئة، وتُعتِب، وتدفع الناجين إلى NMS. تأخذ الفئة وسيطة بانٍ anchors= عندما يكون النموذج قد دُرّب على جدول مراسي مخصص وترجع إلى افتراضي مدمج خلاف ذلك. تُشحَن في الوحدة الفرعية نفسها متغيّرات مُضبَطة لمجموعات فئات محددة.
7.12.2. Ultralytics¶
تفكّ ml.postprocessing.ultralytics ترميز أجيال YOLO الأحدث. تقرأ YoloV8 ناتجاً عمودي الترتيب حيث كل عمود هو تنبؤ مرساة واحد يحمل إحداثيات المربع ومتجه درجات لكل فئة -- قناة الكائنية التي حملتها مخرجات YOLO السابقة قد أُسقطت في v8، وتقف درجات الفئات وحدها. يخطو شرح YOLOv8 المفصّل عبر فك الترميز موتراً موتراً. تُشحَن في الوحدة الفرعية نفسها إصدارات أقدم من عصر Ultralytics للنماذج المدرّبة على تخطيطاتها.
7.12.3. MediaPipe¶
تفكّ ml.postprocessing.mediapipe ترميز عائلة Google خفيفة الوزن العاملة على الجهاز. BlazeFace هو كاشف الوجوه المغطّى في hello-blazeface: كاشف سريع قائم على المراسي يُصدر مربعات وست إحداثيات معالم لكل وجه، تُعاد على هيئة صفوف (box, score, keypoints) مع إرفاق المعالم بكل مربع بدلاً من قائمة مخرجات منفصلة. تُشحَن إلى جانبه نماذج كشف اليد والمعالم والوضعيات من العائلة نفسها وتتبع شكل الإعادة ذاته بالنقاط المفتاحية المرفقة.
7.12.4. اختيار واحد¶
يُحدِّد المعالجَ اللاحق الصحيح البنيةُ التي دُرّب عليها النموذج، لا ما يريده التطبيق. لا تُفكَّك ترميز .tflite من نوع YOLOv8 بشكل صحيح إلا عبر YoloV8؛ ولا تُفكَّك ترميز .tflite من نوع BlazeFace إلا عبر BlazeFace. اختيار المعالج اللاحق جزء من اختيار النموذج. عندما لا يُمثَّل بنيةُ نموذجٍ ما بمعالج لاحق مشحون، فإن كتابة معالجك الخاص أمر مباشر.
شبكات التصنيف هي الاستثناء. فموترها الناتج الوحيد هو بالفعل ما يريده التطبيق -- قائمة بدرجات لكل فئة -- ولا حاجة إلى معالج لاحق. تحميل النموذج دون postprocess= وقراءة نتيجة التنبؤ على هيئة ndarray مسطّح هو المسار الصحيح، كما غطّى إدخال/إخراج الموتر.