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

و ... عملت كل شيء!
لقد صنعنا ميزة جديدة في وقت قصير. بالإضافة إلى ذلك ، كانت دقيقة وسريعة. كان الجميع راضين: حصل المستخدم على الوحدة الفكرية المرغوبة ، وحصل المطورون على تجربة رائعة ، والشركة - المبيعات.
كانت هذه الممارسة بمثابة بداية
نهج جديد لتطوير الوظائف الذكية في Macroscop: لقد أصبحنا أكثر سهولة في مقابلة مستخدمينا. ويعطي نتائجها.
أهم شيء هو تحديد الحاجة الحقيقية للمستخدم وصياغة المهمة معه بوضوح. عندما يتعلق الأمر بالتطوير السريع للوظائف المخصصة (سنطلق عليها وظائف سريعة في ما يلي) ، من الضروري تحديد المتطلبات: ما يريد المستخدم رؤيته في النهاية ، وما يجب التركيز عليه. لأنه ، بشكل مشروط ، يحتاج المرء إلى العمل أولاً بالتأكيد ، والآخر لجعله يبدو رائعًا. عندما نتولى وظيفة سريعة ، لا نتحدث عن حقيقة أنها ستعمل في النهاية في أي ظروف بدقة 100٪.
نتعهد باختبار الفكرة نفسها ومحاولة إنشاء شيء يعمل بشكل مناسب ومقبول للاستخدام على كائن واحد محدد. وعندها فقط ، إذا نجحت ، نقوم بتحسين وتقديم منتج عالمي بأداء جيد.
عندما تكون الأهداف والأولويات واضحة ، نأخذ التنمية. في غضون فترة زمنية قصيرة ، قمنا بتطوير نموذج أولي يمكن للمستخدم تقييمه بالفعل. ونعطيها للاختبار. إذا كان ما قمنا به مرتبطًا بما يحتاجه المستخدم وبشكل عام يحب ، والطريقة التي استخدمناها في التطوير لم تستنفد نفسها بعد ولديها احتمالات لتحسين الوظيفة ، فإننا نذهب أبعد من ذلك. إذا تبين أنها خاطئة تمامًا وخاطئة تمامًا ، فإننا نغلق المشروع. وبما أن هذا يحدث في مرحلة مبكرة ، فإننا لا نفقد شيئًا تقريبًا.
مع هذا النهج ، يجب على المطورين والمستخدمين
الذهاب إلى أقصى حد ممكن تجاه بعضهم البعض. يُطلب من المستخدم أيضًا أن يتم تضمينه في العملية: من الضروري اختبار النموذج الأولي بعناية على كاميرات مختلفة وفي ظروف مختلفة ، وتجربة إعدادات مختلفة والضغط على أزرار مختلفة ، وتقديم ملاحظات شاملة: ما هو مناسب ، وما هو غير مناسب ، وما لا يعمل بالطريقة التي يقيم بها الدقة ، كم يتم تحميل الخادم ، إلخ.
في البداية ، نحن نلبي حاجة عميل معين ، ولكن حتى قبل بدء العمل ، نقدر
كيف يمكن أن تصبح هذه الوظيفة
عالمية في المستقبل ، وعدد الأشخاص الذين يمكن أن تساعدهم في حل مشاكلهم. وفي المستقبل ، نقوم بتكييف الوظيفة السريعة بحيث تكون مفيدة وقابلة للتطبيق في أكبر عدد ممكن من أنظمة الفيديو.
هل تتذكر كيف بدأ كل شيء؟ .. (ج)
أول وظيفة سريعة بالنسبة لنا كانت
وحدة حساب قائمة الانتظار . بشكل عام ، كان لدينا من قبل ، لكن شروط التطبيق كانت محدودة: عملت الوحدة فقط في إسقاط واحد ، عندما بدت الكاميرا بدقة من الأعلى إلى الأسفل. بمجرد أن يتم الاتصال بنا من قبل مستخدم يحتاج إلى حساب الأشخاص في قائمة الانتظار في ظل ظروف مختلفة بشكل أساسي - عندما تنظر الكاميرا إلى قائمة الانتظار بشكل قطري (مباشرة وأعلى قليلاً).
من هذا المنظور ، يمكن أن تحسب وحدة Macroscop
وفي هذا - تعلمتلقد أحب كل ماكروسكوب ، لكنه افتقر إلى الوظيفة العزيزة. كان المشروع واعدًا جدًا ، وكان المستخدم على استعداد
للتعاون معنا بكل الطرق ، إذا ظهرت هذه الوحدة فقط ، ويمكن تثبيت البرنامج على الكائن. قررنا عدم تفويت الفرصة ، وبدأنا في التطور.
في النسخة الأخيرة من الوحدة ، تم حل مهمة عد الأشخاص من خلال الأساليب الكلاسيكية للرؤية الحاسوبية ، والتي فرضت قيودًا خطيرة على شروط الاستخدام. ولكن في إطار المهمة الجديدة ، كان على الوحدة أن تتعلم عد الأشخاص في ظروف مختلفة بشكل أساسي وأكثر صعوبة.
تم تقسيم مجموعة تطوير الوظائف الفكرية إلى 3 مجموعات فرعية ، وبدأ كل منها في تجربة طريقته الخاصة. استندت جميعها على استخدام الشبكات العصبية.
أول واحد حاولت نقله إلى الوحدة النمطية لعد الأشخاص في طوابير إلى البنية التحتية
للكاشف الذي طورناه لعدم
وجود الخوذات (انظر
المقالة حول كيفية محاولتنا استخدام تقنيات الشبكات العصبية الحديثة للعثور على الخوذات على رؤوس الناس ). بدا هذا النهج منطقيًا جدًا: يعمل كاشف الخوذ في مرحلة معينة من العمل على حل مشكلة مماثلة.
حاولت المجموعة الثانية تطبيق
شبكة عصبية انحدارية . تحسب عدد الأشخاص في الصورة ، لكنها لا تحدد كائنات معينة ، مما يجعل من الصعب التحكم بها. عند التدريب على شبكة عصبية انحدارية ، يتم تقديم صورة ويشار إلى عدد الأشخاص الموجودين ، وتعطي الشبكة العصبية رقمًا واحدًا - عدد الأشخاص الذين عثروا عليهم. ملء العينة بالصور الجديدة ، سعينا لتدريبها على العد بشكل صحيح.
للأسف ، رفضنا كلتا الطريقتين ، نظرًا لأن دقة العداد الذي تم إنشاؤه على أساسهما كانت منخفضة.
اختبرت المجموعة الثالثة
كاشفًا معروفًا
للأغراض العامة إلى حد ما ، والذي يمكنه اكتشاف مجموعة متنوعة من الأشياء في الوقت الفعلي. إنه يعرف كيف يبحث عن ألف نوع من الأشياء المختلفة ، لكنه لا يحل مشكلتنا بكل ميزاتها. لقد وضعنا اللمسات الأخيرة على هذا الكاشف ، ودربناه على عينتنا الواسعة النطاق وخلقنا نتيجة جيدة - مواجهة أشخاص بدقة مقبولة. قاموا بتحسينه مع تحديدات جديدة ، وفي النهاية حصلوا على نموذج أولي ، والذي لم يكن من العار بالفعل إعطاء المستخدم للاختبار. وكان تقييمه ... إيجابيا! وقال إن
الحل بشكل عام تنافسي بالفعل ، لكن الدقة لم تكن عالية بعد - فقط 60-70٪.
تم إنشاء الإصدار الأول من عداد قائمة الانتظار باستخدام مقاطع من هذا المستخدم في المقام الأول. لقد حللنا المشكلة -
للعمل معه على وجه التحديد - لكننا أدركنا أنه إذا دربنا الشبكة العصبية وصنعنا وحدة نمطية لمشروع واحد محدد ، فلن يكون هناك مزيد من التوسع. لذلك ، تم إجراء المزيد من التدريب على عينة أكثر شمولية ، مما أدى إلى زيادة الدقة حتى بدون التحسينات الداخلية العالمية. ثم بدأنا العمل على تغليف الوحدة النمطية - تحسين الواجهة ، و ثمل الإعدادات المختلفة ، ولفت الانتباه إلى سهولة الاستخدام والمنطق. في موازاة ذلك ، قمنا بإصلاح عدد من الأخطاء في النموذج الأولي الخاص بنا (بالمناسبة ، قام أحدهم بتسريع الوحدة بشكل غير متوقع بمقدار 7 مرات) ، واكتشفنا كيفية تقليل استهلاك وحدة المعالجة المركزية ، وربط العمل على بطاقة الفيديو. ونتيجة لذلك ، حصلنا على وحدة موضوعية تعمل بشكل جيد وسهل الإدارة والتي تم تحليلها بسرعة ، وأنتجت نتائج دقيقة ، وعرفت كيفية العمل على بطاقة فيديو دون تحميل المعالج.
كان مستخدمنا سعيدا فقط! ذهب لوضع النسخة الجديدة في متاجره ، وأكد أن كل شيء يعمل بشكل جيد من الناحية العملية. تمكنا من تحقيق دقة 85-90٪ (في المواقف التي لا يتداخل فيها الأشخاص في قائمة الانتظار تمامًا ، ويمكن تمييزهم).
بالطبع ، خلال عملية التطوير ، لم يكن كل شيء يسير بسلاسة ، على سبيل المثال ، بين النموذج الأولي والحل المثبت الآن على الموقع ، كان هناك إصدار فاشل يعمل بشكل أسوأ من الإصدار السابق. ولكن بناءً على تجربتها ، أدركنا ما يجب البحث عنه عند الاختبار ، وتعلمنا عددًا من ميزات الإطارات المستخدمة. وبالنظر إلى ذلك ، قمنا بعمل وحدة نهائية رائعة ، ثم بناءً عليها - وهي وظيفة سريعة أخرى.

نهاية سعيدة
الآن تطبيق الوحدة لإحصاء الأشخاص في قائمة انتظار الإصدار الجديد يتم توسيعه إلى متاجر أخرى لهذا المستخدم. والنسخة النهائية - دخلت حيز الإنتاج ودخلت نسخة Macroscop ، التي يتم تحضيرها للنشر. بالمناسبة ، كان المستخدم مسرورًا بالنتيجة والطريقة العامة للعمل التي جاء بها طلب آخر - لعمل
كاشف فارغ على الرف . وأخذناها مرة أخرى ، وقمنا بها مرة أخرى (لكن هذه قصة مختلفة تمامًا).
إذا لخص ، ثم للمقارنة: استغرق تطوير وصقل النسخة القديمة من الوحدة لحساب عدد الأشخاص في قائمة الانتظار (قبل 4 سنوات) حوالي
8 أشهر . لقد صنعنا الوحدة الجديدة في
شهرين (تم تسليم أول نموذج عمل للمستخدم في غضون 2-3 أسابيع).
حتى الآن هذا ليس سوى اختبار للقلم وفقط في إطار اتجاه واحد - تطوير الوظائف الفكرية. بشكل عام ، نتمسك بنهج أكثر صرامة وشمولًا لتطوير المنتجات - مع التخطيط ، والعديد من عمليات التحقق من الأفكار ، وتحليل الطلب ، والاختبار المتعمق. ما لم يتغير هو ممارسة إنشاء Macroscop (سواء كان تطوير نواة أو وحدات تحليل الفيديو) بالتعاون الوثيق مع المستخدمين.
لا يوجد يقين بأن نهج الوظائف السريعة يجب أن يطبق على أساس مستمر وداخل القسم بأكمله ، لكننا الآن نحصل على تجربة حقيقية للتطور السريع ، والمستخدمون الذين يتم القيام بذلك لهم فوائد حقيقية من المنتج.
على أي حال ، بالنسبة لنا ، فقد توصلنا إلى عدة قواعد ، والامتثال لها هو نصف نجاح تطوير الوظائف السريعة:
- حاول مقابلة المستخدم ، ولكن لا تنس أهدافك الخاصة: قم بتنفيذ مشاريع يمكن توسيعها ، واستثمر في شيء سيكون مفيدًا على المدى الطويل.
- انتقل إلى الجزء السفلي من المهام والاحتياجات الحقيقية للمستخدم ، وحدد الأولويات.
- تجنيد دعم المستخدم. إذا كان مستعدًا للتواصل بنشاط واختبار وإعطاء تعليقات وتوفير البيانات اللازمة (فيديو من كائن حقيقي ، على سبيل المثال) ، فهناك كل فرصة للتطور بشكل جيد وسريع.
- لا تخف من الفشل وتعامله كأحد النتائج المحتملة.
- لا تحاول تطوير شيء فريد من البداية ، ولكن استخدم التجربة الحالية إن أمكن: في حالتنا ، حاول استخدام أجزاء من الخوارزميات من الوحدات التي تم تنفيذها بالفعل. وحتى إذا اتضح أن الحل الناتج قابل للتطبيق - خصص وقتًا للبحث والتخصيص.