HyperAI

تعرف على تفاصيل تنفيذ MobileNetV3 في TorchVision في مقال واحد

منذ 4 أعوام
معلومة
Yang Bai
特色图像

يضيف TorchVision v0.9 سلسلة من النماذج الملائمة للأجهزة المحمولة.يمكن استخدامه للتعامل مع مهام مثل التصنيف واكتشاف الهدف والتجزئة الدلالية.

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

الهدف من هذه المقالة هو تقديم التفاصيل الفنية للنموذج التي لم يتم توثيقها في الأوراق والمستودعات الأصلية.

هندسة الشبكات

إن تنفيذ بنية MobileNetV3 يتبع بشكل صارم الإعدادات المذكورة في الورقة الأصلية.يدعم تخصيص المستخدم ويوفر تكوينات مختلفة لتصنيف المباني واكتشاف الهدف والتجزئة الدلالية للهياكل الأساسية.تصميمها الهيكلي مشابه لـ MobileNetV2، وكلاهما يتشاركان نفس العناصر الأساسية.

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

معلمات التكوين

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

عرض متعدد  المعلمة هي مضاعف يحدد عدد خطوط الأنابيب النموذجية. القيمة الافتراضية هي 1. عن طريق ضبط القيمة الافتراضية، يمكنك تغيير عدد المرشحات التلافيفية، بما في ذلك الطبقات الأولى والأخيرة. عند التنفيذ، تأكد من أن عدد المرشحات مضاعف لـ 8. هذه خدعة لتحسين الأجهزة تعمل على تسريع عملية تحويل العمليات إلى متجهات.

ذيل مخفض  يتم استخدام المعلمة بشكل أساسي لتحسين سرعة التشغيل، مما يؤدي إلى تقليل عدد خطوط الأنابيب في الوحدة الأخيرة من الشبكة إلى النصف. غالبًا ما يتم استخدام هذا الإصدار في نماذج اكتشاف الكائنات والتجزئة الدلالية. وفقًا للورقة البحثية ذات الصلة بـ MobileNetV3، فإن استخدام معلمة Reduced_tail يمكن أن يقلل من زمن انتقال 15% دون التأثير على الدقة.

متوسع  تؤثر المعلمات بشكل أساسي على آخر ثلاث وحدات InvertedResidual من النموذج. يمكن تحويل التفاف العمق لهذه الوحدات إلى التفاف Atrous، والذي يستخدم للتحكم في حجم خطوة الإخراج للوحدة وتحسين دقة نموذج التجزئة الدلالية.

تفاصيل التنفيذ

تعتبر فئة MobileNetV3 مسؤولة عن بناء شبكة من التكوين المقدم. تفاصيل التنفيذ هي كما يلي:

* تقوم الوحدة التلافيفية الأخيرة بتوسيع إخراج الوحدة InvertedResidual الأخيرة بمقدار 6 مرات. يمكن لهذا التنفيذ التكيف مع معلمات المضاعف المختلفة.

* على غرار نموذج MobileNetV2، توجد طبقة Dropout قبل الطبقة الخطية الأخيرة للمصنف.

تعتبر فئة InvertedResidual هي كتلة البناء الرئيسية للشبكة. تفاصيل التنفيذ التي يجب ملاحظتها هي كما يلي:

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

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

* يأتي تنشيط وحدة Depthwise في المقام الأول على طبقة Squeeze-and-Excite، مما قد يؤدي إلى تحسين الدقة إلى حد ما.

مخطط هندسة وحدة MobileNetV3

تصنيف

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

المعايير 

تهيئة النموذج المدرب مسبقًا:

large = torchvision.models.mobilenet_v3_large(pretrained=True, width_mult=1.0,  reduced_tail=False, dilated=False)
small = torchvision.models.mobilenet_v3_small(pretrained=True)
quantized = torchvision.models.quantization.mobilenet_v3_large(pretrained=True)
مقارنة تفصيلية بين النماذج الجديدة والقديمة

كما هو موضح في الشكل، إذا كان المستخدم على استعداد للتضحية بقليل من الدقة مقابل زيادة السرعة بنحو 6 مرات،ثم يمكن أن يكون MobileNetV3-Large بديلاً لـ ResNet50.

لاحظ أن وقت الاستدلال هنا يتم قياسه على وحدة المعالجة المركزية.

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

يتم تكوين جميع النماذج المدربة مسبقًا كنماذج غير موسعة بمضاعف عرض 1 وذيول كاملة، وتناسب ImageNet. يتم تدريب المتغيرات الكبيرة والصغيرة بنفس المعلمات الفائقة والبرامج النصية.

 تدريب نموذجي سريع ومستقر 

يعد تكوين RMSProp بشكل صحيح أمرًا بالغ الأهمية لتسريع عملية التدريب وضمان الاستقرار العددي. استخدم المؤلفون TensorFlow في تجاربهم واستخدموا مستوى أعلى بكثير rmsprop_epsilon .

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

هناك تفصيل مهم آخر وهو أنه في حين أن تنفيذات RMSProp الخاصة بـ PyTorch و TensorFlow تتصرف بشكل مشابه بشكل عام، فمن المهم في الإعداد هنا ملاحظة الاختلافات في كيفية تعامل الإطارين مع المعلمة الفائقة epsilon.

على وجه التحديد، يضيف PyTorch epsilon خارج حساب الجذر التربيعي، بينما يضيف TensorFlow epsilon داخله.وهذا يعني أنه عندما يقوم المستخدمون بنقل المعلمات الفائقة لهذه المقالة، فإنهم يحتاجون إلى ضبط قيمة إبسيلون، والتي يمكن التعبير عنها على النحو التالي PyTorch_eps=sqrt(TF_eps)  لحساب تقريب معقول.

تحسين دقة النموذج عن طريق ضبط المعلمات الفائقة وتحسين عملية التدريب 

بعد تكوين المُحسِّن لتحقيق تدريب سريع ومستقر، يمكنك البدء في تحسين دقة النموذج. هناك بعض التقنيات التي يمكن أن تساعد المستخدمين على تحقيق هذا الهدف.

أولاً، لتجنب الإفراط في التجهيز،يمكنك استخدام AutoAugment وRandomErasing لزيادة البيانات.بالإضافة إلى ذلك، من المهم أيضًا استخدام التحقق المتبادل لضبط المعلمات مثل اضمحلال الوزن ومتوسط أوزان نقاط التفتيش المختلفة بعد التدريب. أخيرًا، يمكن أن يؤدي استخدام طرق مثل Label Smoothing، وRandom Depth، وحقن الضوضاء LR أيضًا إلى تحسين الدقة الشاملة بما لا يقل عن 1.5%.

خط الأساس للمعلمات الفائقة على غرار MobileNetV2

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

 القياس الكمي 

تم توفير أوزان كمية لبرنامج QNNPACK الخلفي لمتغير MobileNetV3-Large، مما يجعله يعمل أسرع بمقدار 2.5 مرة. لتحديد كمية النموذج،يتم هنا استخدام التدريب الواعي للكمية (QAT).

لاحظ أن QAT يسمح بنمذجة تأثير التكميم وضبط الأوزان من أجل تحسين دقة النموذج.بالمقارنة مع النتائج الكمية للنموذج المدرب ببساطة، تم تحسين الدقة بمقدار 1.8%:

اكتشاف الكائنات

سيقدم هذا القسم أولاً خط أساس للنماذج المنشورة ثم يناقش كيفية استخدام MobileNetV3-Large Backbone مع كاشف FasterRCNN في Feature Pyramid Network لاكتشاف الكائنات.

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

المعايير 

تهيئة النموذج:

high_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_fpn(pretrained=True) 
low_res = torchvision.models.detection.fasterrcnn_mobilenet_v3_large_320_fpn(pretrained=True)
مقارنة معيارية بين الموديلات الجديدة والقديمة

كما ترى، إذا كان المستخدم على استعداد للتضحية بقليل من الدقة من أجل سرعة تدريب أسرع بخمسة أضعاف،شبكة R-CNN أسرع وأعلى دقة مع MobileNetV3-العمود الفقري FPN الكبير، والذي يمكنه استبدال نموذج ResNet50 المكافئ.

تفاصيل التنفيذ 

يستخدم الكاشف هيكلًا أساسيًا على غرار FPN يستخرج الميزات من التفافات مختلفة لنموذج MobileNetV3.بشكل افتراضي، يستخدم النموذج المدرب مسبقًا مخرجات وحدة InvertedResidual رقم 13 ومخرجات الالتفاف قبل طبقة التجميع. ويدعم التنفيذ أيضًا استخدام المزيد من مراحل الإخراج.

يتم عرض جميع خرائط الميزات المستخرجة من الشبكة في 256 خط أنابيب بواسطة وحدة FPN.يمكن أن يؤدي هذا إلى زيادة سرعة الشبكة بشكل كبير.سيتم استخدام خرائط الميزات هذه التي يوفرها العمود الفقري لشبكة FPN بواسطة كاشف FasterRCNN لتوفير تنبؤات الصندوق والفئة بمقاييس مختلفة.

عملية التدريب والضبط 

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

يتم تدريب الكاشف عالي الدقة باستخدام صور تتراوح بين 800 و1333 بكسل، في حين يتم تدريب الكاشف منخفض الدقة المناسب للأجهزة المحمولة باستخدام صور تتراوح بين 320 و640 بكسل.

السبب وراء توفير مجموعتين منفصلتين من الأوزان المدربة مسبقًا هو أن تدريب الكاشف مباشرة على صور أصغر حجمًا يكون أكثر كفاءة من تمرير الصور الصغيرة إلى نموذج عالي الدقة مدرب مسبقًا.سيؤدي هذا إلى زيادة في الدقة بمقدار 5 مللي أمبير.

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

من الممكن إجراء تحسينات إضافية للسرعة للنماذج الملائمة للأجهزة المحمولة عن طريق ضبط حد RPN NMS.إن التضحية بدقة 0.2 mAP يمكن أن يؤدي إلى زيادة سرعة وحدة المعالجة المركزية للنموذج بنحو 45%. تفاصيل التحسين هي كما يلي:

مخطط التنبؤ لنموذج Faster R-CNN MobileNetV3-Large FPN

التجزئة الدلالية

يقدم هذا القسم أولاً بعض معايير النموذج المدربة مسبقًا المنشورة، ثم يناقش كيفية دمج العمود الفقري MobileNetV3-Large مع رؤوس التجزئة مثل LR-ASPP وDeepLabV3 وFCN للتجزئة الدلالية.

سيتم أيضًا شرح عملية تدريب الشبكة وسيتم اقتراح بعض تقنيات التحسين البديلة للتطبيقات الحرجة للسرعة.

المعايير

تهيئة النموذج المدرب مسبقًا:

lraspp = torchvision.models.segmentation.lraspp_mobilenet_v3_large(pretrained=True) 
deeplabv3 = torchvision.models.segmentation.deeplabv3_mobilenet_v3_large(pretrained=True)
مقارنة تفصيلية بين النماذج الجديدة والقديمة

كما هو موضح في الشكل، فإن DeepLabV3 مع العمود الفقري MobileNetV3-Large هو بديل قابل للتطبيق لـ FCN وResNet50 في معظم التطبيقات.مع الحفاظ على دقة مماثلة، يتم زيادة سرعة التشغيل بمقدار 8.5 مرة.وبالإضافة إلى ذلك، فإن أداء شبكة LR-ASPP في جميع المؤشرات يتجاوز أداء شبكة FCN في نفس الظروف.

تفاصيل التنفيذ

يناقش هذا القسم تفاصيل التنفيذ المهمة لرأس التجزئة الذي تم اختباره. لاحظ أن جميع النماذج الموضحة في هذا القسم تستخدم العمود الفقري الموسع MobileNetV3-Large.

LR-ASPP

LR-ASPP هو نسخة مبسطة من نموذج تجميع الهرم المكاني المخفض Atrous الذي اقترحه مؤلفو ورقة MobileNetV3. على عكس نماذج التجزئة الأخرى في TorchVision،إنه لا يستخدم الخسارة المساعدة، ولكنه يستخدم ميزات منخفضة المستوى وعالية المستوى مع خطوات إخراج تبلغ 8 و16 على التوالي.

على عكس طبقة AveragePooling 49×49 وحجم الخطوة المتغير المستخدمين في الورقة، يتم استخدام طبقة AdaptiveAvgPool2d هنا لمعالجة الميزات العالمية.

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

DeepLabV3 وFCN 

إن الجمع بين MobileNetV3 مع DeepLabV3 وFCN يشبه إلى حد كبير الجمع بين النماذج الأخرى، وتقييم المرحلة لهذه الأساليب هو نفسه LR-ASPP.

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

تعتبر FCN أقل من LR-ASPP من حيث السرعة والدقة، لذلك لا يتم أخذها في الاعتبار هنا. لا تزال الأوزان المدربة مسبقًا متاحة مع تعديلات بسيطة في الكود فقط.

عملية التدريب والضبط

فيما يلي نموذجان مدربان مسبقًا على MobileNetV3 يمكن استخدامهما للتجزئة الدلالية:LR-ASPP و DeepLabV3.تم تهيئة العمود الفقري لهذه النماذج باستخدام أوزان ImageNet وتم تدريبها من البداية إلى النهاية.

تم تدريب كلا المعماريتين على مجموعة بيانات COCO باستخدام نفس البرنامج النصي والمعلمات الفائقة المماثلة.

عادةً، أثناء الاستدلال، يتم تغيير حجم الصور إلى 520 بكسل. أحد تحسينات السرعة الاختيارية هو إنشاء تكوين نموذج منخفض الدقة باستخدام أوزان مدربة مسبقًا عالية الدقة وتقليل حجم الاستدلال إلى 320 بكسل.سيؤدي هذا إلى زيادة وقت تنفيذ وحدة المعالجة المركزية بحوالي 60%، مع التضحية ببعض نقاط mIoU.

أرقام تفصيلية مُحسّنة
LR-ASPP MobileNetV3-مثال على التنبؤ بالنموذج الكبير

ما ورد أعلاه هو تفاصيل تنفيذ MobileNetV3 الملخصة في هذا العدد. آمل أن تتمكن هذه من إعطائك فهمًا ومعرفةً أكبر لهذا النموذج.