كشف الكائن ، كشف الكائن

بالنظر إلى صورة أو دفق فيديو ، يمكن لنموذج اكتشاف الكائن تحديد أي مجموعة معروفة من الكائنات قد تكون موجودة وتقديم معلومات حول مواضعها داخل الصورة.

على سبيل المثال ، تُظهر لقطة الشاشة هذه للتطبيق النموذجي كيف تم التعرف على كائنين وتوضيح مواضعهما:

لقطة شاشة لمثال Android

البدء

لمعرفة كيفية استخدام اكتشاف الكائنات في تطبيق الهاتف المحمول ، استكشف أمثلة على التطبيقات والأدلة .

إذا كنت تستخدم نظامًا أساسيًا بخلاف Android أو iOS ، أو إذا كنت معتادًا بالفعل على TensorFlow Lite APIs ، فيمكنك تنزيل نموذج اكتشاف الكائن المبدئي والتسميات المصاحبة له.

تنزيل نموذج بدء التشغيل باستخدام البيانات الوصفية

لمزيد من المعلومات حول البيانات الوصفية والحقول المرتبطة (على سبيل المثال: labels.txt ) راجع قراءة البيانات الأولية من النماذج

إذا كنت تريد تدريب نموذج اكتشاف مخصص لمهمتك الخاصة ، فراجع تخصيص النموذج .

بالنسبة لحالات الاستخدام التالية ، يجب عليك استخدام نوع مختلف من النماذج:

  • توقع العلامة الفردية التي تمثلها الصورة على الأرجح (انظر تصنيف الصورة )
  • توقع تكوين صورة ، على سبيل المثال الموضوع مقابل الخلفية (انظر التقسيم )

أمثلة على التطبيقات والأدلة

إذا كنت مستخدمًا جديدًا لـ TensorFlow Lite وتعمل بنظام Android أو iOS ، فإننا نوصي باستكشاف الأمثلة التالية للتطبيقات التي يمكن أن تساعدك على البدء.

ذكري المظهر

يمكنك الاستفادة من واجهة برمجة التطبيقات الجاهزة من مكتبة المهام TensorFlow Lite لدمج نماذج اكتشاف الكائنات في بضعة أسطر من التعليمات البرمجية. يمكنك أيضًا إنشاء خط أنابيب مخصص للاستدلال باستخدام TensorFlow Lite Interpreter Java API .

يوضح مثال Android أدناه تنفيذ كلتا الطريقتين مثل lib_task_api و lib_interpreter ، على التوالي.

شاهد مثال Android

iOS

يمكنك دمج النموذج باستخدام TensorFlow Lite Interpreter Swift API . انظر مثال iOS أدناه.

شاهد مثال iOS

نموذج الوصف

يصف هذا القسم التوقيع الخاص بنماذج Single-Shot Detector المحولة إلى TensorFlow Lite من TensorFlow Object Detection API .

يتم تدريب نموذج اكتشاف الكائن على اكتشاف وجود وموقع فئات متعددة من الكائنات. على سبيل المثال ، قد يتم تدريب النموذج بالصور التي تحتوي على قطع مختلفة من الفاكهة ، جنبًا إلى جنب مع ملصق يحدد فئة الفاكهة التي يمثلونها (على سبيل المثال ، تفاحة أو موزة أو فراولة) ، والبيانات التي تحدد مكان ظهور كل عنصر في الصورة.

عندما يتم تقديم صورة إلى النموذج لاحقًا ، فإنها ستخرج قائمة بالأشياء التي يكتشفها ، وموقع الصندوق المحيط الذي يحتوي على كل كائن ، والنتيجة التي تشير إلى الثقة في أن الاكتشاف كان صحيحًا.

توقيع الإدخال

يأخذ النموذج صورة كمدخل.

لنفترض أن الصورة المتوقعة هي 300 × 300 بكسل ، بثلاث قنوات (أحمر ، أزرق ، وأخضر) لكل بكسل. يجب إدخال هذا إلى النموذج كمخزن مؤقت مسطح بقيمة 270000 بايت (300 × 300 × 3). إذا كان النموذج محددًا كميًا ، يجب أن تكون كل قيمة بايت واحد يمثل قيمة بين 0 و 255.

يمكنك إلقاء نظرة على رمز التطبيق الخاص بنا كمثال لفهم كيفية إجراء هذه المعالجة المسبقة على Android.

توقيع الإخراج

يُخرج النموذج أربع مصفوفات ، موصولة إلى الفهارس من 0 إلى 4. تصف المصفوفات 0 و 1 و 2 N من الكائنات المكتشفة ، مع وجود عنصر واحد في كل مصفوفة يتوافق مع كل كائن.

فِهرِس اسم وصف
0 المواقع مصفوفة متعددة الأبعاد لـ [N] [4] قيم الفاصلة العائمة بين 0 و 1 ، المصفوفات الداخلية تمثل المربعات المحيطة في النموذج [أعلى ، يسار ، أسفل ، يمين]
1 الطبقات صفيف من N عدد صحيح (الناتج كقيم فاصلة عائمة) كل منها يشير إلى فهرس تسمية الفئة من ملف الملصقات
2 درجات صفيف من قيم الفاصلة العائمة N بين 0 و 1 يمثل احتمال اكتشاف فئة
3 عدد عمليات الكشف قيمة عدد صحيح لـ N

على سبيل المثال ، تخيل أن نموذجًا قد تم تدريبه على اكتشاف التفاح والموز والفراولة. عند تقديم صورة ، ستخرج عددًا محددًا من نتائج الكشف - في هذا المثال ، 5.

فصل نتيجة موقع
تفاحة 0.92 [18 ، 21 ، 57 ، 63]
موز 0.88 [100 ، 30 ، 180 ، 150]
الفراولة 0.87 [7 ، 82 ، 89 ، 163]
موز 0.23 [42 ، 66 ، 57 ، 83]
تفاحة 0.11 [6 ، 42 ، 31 ، 58]

درجة الثقة

لتفسير هذه النتائج ، يمكننا إلقاء نظرة على النتيجة والموقع لكل كائن تم اكتشافه. النتيجة عبارة عن رقم بين 0 و 1 يشير إلى الثقة في أن الكائن قد تم اكتشافه بالفعل. كلما اقترب الرقم من 1 ، زادت ثقة النموذج.

اعتمادًا على طلبك ، يمكنك تحديد عتبة الفصل التي سيتم تجاهل نتائج الاكتشاف التي تحتها. بالنسبة للمثال الحالي ، الحد المعقول هو درجة 0.5 (أي احتمال بنسبة 50٪ أن يكون الاكتشاف صحيحًا). في هذه الحالة ، سيتم تجاهل آخر عنصرين في المصفوفة لأن درجات الثقة هذه أقل من 0.5:

فصل نتيجة موقع
تفاحة 0.92 [18 ، 21 ، 57 ، 63]
موز 0.88 [100 ، 30 ، 180 ، 150]
الفراولة 0.87 [7 ، 82 ، 89 ، 163]
موز 0.23 [42 ، 66 ، 57 ، 83]
تفاحة 0.11 [6 ، 42 ، 31 ، 58]

يجب أن يعتمد الحد الفاصل الذي تستخدمه على ما إذا كنت تشعر براحة أكبر مع الإيجابيات الخاطئة (الكائنات التي تم تحديدها بشكل خاطئ ، أو مناطق الصورة التي تم تحديدها بشكل خاطئ على أنها كائنات عندما لا تكون كذلك) ، أو السلبيات الكاذبة (الأشياء الأصلية التي هي غاب لأن ثقتهم كانت منخفضة).

على سبيل المثال ، في الصورة التالية ، تم تعريف الكمثرى (وهو ليس كائنًا تم تدريب النموذج على اكتشافه) خطأً على أنه "شخص". هذا مثال على نتيجة إيجابية خاطئة يمكن تجاهلها من خلال اختيار حد مناسب. في هذه الحالة ، فإن القطع 0.6 (أو 60٪) من شأنه أن يستبعد بشكل مريح الإيجابية الزائفة.

لقطة شاشة لمثال Android تظهر نتيجة إيجابية خاطئة

موقع

لكل كائن تم اكتشافه ، سيعيد النموذج مصفوفة من أربعة أرقام تمثل مستطيلًا محيطًا يحيط بموضعه. بالنسبة لنموذج البداية المقدم ، يتم ترتيب الأرقام على النحو التالي:

[ أعلى، اليسار، الأسفل، حقا ]

تمثل القيمة العليا مسافة الحافة العلوية للمستطيل من أعلى الصورة بالبكسل. تمثل القيمة اليسرى مسافة الحافة اليسرى من يسار الصورة المدخلة. تمثل القيم الأخرى الحواف السفلية واليمنى بطريقة مماثلة.

معايير الأداء

يتم إنشاء أرقام معايير الأداء الخاصة بنموذج البداية الخاص بنا باستخدام الأداة الموضحة هنا .

اسم النموذج حجم النموذج جهاز GPU وحدة المعالجة المركزية
COCO SSD MobileNet الإصدار الأول 27 ميغا بايت Pixel 3 (Android 10) 22 مللي ثانية 46 مللي ثانية *
Pixel 4 (Android 10) 20 مللي ثانية 29 مللي ثانية *
iPhone XS (iOS 12.4.1) 7.6 مللي ثانية 11 مللي ثانية **

* 4 خيوط مستخدمة.

** خيطان مستخدمان على iPhone للحصول على أفضل نتيجة أداء.

تخصيص النموذج

نماذج مدربة مسبقًا

يمكن العثور على نماذج الاكتشاف المحسّنة للجوّال مع مجموعة متنوعة من خصائص زمن الوصول والدقة في Detection Zoo . يتبع كل واحد منهم توقيعات الإدخال والإخراج الموضحة في الأقسام التالية.

تحتوي معظم ملفات مضغوطة التنزيل على ملف model.tflite . إذا لم يكن هناك واحد ، فيمكن إنشاء TensorFlow Lite المسطح باستخدام هذه التعليمات . يمكن أيضًا تحويل نماذج SSD من TF2 Object Detection Zoo إلى TensorFlow Lite باستخدام الإرشادات الواردة هنا . من المهم ملاحظة أنه لا يمكن تحويل نماذج الاكتشاف مباشرةً باستخدام محول TensorFlow Lite ، حيث إنها تتطلب خطوة وسيطة لإنشاء نموذج مصدر سهل الاستخدام للجوّال. تؤدي البرامج النصية المرتبطة أعلاه هذه الخطوة.

تحتوي كل من البرامج النصية للتصدير TF1 و TF2 على معلمات يمكنها تمكين عدد أكبر من كائنات الإخراج أو معالجة لاحقة أبطأ وأكثر دقة. الرجاء استخدام --help مع البرامج النصية لرؤية قائمة شاملة بالوسيطات المدعومة.

في الوقت الحالي ، يتم تحسين الاستدلال على الجهاز مع طرز SSD فقط. يتم الآن التحقيق في دعم أفضل للهياكل الأخرى مثل CenterNet و EfficientDet.

كيف تختار نموذجًا للتخصيص؟

يأتي كل نموذج بدقة خاصة به (يتم قياسها بواسطة قيمة mAP) وخصائص زمن الوصول. يجب عليك اختيار الطراز الذي يعمل بشكل أفضل لحالة الاستخدام والأجهزة المقصودة. على سبيل المثال ، تعد طرز Edge TPU مثالية للاستدلال على Google Edge TPU على Pixel 4.

يمكنك استخدام أداة قياس الأداء الخاصة بنا لتقييم النماذج واختيار الخيار الأكثر كفاءة المتاح.

نماذج صقل على البيانات المخصصة

يتم تدريب النماذج المدربة مسبقًا التي نقدمها على اكتشاف 90 فئة من الكائنات. للحصول على قائمة كاملة بالفئات ، راجع ملف الملصقات في البيانات الأولية للنموذج .

يمكنك استخدام تقنية تعرف باسم نقل التعلم لإعادة تدريب نموذج للتعرف على الفئات غير الموجودة في المجموعة الأصلية. على سبيل المثال ، يمكنك إعادة تدريب النموذج لاكتشاف أنواع متعددة من الخضروات ، على الرغم من وجود خضروات واحدة فقط في بيانات التدريب الأصلية. للقيام بذلك ، ستحتاج إلى مجموعة من صور التدريب لكل من الملصقات الجديدة التي ترغب في تدريبها. الطريقة الموصى بها هي استخدام مكتبة TensorFlow Lite Model Maker التي تبسط عملية تدريب نموذج TensorFlow Lite باستخدام مجموعة بيانات مخصصة ، مع بضعة أسطر من الأكواد. يستخدم التعلم النقل لتقليل كمية بيانات التدريب المطلوبة والوقت. يمكنك أيضًا التعلم من Few-shot Detection Colab كمثال على ضبط نموذج مدرب مسبقًا مع بعض الأمثلة.

للضبط الدقيق باستخدام مجموعات بيانات أكبر ، ألق نظرة على هذه الأدلة لتدريب النماذج الخاصة بك باستخدام TensorFlow Object Detection API: TF1 ، TF2 . بمجرد تدريبهم ، يمكن تحويلهم إلى تنسيق متوافق مع TFLite مع التعليمات الواردة هنا: TF1 ، TF2