Image-to-CadQuery
نموذج مخصص من الرؤية إلى الكود
شبكة عصبية تحوّل صورة قطعة ثلاثية الأبعاد إلى كود
التقنياتPyTorchResNet18Transformer
Hugging Face Datasets
pytest
torchvision
Hugging Face Transformers
torchrun
Ruff
الكود خاص (عمل لشركة أو لعميل)

نظرة عامة
CadQuery مكتبة Python لوصف القطع ثلاثية الأبعاد على هيئة كود. أردت أن أعرف ما إذا كان نموذج مدرَّب من البيانات وحدها يستطيع النظر إلى قطعة تصميم بمساعدة الحاسوب (CAD) مصيَّرة وكتابة نص CadQuery البرمجي الذي يعيد بناءها، دون أي واجهة برمجية لنموذج لغوي كبير (LLM) ودون أي هندسة أوامر.
بنيت نموذج مشفِّر-مفكِّك ترميز (encoder-decoder) بـ PyTorch خالص: يحوّل ResNet18 الصورة إلى شبكة 7x7 من الرموز البصرية (tokens)، ويكتب مفكِّك ترميز Transformer من 6 طبقات النص البرمجي رمزًا تلو الآخر وهو ينتبه إلى رموز الصورة تلك. وحول ذلك كتبت إعدادات مُنمَّطة، وخط معالجة بيانات لمجموعة بيانات GenCAD-Code (147k زوج صورة/نص برمجي للتدريب)، وحلقة تدريب تتوسع من معالج حاسوب محمول إلى عدة وحدات معالجة رسومية وعدة أجهزة، وواجهة سطر أوامر للاستدلال، وحزمة اختبارات pytest تعمل على المعالج فقط.
خط المعالجة مُتحقَّق منه من البداية إلى النهاية: في فحص سلامة بالإفراط في الملاءمة (overfit) على بيانات حقيقية، حفظ النموذج 8 عينات وأعاد توليد نصوصها البرمجية بدقة شبه تامة. تدريب كامل على وحدة معالجة رسومية وتقييم الكود المولَّد (نسبة الصياغة الصالحة وIoU مقابل المجسم الحقيقي) هما المرحلة التالية.
السؤال
هل يستطيع مشفِّر ResNet مصمَّم خصيصًا ومفكِّك ترميز Transformer ذاتي الانحدار أن يتعلما ترجمة صور التصميم بمساعدة الحاسوب مباشرة إلى برامج CadQuery قابلة للتعديل؟
أهم الميزات
- يترجم تصييرًا بحجم 224x224 لقطعة تصميم بمساعدة الحاسوب إلى نص Python برمجي قابل للتنفيذ بلغة CadQuery.
- يحتفظ بـ 49 رمزًا مكانيًا للصورة حتى يستطيع مفكِّك الترميز النظر إلى أجزاء مختلفة من الصورة لأسطر مختلفة من الكود.
- يتدرب على المعالج، أو وحدة معالجة رسومية واحدة، أو عدة وحدات، أو عدة أجهزة عبر DDP، مع الدقة المختلطة وتراكم التدرج ونقاط حفظ قابلة للاستئناف.
- يولّد الكود من سطر الأوامر أو من Python بفك ترميز جشع أو بأخذ عينات بدرجة الحرارة وtop-k.
- يأتي بحزمة اختبارات تعمل دون اتصال وعلى المعالج فقط، تتحقق من السببية والحشو (padding) وإخفاء دالة الخسارة وإعادة تحميل نقاط الحفظ ومن أن عمليتي DDP تنتهيان بأوزان متطابقة.
كيف يعمل
تحضير البيانات
يُعاد تحجيم كل تصيير من GenCAD-Code إلى 224x224 ويُطبَّع؛ ويُقطَّع كل نص برمجي إلى رموز بـ BPE الخاص بـ GPT-2 ويُغلَّف على هيئة BOS ثم الكود ثم EOS، مع رمز حشو مخصص حتى يتعلم النموذج متى يتوقف.
تشفير الصورة
ينتج ResNet18 بدون تجميع (pooling) شبكة سمات 7x7، تُبسَّط إلى 49 رمزًا للصورة بمواضع ثنائية الأبعاد متعلَّمة.
فك ترميز الكود
يستخدم مفكِّك ترميز Transformer من 6 طبقات بتطبيع مسبق (pre-norm) انتباهًا ذاتيًا مقنَّعًا على الكود المكتوب حتى الآن وانتباهًا متقاطعًا على رموز الصورة، مع ربط طبقة الإخراج بتضمين الرموز.
التدريب
إنتروبيا متقاطعة للرمز التالي بالإجبار التعليمي (teacher forcing)، وAdamW بمعدلي تعلم منفصلين للمشفِّر ومفكِّك الترميز، وإحماء خطي ثم تناقص جيب تمام، وقصّ للتدرج.
التوليد
تُشفَّر الصورة مرة واحدة، ثم يضيف مفكِّك الترميز رمزًا واحدًا في كل مرة حتى تُصدر كل متتالية EOS أو تبلغ حد الرموز.
أمثلة
المدخل
Overfit sanity check: 8 real GenCAD-Code samples, 26.4M-parameter model, 150 steps on a laptop CPU (about 15 minutes)
المخرج
Validation loss fell from 10.64 to 0.06; reloading the checkpoint and generating from the 8 training images reproduced the scripts at 98-100% token accuracy (4 of 8 exactly).
التقنيات المستخدمة
النموذج وحلقة التدريب وDDP والدقة المختلطة
ResNet18
مشفِّر صور ينتج شبكة سمات 7x7
Transformer
مفكِّك ترميز ذاتي الانحدار بانتباه متقاطع على الصورة
تحميل أزواج الصورة/النص البرمجي من GenCAD-Code
اختبارات دون اتصال على المعالج للبيانات والنموذج والتدريب
العمود الفقري ResNet18 وتحويلات الصور
مقطِّع الرموز BPE الخاص بـ GPT-2 لكود CadQuery
إطلاق التدريب متعدد وحدات المعالجة الرسومية ومتعدد العقد
فحوصات التدقيق (linting) والتنسيق
ما تعلمته
- الترجمة من الرؤية إلى الكود تتطلب بقاء السمات المكانية متاحة في كل خطوة من خطوات فك الترميز
- خط أساس بالإفراط في الملاءمة على عينة ضئيلة هو البوابة الصحيحة قبل التدريب المكلف على مجموعة البيانات الكاملة
الحدود
- التدريب وتوليد نقاط الحفظ (checkpoints) وتقييم VSR/IoU هي المرحلة التالية
- المستودع خاص حاليًا