كيفية تطبيق التعليم عن بعد بالقياس إلى مشكلة من شارع إلى متجر

لنبدأ بتعريف مشكلة الشارع إلى المتجر - تحديد عنصر الأزياء في صورة المستخدم والعثور عليه في متجر عبر الإنترنت. هل سبق لك أن رأيت شخصًا ما في الشارع وفكرت: "واو ، إنه فستان جميل ، أتساءل أين يمكنني شراءه؟" لكن بالنسبة لي ، كانت مهمة تعلم تقنيات القياس عن بعد مهمة رائعة. آمل أن تجدها ممتعة للغاية.

بيانات

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

فيما يلي قائمة الفئات التي استخدمتها للتخريد:

  • فساتين
  • بلوزات وقمصان
  • هوديس وبلوزات
  • البلوزات
  • جاكيتات و أمبير؛ المعاطف

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

يمكنك العثور على الكود الذي استخدمته للحصول على جميع المعلومات حول عنصر واحد (يتم قصه أكثر مما نحتاج لمهمتنا) عن طريق الرابط https://github.com/movchan74/street_to_shop_experiments/blob/master/get_item_info.py.

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

أخيرًا ، سيكون لدينا مجموعتان من الصور لكل عنصر: صور من بائع (عنوان url الميداني لكل عنصر أولي ['ألوان']) وصور من مستخدمين (حقل imgs لكل عنصر أولي ['ملاحظات']).

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

عظيم! حصلنا على البيانات. ومع ذلك ، فإن مجموعة البيانات التي تم جمعها صاخبة:

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

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

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

التعلم عن بعد متري

واحدة من أكثر طرق التعلم عن بعد قياسًا هي الخسارة الثلاثية:

حيث max (x، 0) هي وظيفة المفصلة ، d (x، y) هي وظيفة المسافة بين x و y ، F (x) عبارة عن شبكة عصبية عميقة ، M هي الهامش ، a هي المرساة ، p هي الموجبة نقطة ، ن هي النقطة السلبية.

F (a) ، F (p) ، F (n) هي نقاط في الفضاء ذي الأبعاد العالية (الزخارف) التي تنتجها شبكة عصبية عميقة. تجدر الإشارة إلى أن حفلات الزفاف غالباً ما تحتاج إلى تطبيع حتى يكون طول الوحدة ، على سبيل المثال ، || x || = 1 ، من أجل أن تكون قوية للإضاءة وتغييرات التباين ولإستقرار التدريب. ينتمي المرساة والعينات الإيجابية إلى نفس الفئة ، والعينة السلبية هي مثيل لفئة أخرى.

وبالتالي فإن الفكرة الرئيسية للخسارة الثلاثية هي فصل حفلات الزوج الإيجابي (مرساة وإيجابية) عن زخارف الزوج السالب (مرساة وسلبية) بهامش مسافة M.

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

واحدة من أكثر الطرق شيوعًا للاختيار الثلاثي هي التعدين السلبي الصعب:

يمكن أن يؤدي اختيار أصعب العناصر السلبية في الممارسة العملية إلى حدوث تدني في الحجم المحلي في بداية التدريب. على وجه التحديد ، يمكن أن ينتج عنه نموذج مطوي (أي F (x) = 0). من أجل التخفيف من ذلك ، يمكننا استخدام التعدين السلبي شبه الصعب.

العينات السلبية شبه الصلبة بعيدة عن المرساة عن العينة الموجبة ولكنها لا تزال صلبة (تنتهك القيد الثلاثي) لأنها تقع داخل الهامش M.

شروط لثلاثية مع عينة سلبية شبه الصعب

هناك طريقتان لإنشاء عينات سلبية شبه صلبة (صلبة): عبر الإنترنت وغير متصل.

  • عبر الإنترنت يعني أننا نختار عينات من مجموعة بيانات القطار بشكل عشوائي على أنها مجموعة صغيرة ونحدد ثلاثة توائم من عينات بداخلها. ومع ذلك ، نحتاج إلى الحصول على حجم صغير للدفعة الصغيرة للطريقة عبر الإنترنت. هذا غير ممكن في حالتي لأن لديّ GTX 1070 واحد فقط مع ذاكرة وصول عشوائي 8 جيجا بايت.
  • في الأسلوب غير المتصل بالشبكة ، نحتاج إلى التوقف عن التدريب بعد مرور بعض الوقت ، والتنبؤ بالزخارف لبعض العينات ، وتحديد ثلاثة توائم وتدريب النموذج باستخدام هذه التوائم الثلاثة. هذا يعني أننا نحتاج إلى التمرير إلى الأمام مرتين ولكنه ثمن الطريقة غير المتصلة بالإنترنت.

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

اليسار: صورة المستخدم ، إلى اليمين: صورة البائع

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

التنفيذ

لتنفيذ أفكاري وللقيام بالتجربة السريعة ، استخدمت مكتبة Keras مع Tensorflow backend.

لقد اخترت طراز Inception V3 كقاعدة CNN لطرازي. كالعادة ، قمت بتهيئة CNN باستخدام أوزان ImageNet. لقد أضفت طبقتين متصلتين بالكامل بعد التجميع الشامل مع L2- التطبيع في نهاية الشبكة. حجم التضمين هو 128.

نحتاج أيضًا إلى تنفيذ وظيفة الخسارة الثلاثية. نمرر المرساة ، العينات الإيجابية / السلبية كدفعة صغيرة واحدة ونقسمها إلى 3 تنسورات داخل وظيفة الفقد. وظيفة المسافة تربيع المسافة الإقليدية.

وتجميع نموذج:

نتائج تجريبية

نتائج الاسترجاع. العمود الأول - الاستعلام (صورة المستخدم) ، 5 التالي - صور البائع الأكثر شيوعًا.

يتم قياس الأداء من حيث الاستدعاء عند K (R @ K).

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

لذلك لدينا صورة الاستعلام وقائمة من صور البائع الأكثر مماثلة. إذا كانت هناك صورة البائع المقابلة في K الأكثر صورًا مماثلة ، فعندئذ نرجع 1 لهذا الاستعلام آخر بإرجاع 0. الآن نحن بحاجة إلى جعلها مع صورة لكل مستخدم في مجموعة التحقق من الصحة وإيجاد متوسط ​​الدرجات من كل استعلام. سيكون R @ K.

كما قلت من قبل ، قمت بتنظيف كمية صغيرة من صور المستخدم من الصور المزعجة. لذلك قمت بقياس جودة النموذج في مجموعتي التحقق من الصحة: ​​مجموعة التحقق الكامل ومجموعة فرعية من الصور النظيفة فقط.

R @ K لبيانات التحقق من الصحة

النتائج أبعد ما تكون عن المثالية ، هناك العديد من الأشياء التي يجب القيام بها:

  • نظف صور المستخدم من الضوضاء. فعلت بالفعل الخطوة الأولى في هذا الاتجاه عن طريق تنظيف مجموعة صغيرة.
  • دمج العناصر بشكل أكثر دقة (على الأقل في مجموعة التحقق من الصحة).
  • تقليل الفجوة المجال. أفترض أنه يمكن القيام بذلك عن طريق زيادة مجال معين (على سبيل المثال زيادة الإضاءة) وباستخدام طرق متخصصة (مثل هذا https://arxiv.org/abs/1409.7495).
  • تطبيق آخر تقنية التعلم عن بعد متري. لقد جربت هذا https://arxiv.org/abs/1703.07464 ، ولكنه يعمل بشكل أسوأ في حالتي.
  • جمع المزيد من البيانات بالطبع.

تجريبي ، رمز ونموذج المدربين

لقد قدمت عرضًا تجريبيًا للنموذج. يمكنك التحقق من ذلك هنا: http://vps389544.ovh.net:5555/. يمكنك تحميل صورتك الخاصة للبحث أو استخدام صورة عشوائية من مجموعة التحقق من الصحة.

الكود والنموذج المدربين: https://github.com/movchan74/street_to_shop_experiments

شكرا للقراءة. إذا كنت تستمتع بالمقال ، فيرجى إخبارنا بالتصفيق. إذا كنت تريد المزيد من المعلومات ، يمكنك الاتصال معي على LinkedIn.