يوم جيد للجميع.
التوت الصغير هو شيء عظيم. استخدمت Raspberry Zero W في مشروعين خلال الأشهر الستة الماضية. رشوة من بساطة النماذج الأولية وطرح الأفكار المختلفة. والآن هنا سؤال اختياري: هل هذا الجهاز سيسحب شبكة تلافيفية كاملة؟ [المفسد - سحب ، ولكن هناك فروق دقيقة مضحكة]. من يهتم بالموضوع - مرحبًا بك. تحذير ، سيكون هناك العديد من القطط!

لماذا الشبكة العصبية التوت؟
بطريقة ما جمعت مصيدة فيديو بسيطة على Raspbery Zero W لمراقبة الحياة الليلية للحيوانات (القطط بشكل رئيسي) في البلد. كان الرمز بسيطًا وعمل جيدًا. للكشف عن صورة فيديو ، تم استخدام كاميرا بإضاءة IR مثل
هذه "Raspberry Pi Night Version Camera" .

يتمثل جوهر الرمز في أخذ إطارين متتاليين ، ومقارنة بكسل بعد بكسل ، وإذا كان عدد وحدات البكسل التي تم تغييرها أكبر من قيمة عتبة معينة ، فابدأ بتسجيل مقطع فيديو مدته 10 ثوانٍ. لن أقدم نص الشفرة في هذا المنشور ، إذا كان شخص ما مهتمًا ، اكتب في التعليقات ، يمكنني وضعه في ما يلي. السمة الرئيسية هي أن تتم مقارنة الإطارين في 0.2 ثانية ، على الأقل للقبض على الأحداث السريعة. حسنًا ، قارن هذه الإطارات بسرعة بالطبع.
ثم جاءت الفكرة لربط شبكة عصبية بسيطة بالخوارزمية بحيث يكون من الممكن تحديد الكائن في الإطار الملتقط وبدء تسجيل الفيديو فقط إذا تم تحديد فئة الكائن بشكل موثوق. من المحتمل أن يؤدي ذلك إلى التخلص من الإيجابيات الكاذبة من فخ الفيديو. يحدث هذا من الأجسام المتحركة (على سبيل المثال ، العشب أو الفروع) أو من الإضاءة الحادة لمشهد الكاميرا (الضوء في النافذة قيد التشغيل أو انطفأ المصباح ، على سبيل المثال).
ما الشبكة لوضعه على التوت؟
لحسن الحظ ، تحت Python المثبت مسبقًا (في حالتي هو 3.5.3) و OpenCV المتاح على نطاق واسع (أستخدم 3.4.3) ، يمكنك وضع أي شبكة تقريبًا. لسوء الحظ ، نظرًا لقدرات الحوسبة المحدودة للجهاز ، فإن قائمة الخيارات صغيرة. في الواقع ، يمكنك الاختيار فقط من خيارات "الضوء":
1. SqueezeNet (نموذج التعليمات البرمجية
هنا ).
2. YOLO Tiny (
هنا ).
3. MobileNet-SSD (
هنا ).
4. MobileNet_v1_224 (يوجد
فيديو رائع
لتشغيل كاشف الأجسام على هذه الشبكة ).
في كل هذه الحالات ، يقوم برشوة الفرصة لاستخدام نموذج تم تدريبه مسبقًا على مجموعات بيانات صلبة ، وبالتالي التخلص من كل الآلام والمخاوف من مجموعة بيانات مستقلة والتدريب اللاحق لشبكة عصبية عليها.
مقدم الطلب رقم 1 مستوحى من
دقة التعرف العالية المزعومة بأحجام متواضعة من عوامل الترجيح. بالإضافة إلى ذلك ، أدى بحث قصير على الإنترنت إلى المدونة الممتازة
Adrian Rosebrock ، التي علقت على الكود بالتفصيل ووصفت العديد من الخيارات لتنفيذ التعلم العميق على Raspberry.
تم استخدام الرمز
من هنا لاختبار قدرات SqueezeNet. يرسل المؤلف الوزن والتمثيل النصي للنموذج إلى البريد الإلكتروني بعد ملء النموذج على الموقع. بالمناسبة ، إذا لم يكن لديك OpenCV مثبتًا ، فيمكنك العثور على خوارزمية الإجراءات في مدونته. بالإضافة إلى ذلك ، هناك أمثلة على "زيادة سرعة" الرمز لتسريع وقت عمل النماذج وأكثر من ذلك بكثير. احترام أدريان ، مورد رائع حقًا.
حسنًا ، لنقم بتشغيل الكود والحصول على نتيجة مذهلة في الصورة الأولى!

القط في الصورة يعرف بالفارسية باحتمال 99٪. في الواقع ، إنه ليس فارسيًا ، ولكنه بريطاني Longhair أو Highlander. ولكن بالنسبة لنموذج يحتوي على 1000 فئة ، يمكنك القول ، ضرب عين الثور. من أجل الراحة ، وضعت النتائج الرئيسية للشبكة العصبية مباشرة في الصورة. هذه هي الفئات الخمسة الأكثر احتمالاً ، الأول هو الأكثر احتمالاً ، والثاني هو التالي الأكثر أهمية ، وهكذا.
بالمناسبة ، يحسب النموذج فئات الكائن على بلادي Zero لمدة 6.5 ثانية. إذا كنت تعتقد أن بيانات Adrian ، فإن الحساب على Raspberry Pi B + في الصور المعطاة في مشاركته (صورة مقر تصفيف الشعر ، الكوبرا والقنديل) سيستغرق حوالي 0.92 ثانية. أعتقد عن طيب خاطر أن النسخة الكاملة من Raspberry تحتوي على 4 نوى في المعالج بعد كل شيء. أعتقد أن الجميع يعرف أن Zero لديه واحد فقط (((
يبدو أنه سيكون عليك نسيان تحديد فئة الكائن في الوقت الحقيقي على الصفر. بالمناسبة ، يجب أن أعترف أن ثانية من الوقت لعمل النموذج على Pi "كامل" ليس أيضًا الحلم النهائي.
ولكن دعونا نستمر في اختبار النموذج.

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

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

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

واو. وهي الآن أجش سيبيري. شيء ما يخبرني أن القطة لا تزال تحتسب)

يبدو أن أحد هذين الشخصين قد تم هدمه بوضوح وهذا ليس قطًا. الآن يتم تعريفها من قبل الشبكة العصبية كمغزل (وإن كان بنسبة 8.5 ٪ فقط) ، لا تزال هناك خيارات أنها بيغل ، أوركا ، ثعبان صخري أو ظربان. ليست قطة ، ولكن المرأة لغزا!

هيا! هذا لا يزال أوركا! نعم ، نعم ، ثدييات بحرية من رتبة الحوت. لسبب ما ، تذكرت الخطوط من الطفولة البعيدة:
"لا يوجد ترتيب في هذه القصة ،
هذا خطأ ، خطأ مطبعي! شخص ما
ضد كل القواعد
في حكاية خرافية ، أعاد ترتيب الحروف ،
مقلية
"KIT" في "CAT" ،
"CAT" على "KIT" ، بل على العكس! ".
يرن غونغ ، يوقف الحكم القتال)

في الجولة الثانية ، مرت القطة ، التي ترتدي نظارة ماكرة ، إلى بلدغ بوسطن باحتمال 34 ٪. أو للفرنسيين. يبدو أن الشبكة العصبية لم تتعافى بالكامل من الهزيمة في الجولة الأولى)

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

إن قدرة القطط على أخذ شكل صندوق مربكة حتى للبشر ، ناهيك عن الشبكة العصبية. قلل الغمر في الصندوق من دقة التعرف بنسبة تصل إلى 40٪.

لذا ، لذلك ... وهذا ، على ما يبدو ، هو استقبال محظور بشكل عام. فأر الكمبيوتر الموجود بجوار القطة يربك الشبكة العصبية تمامًا. الآن القط هو الفأر! )
لذلك ، تم تقديم 11 صورة قطط للشبكة العصبية بأكملها ، تم تحديد 5 منها فقط بشكل صحيح ، علاوة على ذلك ، مع احتمال أكثر من 50٪ في ثلاث حالات فقط. لا تقلل بأي حال من الأحوال عمل مؤلفي SqueezeNet. هذه شبكة صلبة مع فئة واسعة جدًا من الكائنات ومتطلبات موارد منخفضة نسبيًا.
المقال ، بطبيعة الحال ، هزلي بطبيعته ، ولكن يمكن استخلاص استنتاجات واقعية للغاية من البيانات التي تم الحصول عليها. من الضروري استخدام الشبكات العصبية المدربة مسبقًا بعناية كبيرة ، والتحقق منها على الصور الحقيقية للمهمة التي تم التخطيط لها لاستخدام الشبكة العصبية.
فيما يتعلق باختيار الشبكة العصبية المثالية لـ Raspberry - يبقى السؤال مفتوحًا حتى الآن. أكمل التجارب ، إذا كان هناك اهتمام من الجمهور بهذا الموضوع ، فسوف أشارك نتائج المزيد من البحث. إن نتائج الخطوة الأولى كانت مضحكة للغاية لدرجة أنني أردت حقًا مشاركتها.
شكرا للقراءة حتى النهاية. حظا سعيدا ولدينا أسبوع عمل جيد)
UPD: راجع
الجزء الثاني من هذا المنشور للحصول على رمز العمل لتشغيل شبكة عصبية على Raspberry Pi Zero W.