الرؤية الحاسوبية2017متوسط9 دقيقة قراءة

MobileNets: شبكات التفاف عصبية كفوءة لتطبيقات الرؤية على الأجهزة المحمولة

MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

Howard, A. G. · Zhu, M. · Chen, B. · Kalenichenko, D. · Wang, W. · Weyand, T. · Andreetto, M. · Adam, H. — arXiv

المشكلة

بحلول 2017 كانت أقوى نماذج الرؤية الحاسوبية — VGG وResNet وInception — أضخم وأبطأ من أن تعمل على هاتف أو طائرة مسيَّرة أو كاميرا مدمجة. نموذج VGG16 وحده فيه 138 مليون معامل ويحتاج 15.3 مليار عملية ضرب وجمع لصورة واحدة. تشغيل نموذج كهذا على معالج هاتف كان إما بطيئاً لدرجة غير عملية، أو يستلزم اتصالاً دائماً بالسحابة — وهو ما يُفقد الذكاء المحلي معناه من الأساس.

الإسهام

MobileNet: بنية شبكة التفافية مبنيّة بالكامل تقريباً من الالتفافات القابلة للفصل بالعمق. الفكرة أنك تفكّك الالتفاف التقليدي إلى خطوتين أرخص بكثير — التفاف بالعمق يرشّح كل قناة وحدها، ثم التفاف نقطي 1×1 يمزج القنوات. هذا التفكيك يخفّض الحوسبة من 8 إلى 9 مرات مع خسارة أقل من 1% في الدقة. مُعاملان عامّان — α لتنحيف كل طبقة، ρ لتصغير دقة الدخل — يعطيان المطوّر تحكّماً دقيقاً في المفاضلة بين زمن الاستجابة والحجم والدقة بحسب جهازه.

الأثر

أثبتت MobileNet أن المهام البصرية الحقيقية — واكتشاف الأجسام والتعرف على الوجوه وتحديد الموقع الجغرافي — يمكن أن تعمل على الجهاز مباشرة وفي الوقت الحقيقي. صارت البنية المرجعية لتطبيقات الذكاء الاصطناعي على الحافة، وتفرّع عنها MobileNetV2 وV3. أصبح لَبِنة أساسية في كل بنية كفوءة تلتها مثل EfficientNet، ومفهوم مُضاعِفات العرض والدقة أثّر في كل تصميم نموذج كفوء جاء بعدها.

التقليدي يشبه سكين الجيش السويسري: نصل سميك واحد يقطع ويفكّ ويفتح كل شيء دفعة واحدة. قوي، لكنه ثقيل.

الالتفاف القابل للفصل بالعمق في MobileNet يشبه نظاماً من أداتين: أولاً مجموعة شفرات رفيعة — واحدة لكل مادة — تُجري القطع كلٌّ على حدة (). ثم أداة مزج واحدة تجمع النتائج في المنتج النهائي (). كل خطوة بسيطة وحدها، لكنهما معاً تنجزان المهمة نفسها تقريباً بجزء صغير من الوزن.

مُضاعِف العرض يشبه أن تختار شفرات أقل، ومُضاعِف الدقة يشبه أن تعمل على قطعة أصغر. كلاهما يخفّف طقم الأدوات، وأنت تقرّر مقدار التخفيف بحسب ما يمكنك التنازل عنه.

المشكلة: نماذج قوية على أجهزة ضعيفة

بحلول 2017، كان سباق الدقة على ImageNet قد أنتج نماذج لا يمكن تشغيلها إلا داخل مراكز البيانات:

  • VGG16: دقة 71.5% في top-1، لكنها تضمّ 138 مليون معامل وتستهلك 15.3 مليار عملية ضرب وجمع.
  • GoogleNet: دقة 69.8% مع 1.55 مليار عملية — أخف، لكنها ما زالت أثقل من أن يتحمّلها معالج هاتف.

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

افتح في المختبر
اضبط عدد القنوات وحجم النواة لترى كيف تنفجر تكلفة الالتفاف التقليدي مقارنةً بالالتفاف القابل للفصل بالعمق.
تستيقظ التجربة عند وصولك…

الفكرة الجوهرية: افصل الترشيح عن المزج

الالتفاف التقليدي في الشبكات الالتفافية يقوم بعمليتين في آن واحد: يطبّق مرشّحات مكانية لاكتشاف الحواف والأنسجة والأنماط، ويمزج المعلومات بين لتوليد سمات جديدة. هذا الاقتران بين العمليتين هو بالتحديد ما يجعل التكلفة الحوسبية عالية.

الفكرة الأساسية في MobileNet هي فكّ هذا الاقتران وتنفيذ كل عملية على حدة:

الخطوة الأولى — الالتفاف بالعمق: نطبّق مرشّحاً مكانياً واحداً على كل قناة دخل باستقلال تام. إذا كان عندنا M قناة، نستخدم M مرشّحاً صغيراً (مثلاً 3×3)، مرشّح لكل قناة. كل مرشّح ينزلق على الشبكة المكانية لقناته ويلتقط الأنماط فيها فقط. تصوَّر أنك أرسلت مفتّشاً لكل طابق في مبنى — كل مفتّش يفحص طابقه بدقة لكنه لا يعرف شيئاً عن بقية الطوابق.

الخطوة الثانية — الالتفاف النقطي: يطّلع على قيم القنوات الـM كلها عند كل موضع مكاني ويُخرج N قناة جديدة. هذه الخطوة لا ترشّح مكانياً على الإطلاق — كل ما تفعله هو مزج القنوات. تخيّلها اجتماعاً يجلس فيه المفتّشون معاً ويتبادلون ملاحظاتهم ليخرجوا بتقرير موحَّد.

افتح في المختبر
بدّل بين الالتفاف التقليدي والالتفاف القابل للفصل بالعمق لترى كيف يعمل تفكيك المرشّحات.
تستيقظ التجربة عند وصولك…

الحساب: من أين يأتي التوفير؟

قبل الدخول في المعادلات، لنفهم من أين يأتي التوفير: الالتفاف التقليدي يحسب كل تركيبة ممكنة من قناة دخل × قناة خرج × موقع مكاني × موضع في النواة — أربعة أبعاد مضروبة معاً. الالتفاف القابل للفصل بالعمق يكسر هذا الجداء الرباعي إلى جداءين أصغر يتقاسمان بُعدَي القنوات والمواضع المكانية فقط، فيتخلّص من الارتباط المُكلِف بين القنوات والمساحة المكانية.

DKDKMNDFDFD_K \cdot D_K \cdot M \cdot N \cdot D_F \cdot D_F
تكلفة الالتفاف التقليديD_K = حجم النواة · M = قنوات الدخل · N = قنوات الخرج · D_F = البُعد المكاني لخريطة السمات. لاحظ أن كل موضع في النواة يتفاعل مع كل زوج قنوات دخل-خرج عند كل نقطة مكانية.
DKDKMDFDF  +  MNDFDFD_K \cdot D_K \cdot M \cdot D_F \cdot D_F \;+\; M \cdot N \cdot D_F \cdot D_F
تكلفة الالتفاف القابل للفصل بالعمقالحد الأول يمثّل الالتفاف بالعمق (ترشيح مكاني لكل قناة وحدها)، والثاني يمثّل الالتفاف النقطي (مزج القنوات). لاحظ أن العامل المُكلِف D_K² × N اختفى — بدلاً من ضرب الأبعاد الأربعة معاً، صرنا نجمع حدّين أصغر بكثير.
1N+1DK2\frac{1}{N} + \frac{1}{D_K^2}
نسبة التخفيض في الحوسبةمع نوى 3×3 (أي D_K = 3) الحد الثاني وحده يعطي 1/9. وحين تكون القنوات بالمئات (N = 256 أو أكثر) يصبح الحد الأول مهملاً، فيبلغ التوفير الكلي **8 إلى 9 أضعاف** في عمليات الضرب والجمع.

بنية MobileNet: 28 طبقة، نمط واحد

البنية بسيطة بشكل لافت. تبدأ بطبقة التفاف تقليدي 3×3، ثم تأتي بعدها 13 وحدة التفاف قابل للفصل بالعمق مكدَّسة فوق بعضها، كل واحدة تتكوّن من التفاف بالعمق 3×3 يليه التفاف نقطي 1×1. بعد كل طبقة التفافية تأتي ثم ReLU. في النهاية، طبقة تختزل الأبعاد المكانية إلى 1×1، تليها بألف خرج لتصنيف ImageNet.

تصغير الأبعاد المكانية يتمّ بضبط على 2 في بعض طبقات الالتفاف بالعمق، فيتقلّص الحجم تدريجياً من 224×224 إلى 7×7. في المقابل، عدد القنوات يتضاعف عند كل مرحلة تصغير — من 32 إلى 64 إلى 128 إلى 256 إلى 512 إلى 1024 — وفق النمط الهرمي المعروف في الشبكات الالتفافية: صغِّر المساحة المكانية ووسِّع عمق القنوات.

افتح في المختبر
انقر على أي وحدة لترى تفاصيل الطبقة — مرشّح الالتفاف بالعمق، المرشّح النقطي، شكل الخرج.
تستيقظ التجربة عند وصولك…

مُضاعِف العرض α: نماذج أنحف

حتى نسخة MobileNet الأساسية قد تكون أكبر مما يتحمّله بعض الأجهزة. هنا يأتي دور مُضاعِف العرض α: في كل طبقة يُضرب عدد قنوات الدخل M وقنوات الخرج N في α، فتصبح الشبكة أنحف بشكل منتظم.

التأثير على الحوسبة قريب من التربيع: حين تخفّض α من 1.0 إلى 0.5 تنخفض العمليات بنسبة 0.5² = 0.25 تقريباً، أي توفير بأربعة أضعاف. الورقة تختبر α ∈ 0.25، والدقة تنزل بسلاسة من 70.6% إلى 50.6% على ImageNet.

النتيجة اللافتة هنا أن تنحيف النموذج (تقليل القنوات عبر α) أفضل بكثير من تقصيره (حذف طبقات). عند نفس الميزانية الحوسبية، النسخة النحيفة تتفوّق على النسخة القصيرة بفارق 3% في الدقة — وهذا يعزّز مبدأ مهماً: تنوّع القنوات يفيد النماذج المدمجة أكثر من زيادة العمق.

DK2αMDF2  +  αMαNDF2D_K^2 \cdot \alpha M \cdot D_F^2 \;+\; \alpha M \cdot \alpha N \cdot D_F^2
التكلفة مع مُضاعِف العرض αالحدّان معاً يتقلّصان: حد الالتفاف بالعمق بمعامل α، والحد النقطي بمعامل α². ولأن الحد النقطي يشكّل 95% من الحوسبة، فالتوفير الفعلي يقترب من α².

مُضاعِف الدقة ρ: مدخلات أصغر

أداة الضبط الثانية هي مُضاعِف الدقة ρ. بدل إدخال صور بحجم 224×224، يمكن للمطوّر استخدام 192 أو 160 أو 128 بكسل. كل داخلية تتقلّص بالنسبة ذاتها، فتنخفض الحوسبة بمقدار ρ² — أي أن تصغير الدقة للنصف يوفّر 4 أضعاف من العمليات.

الفرق المهم أن مُضاعِف الدقة لا يمسّ عدد المعاملات (أوزان المرشّحات تبقى نفسها)، بل يؤثّر فقط في عدد عمليات الضرب والجمع. لذلك هو مفيد جداً حين يكون حجم النموذج مقبولاً لكن هو القيد الحرج.

حين نجمع α مع ρ نحصل على فضاء تصميم من 16 نقطة: 4×4 تركيبة بين α ∈ 0.25 ودقة الدخل ∈ 128. العلاقة بين الدقة والحوسبة تسير على منحنى لوغاريتمي-خطي عبر هذا الفضاء.

افتح في المختبر
حرّك المنزلقين لاستكشاف تأثير مُضاعِف العرض ومُضاعِف الدقة على الدقة والحوسبة وحجم النموذج.
تستيقظ التجربة عند وصولك…

النتائج: نموذج صغير بأداء جدّي

النسخة الكاملة من MobileNet (α = 1.0، دقة دخل 224×224) تحقّق 70.6% في top-1 على ImageNet بـ569 مليون عملية ضرب وجمع فقط و4.2 مليون معامل. لنضع هذا في سياقه:

  • دقة تقترب من VGG16 (71.5%) لكن بحجم أصغر 32 مرة وحوسبة أقل 27 مرة.
  • أدقّ من GoogleNet (69.8%) وفي الوقت نفسه أصغر وأسرع 2.5 مرة.

وعلى الطرف الآخر، النسخة المُصغَّرة (α = 0.5، 160×160) تحقّق 60.2% بـ76 مليون عملية فقط — تتفوّق على AlexNet بنسبة 4% رغم أنها أصغر 45 مرة وأخف حوسبياً 9.4 مرة.

ولم تقتصر النتائج على التصنيف. طُبِّقت MobileNet على التعرف الدقيق (Stanford Dogs) و (COCO مع SSD/Faster-RCNN) وسمات الوجه وتحديد الموقع الجغرافي (PlaNet) وتضمينات الوجوه (تقطير FaceNet)، وفي كل حالة قدّمت نتائج تنافسية بتكلفة أقل بمراحل.

افتح في المختبر
قارن بين نسخ MobileNet والنماذج الشائعة من حيث الدقة مقابل الحوسبة.
تستيقظ التجربة عند وصولك…

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

دُرِّبت MobileNet في TensorFlow باستخدام مُحسِّن RMSProp مع انحدار تدريجي غير متزامن بأسلوب قريب من Inception V3. لكن النقطة المهمة هنا في وصفة : النماذج الصغيرة تحتاج أقل لا أكثر. الباحثون قلّلوا ، وأسقطوا تنعيم التسميات والرؤوس الجانبية، واستخدموا ضئيلاً جداً أو معدوماً على مرشّحات الالتفاف بالعمق — لأن معاملاتها قليلة أصلاً ومشكلة لا تُطرح فيها.

وهذا درس عملي يستحق التوقف عنده: حين تُصغِّر نموذجاً، صغِّر تنظيمه معه. ميزانية تنظيم صُمِّمت لنموذج VGG بـ138 مليون معامل ستخنق نموذج MobileNet الذي لا يتجاوز 4 ملايين معامل.

الفكرة في شيفرة برمجية

وحدة الالتفاف القابل للفصل بالعمق في PyTorchpython

مبسَّط لإظهار الفكرة — ليس التنفيذ الحقيقي.

import torch.nn as nn

class DepthwiseSeparableConv(nn.Module):
    """وحدة MobileNet واحدة: التفاف بالعمق 3×3 ← BN ← ReLU ← التفاف نقطي 1×1 ← BN ← ReLU."""
    def __init__(self, in_ch, out_ch, stride=1):
        super().__init__()
        self.depthwise = nn.Conv2d(
            in_ch, in_ch, kernel_size=3, stride=stride,
            padding=1, groups=in_ch, bias=False    # groups=in_ch → مرشّح واحد لكل قناة
        )
        self.bn1 = nn.BatchNorm2d(in_ch)
        self.pointwise = nn.Conv2d(
            in_ch, out_ch, kernel_size=1, bias=False  # التفاف 1×1 يمزج القنوات
        )
        self.bn2 = nn.BatchNorm2d(out_ch)
        self.relu = nn.ReLU(inplace=True)

    def forward(self, x):
        x = self.relu(self.bn1(self.depthwise(x)))   # الخطوة 1: رشّح كل قناة
        x = self.relu(self.bn2(self.pointwise(x)))   # الخطوة 2: امزج كل القنوات
        return x

# MobileNet بأكملها هي فقط:
# 1 التفاف تقليدي → 13 وحدة DepthwiseSeparableConv → تجميع متوسط → طبقة كاملة الاتصال

كيف غيّرت MobileNet قواعد اللعبة

  1. 2017

    MobileNet V1

    الالتفاف القابل للفصل بالعمق ومُضاعِفات العرض والدقة. أثبتت أن تشغيل الاستدلال على الأجهزة المحمولة ممكن دون خسارة تُذكر في الدقة.

  2. 2018

    MobileNet V2

    أضافت الوصلات المتبقية المعكوسة والاختناقات الخطية — توسّع القنوات قبل الالتفاف بالعمق لا بعده. دقة أعلى مع الحفاظ على فلسفة الكفاءة نفسها.

  3. 2019

    MobileNet V3

    دمجت الالتفاف القابل للفصل بالعمق مع البحث الآلي عن البنية ووحدات الانتباه القنواتي، فصار اكتشاف أفضل تركيبة للوحدات يتمّ تلقائياً.

  4. 2019

    <NodeLink slug="efficientnet">EfficientNet</NodeLink>

    وسّعت العمق والعرض ودقة الدخل في آن واحد بالتحجيم المركّب، بانيةً على وحدات MobileNet القابلة للفصل بالعمق لتحقّق أعلى دقة عند كل مستوى كفاءة.

أثبتت MobileNet نقطة جوهرية: لا حاجة للاختيار بين والكفاءة. بالتفكيك المناسب ومقابض الضبط الصحيحة والتصميم الذي يراعي العتاد، يمكن للنموذج أن يكون خفيفاً وقادراً في الوقت نفسه. كل مرة يتعرّف هاتفك على وجه، أو يصنّف صورة، أو يترجم لافتة في لحظتها — وراء ذلك سليلٌ مباشر لهذه الفكرة.

المرجعHoward, Zhu, Chen, Kalenichenko, Wang, Weyand, Andreetto, Adam. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications. arXiv, 2017.

مصطلحات هذه الورقة