HyperAIHyperAI

Command Palette

Search for a command to run...

نموذج OCR ذكي بمواصفات قياسية (SOTA) يعمل محليًا بفضل Core ML وdots.ocr

في عام 2025، أصبح من الممكن بشكل متزايد تشغيل نماذج ذكية للغاية مباشرة على الأجهزة، دون الحاجة إلى اتصال بالشبكة أو استخدام واجهات برمجة تطبيقات خارجية. تُعد نموذج dots.ocr، الذي طوّرته RedNote ويتكون من 3 مليارات معلمة، من أبرز الأمثلة على هذا التطور، حيث تفوق أداءه نموذج Gemini 2.5 Pro في اختبار OmniDocBench، مما يجعله خيارًا قويًا لتطبيقات معالجة النصوص البصرية (OCR) دون تنازلات. لكن لتشغيل مثل هذه النماذج على الأجهزة، يجب التغلب على تحديات متعلقة بالموارد المحدودة، مثل القدرة الحسابية واستهلاك الطاقة. هنا يأتي دور "وحدة المعالجة العصبية" (Neural Engine) في أجهزة آبل، التي تم تضمينها منذ 2017، وتُعد أكثر كفاءة بـ12 مرة من المعالج المركزي (CPU) و4 مرات من وحدة معالجة الرسومات (GPU) من حيث استهلاك الطاقة. لكن المشكلة تكمن في أن وحدة المعالجة العصبية مُتاحة فقط عبر إطار عمل Core ML، وهو إطار مغلق المصدر. كما أن تحويل النماذج من PyTorch إلى Core ML يتطلب تدقيقًا دقيقًا، خاصة عند التعامل مع ميزات متقدمة مثل الانتباه الديناميكي أو التحويلات المعقدة. لحسن الحظ، تقدم آبل إطارًا آخر هو MLX، الذي يدعم وحدة معالجة الرسومات (GPU) ويوفر مرونة أكبر، ويمكن استخدامه بالتزامن مع Core ML. في هذه السلسلة الثلاثية، يتم توضيح عملية تحويل dots.ocr لتشغيله على الجهاز، باستخدام خليط من Core ML لتشغيل المُشفّر البصري (Vision Encoder) وMLX لتشغيل نموذج اللغة (LM Backbone). النموذج يتكوّن من مُشفّر بصري بـ1.2 مليار معلمة مبني على معمارية NaViT، ونموذج لغة Qwen2.5-1.5B. الخطوة الأولى كانت فهم هيكل النموذج وتبسيطه. تم تقليل التعقيد بمعالجة صورة واحدة فقط، وحذف ميزات غير ضرورية مثل أنواع الانتباه المختلفة، مع التركيز على scaled_dot_product_attention (sdpa) المدعوم من Core ML. كما تم التعامل مع تحذيرات مثل "Sliding Window Attention غير مدعوم"، والتي لا تؤثر على الوظيفة. في خطوة التحويل، تم استخدام torch.jit.trace كأداة مُثلى لتحويل النموذج. واجهت العملية عدة مشكلات: أولها تناقض في أنواع البيانات في عملية الضرب المصفوفي (matmul) بسبب استخدام int32 بدلًا من float32 في torch.arange. تم حلها بإضافة تحويل نوع (cast) بعد arange. ثم ظهر خطأ في repeat_interleave بسبب استخدام const [None]، والذي نتج عن منطق تمرير بيانات متعددة الصور. تم حلها بحذف هذه الدالة نظرًا لأن النموذج يعالج صورة واحدة فقط. بعد ذلك، ظهر خطأ في inplace_fill بسبب دعم غير كافٍ للمؤشرات الديناميكية، وتم حلها بتبديل القناع المنطقي (bool) بقناة عائمة (float) من الصفر، بما يتماشى مع متطلبات Neural Engine. أكبر تحدي كان في دالة reshape التي فشلت بسبب عدم توافق الأحجام، والتي نتجت عن استخدام حلقة for على مصفوفة ديناميكية. تم حلها بحذف الحلقة واستبدالها بمعالجة الحالة الثابتة (h, w) للصورة الواحدة. بعد كل هذه التعديلات، نجح التحويل بنجاح، مع فرق دقيق جدًا بين النموذج الأصلي ونسخة Core ML (أقصى فرق: 0.006، متوسط الفرق: 1.1e-5). لكن النتيجة كانت غير عملية: حجم النموذج تجاوز 5 جيجابايت، ووقت التمرير الأمامي تجاوز ثانية واحدة. هذا غير مقبول للتطبيقات الحية. في الجزء الثاني من السلسلة، سيتم التركيز على دمج Core ML مع MLX لتشغيل النموذج الكامل على الجهاز، ثم في الجزء الثالث، سيتم تطبيق تحسينات متقدمة مثل التقليل من الدقة (quantization) والتعامل مع الأحجام الديناميكية، لتمكين التشغيل الفعّال على وحدة المعالجة العصبية.

الروابط ذات الصلة

نموذج OCR ذكي بمواصفات قياسية (SOTA) يعمل محليًا بفضل Core ML وdots.ocr | القصص الشائعة | HyperAI