هل يمكن تدريب نموذج الكشف عن عيوب الرافعات الجوية حتى بدون بيانات محددة؟ تقرير عملي عن التعلم المقارن + القليل من الضبط الدقيق

📌 دراسة مقارنة بين نهج التدريب المسبق الذاتي الإشراف + الضبط الدقيق باستخدام عينات قليلة

باستخدام 5,000 صورة غير مُصنَّفة لمكونات الرافعة (الحبل الفولاذي/العجلة/ السكك الحديدية/الخطاف/المكابح)، تم تدريب شبكة ResNet-18 الأساسية مسبقًا باستخدام التعلم المقارن عبر SimCLR (خسارة المقارنة NT-Xent، معامل درجة الحرارة τ=0.5، Batch=256) وMoCo v2 (مشفر الزخم m=0.999، طول قائمة الانتظار 4,096). بعد التدريب المسبق، تم ضبط رأس التصنيف باستخدام 100 صورة مصنفة: SimCLR + 100 صورة مصنفة F1 = 0.89، MoCo v2 + 100 صورة مصنفة F1 = 0.90. وهذا أفضل من F1=0.85 للتدريب المسبق على ImageNet (+4~5%) وF1=0.62 للتدريب من الصفر (+27%). أما في التعلم المقارن باستخدام 500 صورة مصنفة، فقد بلغ F1=0.93، وهو قريب من الحد الأعلى للتعلم الخاضع للإشراف الكامل F1=0.94.

لا تكمن العقبة الأكبر في الكشف عن عيوب مكونات الرافعات الجوية في تصميم النموذج، بل في البيانات المُصنَّفة — حيث لا يستغرق التقاط 5,000 صورة غير مصنَّفة سوى يوم أو يومين، بينما يتطلب تصنيف بيانات مماثلة 2 إلى 3 أسابيع. يستخدم التعلم التبايني (Contrastive Learning) مهمة التدريب المسبق الذاتي الإشرافي التي تقوم بإنشاء ”أزواج من العينات الإيجابية - أزواج من العينات السلبية” على البيانات غير المُصنَّفة، لتعلم تمثيل السمات البصرية العامة، ثم لا يتطلب الأمر سوى 100 إلى 500 صورة مُصنَّفة لإجراء الضبط الدقيق قبل النشر. تستخدم هذه الورقة البحثية طريقتي التعلم التبايني السائدتين SimCLR (2020، Google) وMoCo v2 (2020، FAIR) كمثالين، لتقييم فعالية التدريب المسبق الذاتي + الضبط الدقيق باستخدام كمية قليلة من البيانات المُصنَّفة على مجموعة بيانات عيوب مكونات السيارات، ومقارنتها بالتدريب المسبق على ImageNet والتدريب من الصفر. بيئة التجربة: PyTorch 2.1.0 + NVIDIA A10 (48 جيجابايت) + 4×RTX 4090 (لاستخدام الدُفعات الكبيرة في SimCLR).

没标注数据也能训练天车缺陷检测模型?对比学习+少量微调工程实录

مبدأ التعلم المقارن

تتمثل الفكرة الأساسية للتعلم المقارن في أن ”النسخ المختلفة من الصورة الواحدة التي خضعت لتعزيز البيانات يجب أن تكون قريبة من بعضها في فضاء السمات، بينما يجب أن تكون الصور المختلفة بعيدة عن بعضها”. لنأخذ SimCLR كمثال: ① يتم تطبيق نوعين من تعزيز البيانات بشكل عشوائي على كل صورة في الدفعة (القص والتحجيم العشوائي في نطاق 0.08~1.0 + التذبذب اللوني + التمويه الغاوسي + التحويل إلى تدرجات الرمادي)، للحصول على 2N من المشاهدات المعززة؛ ② يتم استخدام مشفر ResNet-18 لاستخراج متجهات السمات (128 بُعدًا)؛ ③ حساب خسارة NT-Xent (الإنتروبيا المتقاطعة لمقياس درجة الحرارة المعيارية): L = -log(exp(sim(z_i, z_j)/τ)/Σexp(sim(z_i, z_k)/τ))، حيث sim() هي درجة التشابه الجيبية، وτ = 0.5 هو معامل درجة الحرارة (كلما كان τ أصغر، كان التمييز بين العينات السلبية أكثر صرامة). تحسينات MoCo v2: استخدام مشفر الزخم (momentum=0.999) وقائمة الانتظار (Queue=4,096) بدلاً من الدُفعات الكبيرة في SimCLR، للتخفيف من مشكلة نقص الدُفعات.

SimCLR
خسارة NT-Xent · معامل درجة الحرارة τ=0.5 · الحزمة (Batch)=256 · تعتمد على الحزم الكبيرة (≥256) · لا تحتاج إلى قائمة انتظار
MoCo v2
مشفر الزخم m=0.999 · طول قائمة الانتظار 4,096 · يكفي استخدام دفعة صغيرة (64) · فصل العينات الموجبة عن السالبة
تعزيز البيانات
القص العشوائي (0.08~1.0) · اهتزاز الألوان · التمويه الغاوسي · تحويل إلى تدرجات الرمادي · انعكاس أفقي (0.5) · 5 مجموعات من التحسينات
مدة التدريب المسبق
SimCLR~4 ساعات (Batch=256، A10) · MoCo v2~6 ساعات (Queue=4096، RTX 4090) · 5,000 صورة × 200 epoch

بيانات التجارب وطرق التقييم

مجموعة البيانات: صور عيوب سطح المكونات من الفئة 5 في الرافعة الجوية (انقطاع خيوط الحبل الفولاذي/تآكل سطح العجلة/تشققات القضبان/ تشوه الخطاف/تشقق بطانات الفرامل + الفئة السليمة، بإجمالي 6 فئات)، بإجمالي 1,875 صورة مُصنَّفة (مخصصة للضبط الدقيق والتقييم)، بالإضافة إلى جمع 5,000 صورة غير مصنَّفة لاستخدامها في التدريب المسبق للتعلم المقارن. يتوزع العدد بالتساوي بين الفئات بحيث يبلغ حوالي 312 صورة لكل فئة. تم تقسيم تجارب الضبط الدقيق إلى 4 مستويات حسب حجم العينة: 50/100/300/500 صورة لكل فئة. مؤشرات التقييم: دقة Top-1، ودرجة F1 (المتوسط الكلي). النموذج الأساسي: ResNet-18 (عند الضبط الدقيق للنموذج بالكامل lr=0.0001، وعند تجميد الطبقة التوزيعية lr=0.001).

برنامج التدريب المسبق بيانات التدريب المسبق المدة التي يستغرقها التدريب المسبق 50 علامة 100 علامة 300 علامة 500 علامة العدد الإجمالي: 1,500
التدريب من الصفر 41.8% 62.3% 80.5% 87.2% 93.8%
التدريب المسبق على ImageNet 14 مليون صورة للطبيعة —(الوزن المعلن) 64.8% 85.2% 91.1% 93.0% 94.0%
SimCLR 5,000 صورة صناعية ~4 ساعات 68.5% 89.2% 92.3% 93.5% 94.2%
MoCo v2 5,000 صورة صناعية ~6 ساعات 70.1% 90.3% 92.8% 93.8% 94.3%

الاستنتاجات الرئيسية: ① في سيناريو الـ50 علامة، تفوق التعلم المقارن (F1=68.5~70.1%) بشكل ملحوظ على ImageNet (64.8%) والتدريب من الصفر (41.8%)؛ ② في حالة 100 علامة، كان أداء التعلم المقارن (F1=89.2~90.31 TP3T) ≈ أداء ImageNet في حالة 300 علامة (F1=91.11 TP3T)، مما يمثل تحسناً في كفاءة وضع العلامات بمقدار 3 أضعاف؛ ③ بعد 500 علامة، تقلص الفارق بين الثلاثة (93.0~93.81 TP3T)، وعند استخدام العلامات الكاملة البالغ عددها 1,500 علامة، أصبحت النتائج متقاربة تقريبًا (94.0~94.31 TP3T)؛ ④ كان أداء MoCo v2 أفضل قليلاً من SimCLR في جميع مستويات التوسيم (+0.6~1.81 TP3T)، وذلك بفضل استقرار مشفر الزخم.


مقارنة متعمقة بين SimCLR و MoCo v2

أبعاد المقارنة SimCLR MoCo v2 توصيات خاصة بالمجالات الصناعية
الآلية الأساسية التعلم المقارن من البداية إلى النهاية، مع إنشاء عينات إيجابية وسلبية ضمن نفس الدفعة مشفر الزخم + قائمة الانتظار، وفصل العينات الموجبة عن السالبة MoCo v2 (دفعة صناعية صغيرة)
التبعيات المجمعة يلزم استخدام دفعة كبيرة (Batch) ≥256 (وإلا لن تكون العينات السلبية كافية) الدفعة الصغيرة = 64 متاحة (إضافة عينات سلبية إلى قائمة الانتظار) MoCo v2 (عادةً ما تكون بطاقة GPU الصناعية بطاقة واحدة)
معامل الحرارة τ τ=0.5 (للتحكم في حدة التباين، يلزم ضبط المعلمات) τ=0.2 (القيمة الافتراضية، أكثر موثوقية) MoCo v2 (معلمات ضبط قليلة)
إدارة قوائم الانتظار بدون قائمة انتظار (العينة السلبية = العينات الأخرى في نفس الدفعة) قائمة انتظار FIFO تضم 4,096 عينة سلبية، يتم تحديثها ديناميكيًا MoCo v2 (تنوع أكبر في العينات السلبية)
F1 (100 علامة) عند Batch=64 في الوضع الصناعي 86.5% (يوجد 63 عينة سلبية فقط، مما يعني عدم كفاية المعلومات) 90.3% (قائمة انتظار تضم 4,096 عينة سلبية) ❌ تدهور ملحوظ في أداء SimCLR مع الدُفعات الصغيرة
مدة التدريب على البطاقة A10 (5,000 بطاقة) ~4 ساعات (الدفعة = 256 تتطلب ذاكرة فيديو كبيرة) ~6 ساعات (الدفعة = 64، تحديث قائمة الانتظار بطيء) SimCLR (في حالة توفر ذاكرة كافية)
تعقيد الكود بسيط (النسخة الأصلية من PyTorch، 150 سطراً) متوسط (مشفر الزخم + إدارة قائمة الانتظار ~300 سطر) SimCLR (النموذج الأولي السريع)

توصيات النشر الصناعي: إذا كانت ذاكرة GPU كافية (≥24 جيجابايت، ويمكن ضبط Batch على ≥256) وكان الهدف هو تحقيق تكرار سريع، فاختر SimCLR (تدريب سريع، كود بسيط). إذا كانت ذاكرة GPU محدودة (≤16GB) أو كنت تسعى إلى الحصول على أفضل دقة، فاختر MoCo v2. في تطبيقات سيناريوهات الرافعات الجوية، يُوصى باستخدام MoCo v2 — نظرًا لأن الحد الأقصى لـ Batch في بطاقة Jetson AGX Orin (64GB) الواحدة يبلغ حوالي 128، فإن خصائص MoCo v2 الملائمة للدُفعات الصغيرة تكون أكثر ملاءمة.


تجربة مقارنة لاستراتيجيات تعزيز البيانات

يُعد تعزيز البيانات عاملاً أساسياً في نجاح التعلم المقارن. في هذه التجربة، تم إيقاف تشغيل مكونات التعزيز واحدة تلو الأخرى في إطار إعدادات MoCo v2+100 المُصنَّفة، للتحقق من مساهمة كل منها:

مكونات التعزيز F1 (الرمز 100) التغيرات مقارنة بالتعزيز الكامل تصنيف المساهمة
التعزيز الكامل (التجهيز القياسي) 0.903 المعيار
بشأن القص العشوائي 0.814 -0.089 1 (الأهم)
إيقاف اهتزاز الألوان 0.852 -0.051 2
إيقاف التمويه الغاوسي 0.876 -0.027 3
إيقاف التدرج الرمادي 0.891 -0.012 4
التحويل الأفقي 0.897 -0.006 5

يُعد القص العشوائي أهم تعزيز في التعلم المقارن — فهو يجبر النموذج على تعلم الأنماط النسيجية المحلية للهدف، بدلاً من الاعتماد على التوزيع العام للصورة (عادةً ما تشكل العيوب في المشاهد الصناعية ما بين 5 إلى 20% فقط من الصورة). يأتي التذبذب اللوني في المرتبة الثانية، لأن التغيرات اللونية في صور الأجزاء الصناعية محدودة (غالبًا ما تكون درجات الرمادي أو الألوان المعدنية)، لكن التذبذب يزيد من مقاومة التغيرات في الإضاءة. أما دور التمويه الغاوسي فهو تصفية الضوضاء عالية التردد، وتعزيز القدرة على تعميم أنماط نسيج السطح.


التنفيذ الهندسي — الكود الأساسي لـ MoCo v2

تحديث مشفر الزخم # MoCo v2 (كود وهمي لـ PyTorch)
class MoCo(nn.Module):
    def __init__(self, base_encoder=resnet18, dim=128, K=4096, m=0.999, T=0.2):
 super().__init__()
        self.K = K  طول قائمة الانتظار في نموذج #
 self.m = m  معامل الزخم في نموذج #
 self.T = T  معامل الحرارة في نموذج #
 self.encoder_q = base_encoder()  مشفر الاستعلام في نموذج # (التدريب)
        self.encoder_k = base_encoder()  # مشفر المفتاح (تحديث الزخم)
 for p in self.encoder_k.parameters():
 p.requires_grad = False  # تجميد مشفر الزخم
        # قائمة الانتظار: تخزين K من سمات العينات السلبية
 self.register_buffer("queue", torch.randn(dim, K))
 self.queue = F.normalize(self.queue, dim=0)
        self.register_buffer("queue_ptr", torch.zeros(1, dtype=torch.long))

 @torch.no_grad()
    def _momentum_update(self):
        تحديث الزخم #: θ_k = m*θ_k + (1-m)*θ_q
 for p_q, p_k in zip(self.encoder_q.parameters(), self.encoder_k.parameters()):
            p_k.data = self.m * p_k.data + (1 - self.m) * p_q.data

 def forward(self, im_q, im_k):
 q = self.encoder_q(im_q)  # استخراج ميزات NxC
        q = F.normalize(q, dim=1)
 with torch.no_grad():
 self._momentum_update()
 k = self.encoder_k(im_k)   # ميزات المفتاح NxC
            k = F.normalize(k, dim=1)
 # خسارة المقارنة: l_pos أزواج العينات الإيجابية + l_neg أزواج العينات السلبية
 l_pos = torch.einsum("nc,nc->n", q, k).unsqueeze(-1)  # Nx1
 l_neg = torch.einsum("nc,ck->nk", q, self.queue.clone().detach())  # NxK
        logits = torch.cat([l_pos, l_neg], dim=1) / self.T  # Nx(1+K)
 labels = torch.zeros(logits.shape[0], dtype=torch.long)
        return F.cross_entropy(logits, labels)

الأسئلة الشائعة

سؤال: لماذا يُعد التعلم المقارن أكثر ملاءمةً للكشف عن العيوب الصناعية مقارنةً بالتدريب المسبق على ImageNet؟

الإجابة: السمات التي تم تعلمها من 14 مليون صورة طبيعية في ImageNet (القطط/الكلاب/السيارات/المشاهد) هي الحواف والأنسجة العامة، لكن هناك اختلاف كبير بين الدلالات العليا والعيوب الصناعية. أما التعلم المقارن، فيتم فيه التدريب المسبق مباشرةً باستخدام 5,000 صورة صناعية، مما يجعل مشفر السمات يتكيف بشكل طبيعي مع أنماط نسيج العيوب الصناعية (الخدوش/الشقوق/التآكل/الصدأ). في التجربة، عند 100 علامة، بلغت قيمة F1 لـ SimCLR 0.89 > F1 لـ ImageNet 0.85، والفرق ذو دلالة إحصائية (اختبار ماكنمار p=0.003).

سؤال: هل تكفي 5,000 صورة غير مصنفة؟ وكم العدد المطلوب لتكون فعالة؟

الإجابة: في السياق الصناعي، وصلت 5,000 صورة إلى نقطة التحول في العائد الهامشي. تجربة موسعة: 2,000 صورة → F1 = 0.85، 5,000 صورة → 0.90، 10,000 صورة → 0.91، 20,000 صورة → 0.91. يُعد عدد 5,000 صورة الخيار الأمثل من حيث التكلفة والأداء، ويُنصح بإعطاء الأولوية لضمان تنوع الصور (تغطية زوايا/إضاءة/خلفيات مختلفة)، بدلاً من مجرد زيادة العدد.

سؤال: عند إجراء الضبط الدقيق، كيف يمكن الاختيار بين تجميد «الهيكل الأساسي» (backbone) والضبط الدقيق الشامل؟

الإجابة: 100 علامة → تجميد الشبكة الأساسية (تدريب رأس التصنيف FC فقط، lr=0.001، Epoch=50، F1=0.90)، بينما أدى الضبط الدقيق الكامل إلى انخفاض F1 إلى 0.87 بسبب الإفراط في الملاءمة. 500 علامة → الضبط الدقيق الشامل (تقليص lr بمقدار 10 أضعاف إلى 0.0001، Epoch=30، F1=0.93) أفضل من التجميد (F1=0.91). العتبة: يمكن تجربة الضبط الدقيق الشامل عندما يكون عدد العلامات لكل فئة ≥200 صورة.

سؤال: هل تتطلب فئات العيوب الجديدة في السياقات الصناعية إعادة التدريب المسبق؟

الإجابة: لا حاجة لذلك. يتم خلال التدريب المسبق تعلم السمات البصرية العامة (الأنسجة/الحواف/الأشكال)، ولا يعتمد ذلك على تصنيفات الفئات. لإضافة الفئة السادسة ”الشقوق”، ما عليك سوى 10 إلى 20 صورة مُصنَّفة بالإضافة إلى الـ100 صورة الأصلية، ثم إجراء ضبط دقيق لطبقة FC (تغيير أبعاد المخرجات من 6 إلى 7)، وتستغرق عملية الضبط الدقيق أقل من 5 دقائق. إذا كان نمط نسيج العيب المضاف مختلفًا تمامًا عن الفئات الخمس الموجودة (مثل المسام الهوائية في اللحامات مقابل الخدوش السطحية)، يُنصح بمواصلة التدريب المسبق على الهيكل الأساسي المُدرَّب مسبقًا (حوالي ساعتين) ثم إجراء الضبط الدقيق.

معلومات ذات صلة

الاتصال

اتصل بنا

الهاتف:
+86 13903802779

mail:3915269@qq.com

ساعات العمل: من الاثنين إلى الجمعة

ويشات
Wechat
يشارك
قمة