المدونة / هندسة

ملفات PNG الشفافة تكسر مكبّرات الذكاء الاصطناعي: علة الهالة الداكنة

· دراسة علة، مع قياس الإصلاح · الموضوع: خط الإنتاج ×4

أدخل ملف PNG بشفافية (صورة مقصوصة، أو ملصق مصدَّر) إلى أي مكبّر بالذكاء الاصطناعي تقريبًا فيظهر عيب محدد: هالة داكنة تزحف بضعة بكسلات إلى داخل الموضوع من كل حافة شفافة، وخلفها حلقة تجاوز فاتحة باهتة. تختبئ على المعاينات الداكنة وتصرخ على الصفحات البيضاء. أعدنا إنتاجها على خطنا نحن، وقسنا شكلها بالضبط (أخدود بعمق −94 لوما، وعرض ثلاثة من بكسلات النموذج)، وتتبعناها إلى رحلة الذهاب والإياب عبر ألفا المضروبة مسبقًا في منصة الويب، وقسنا الإصلاح الذي نطرحه: ملء بالغمر بتعقيد O(n) يزيل 98% من الخطأ قبل أن يعمل النموذج أصلًا.

−93.9خطأ اللوما، أول حلقة بكسلاتالمسار الساذج مقابل المرجع النظيف
≈3 pxعرض الأخدود على مقياس النموذجثم حلقة تجاوز بمقدار +17
63×تقليص الخطأ بفضل الإصلاحمن −62.9 إلى 1.1 في المتوسط، نطاق 0–3 px
O(n)تكلفة الإصلاحمرور BFS واحد، دون استدلال إضافي

كل رقم في هذه الملاحظة قيس على كود خط الإنتاج: النماذج نفسها، والحسابات نفسها. السجلات الخام لكل صورة: e3_alpha.json.

1 · من أين يأتي الأسود

تخزّن لوحة الرسم ثنائية الأبعاد في الويب البكسلات مضروبة مسبقًا: ليس (r, g, b, α) بل (rα, gα, bα, α). يعشق التركيب هذه الصيغة (تصبح مؤثرات Porter–Duff[1] عمليات ضرب وجمع مفردة)، لكنها فاقدة في موضع واحد بالضبط. قراءة البكسلات مجددًا تعني قسمة اللون على α:

r = ⌊ rα / α ⌉, undefined at α = 0(1)

عند α = 0 يكون ذلك 0/0، وجواب المنصة[2] هو أنه لم يبقَ شيء يمكن استعادته: ضُرب اللون في صفر لحظة لمس لوحة الرسم. تعيد getImageData القيمة RGB (0, 0, 0) تحت كل بكسل شفاف بالكامل. لقد صار الحقل الشفاف في صورتك المقصوصة بصمت بحيرة من الأسود الخالص.

لا يرى الإنسان البحيرة أبدًا: ألفا تخفيها. أما شبكة الدقة الفائقة فليست إنسانًا: تستهلك ثلاث قنوات RGB ولا ألفا، فترى صورة مغروسة في فانتابلاك، وكل بكسل مخرج قرب الحد يُحسب من حقل استقبال يغوص في البحيرة. لا يبقى الأسود في مكانه؛ بل ينتشر إلى الداخل عبر حزمة الالتفافات[3].

2 · قياس الهالة

ساذج (RGB=0 في لوحة الرسم)نزف ألفا (طريقتنا)
-100-75-50-2502513581216مسافة L1 إلى داخل الموضوع (px، مقياس النموذج)Δ اللوما مقابل المرجعمثالي
الشكل 1. الهالة، مرسومة كمنحنى. المسار الساذج (بنفسجي): أخدود بعمق −94 لوما في أول حلقة بكسلات داخل الموضوع، و−90 عند 2 px، و−54 عند 3 px، ثم حلقة تجاوز بمقدار +17 عند 5 px تتلاشى إلى الصفر بحلول ~13 px؛ تلوث داكن عبر حقل استقبال محدود، شحذته شبكة GAN إلى حافة. المسار الإنتاجي (أخضر): لا يسوء أبدًا عن 1.5 مستوى لوما. المسافات على مقياس النموذج؛ اضربها في 4 لبكسلات المخرج.
ثلاث لوحات: المدخل المقصوص معروضًا فوق رقعة شطرنج، والتكبير الساذج بحافة داكنة حول الشكل البيضاوي، والتكبير النظيف بنزف ألفا
الشكل 2. المدخل بشفافية (يسارًا)، والمسار الساذج (وسطًا)، والمسار الإنتاجي (يمينًا)، مركّبة فوق أرضية فاتحة. تُقرأ حافة اللوحة الوسطى على أنها «حافة متسخة» خفيفة بحجم الصورة المصغرة، وهذا بالضبط سبب طرح هذه العلة كثيرًا: تختبئ حتى يضع مستخدم الملصق على خلفية فاتحة.

قياس واحد مخالف للحدس فعلًا: توقعنا أن يهلوس النموذج نفايات داخل المنطقة الشفافة، «يحسّن الفراغ». لكنه لا يفعل. أسود مسطح يدخل، أسود مسطح يخرج (طاقة تدرج 0.1). الضرر ليس ما يخترعه النموذج في الفراغ؛ بل ما يفعله الفراغ بالموضوع عبر الحد. وهذا مهم لأنه يعني أن تقنيع المخرج لا يستطيع إنقاذك: البكسلات التالفة داخل المنطقة المرئية، تحت α > 0.

3 · الإصلاح: أغمر الفراغ بلون معقول

إن كان على النموذج أن يرى RGB تحت α = 0، فاجعله RGB يواصل الموضوع. قبل الاستدلال نشغّل نزف ألفا: غمر بالبحث بالعرض أولًا متعدد المصادر من كل بكسل غير شفاف، حيث يأخذ كل بكسل شفاف متوسط لون جيرانه الأربعة الملونين سلفًا:

c(p) = mean{ c(q) : q ∈ N₄(p), q colored },  p in BFS order(2)

بذر الطابور بحلقة الحد والمعالجة بنظام FIFO يضمنان أن كل بكسل يُسحب من الطابور له جار ملون واحد على الأقل (من أدخله في الطابور انتهى أولًا)، فيلوّن مرور واحد بتعقيد O(n) الفراغ كله: مسافة غير محدودة، بما في ذلك الثقوب المغلقة. لا تُلمس بايتات ألفا أبدًا؛ وتحتفظ البكسلات نصف الشفافة بلونها هي. يرى النموذج عندئذٍ استمرارًا سلسًا بدلًا من جرف، وتُعاد ألفا (المكبّرة على حدة) في طريق الخروج. الأثر المقيس: يهبط خطأ نطاق 0–3 px من -62.9 إلى 1.1 مستوى لوما، أي تقليص بمقدار 63×، دون تكلفة زمن تشغيل قابلة للقياس.

تفصيل حافة إعادتي البناء الساذجة والمنزوفة، إضافة إلى خريطة حرارية للفرق المضخَّم تُظهر الهالة ملتصقة بحد ألفا
الشكل 3. تفصيل الحافة: المسار الساذج (يسارًا) بجانب المسار المنزوف (وسطًا)، وعلى اليمين |الفرق| بين إعادتي البناء، مضخَّمًا ×8. تتبع الهالة حد ألفا ولا شيء غيره؛ وبعيدًا عن الحافة المخرجان متطابقان، وهذا هو الإصلاح يتصرف تمامًا كما صُمم.

4 · ماذا يعني هذا لصورك

إن كنت تستخدم هذا الموقع: لا شيء؛ تسلك ملفات PNG الشفافة المسار المقيس أعلاه في الخط السحابي ومحرك الاحتياط داخل المتصفح على السواء، لأن كليهما يتشارك المكتبة الخالصة نفسها. وإن كنت تبني أدوات صور: عامل كل نموذج يعمل بـRGB فقط على أنه يعاني حساسية من الأصفار المضروبة مسبقًا: انزف قبل الاستدلال (الغمر أعلاه ~30 سطرًا دون اعتماديات)، أو ركّب على لون صلب واقبل انحياز التركيب. وإن كنت تشخّص حافة داكنة غامضة في مخرج مُحسِّن أحدهم، فأنت تعرف الآن البصمة: أخدود بعرض بضعة بكسلات، وحلقة تجاوز خلفه، وارتباط تام بحد ألفا. الأرقام الثلاثة التي تستحق التذكر: −94، و3 px، و63×.

المراجع

  1. Porter, T., & Duff, T. (1984). Compositing Digital Images. SIGGRAPH '84, Computer Graphics 18(3), 253–259. (The premultiplied-alpha compositing algebra.) dl.acm.org
  2. WHATWG HTML Living Standard, the 2D canvas element: premultiplied backing stores and the lossy getImageData round-trip for non-opaque pixels. html.spec.whatwg.org
  3. Wang, X., Xie, L., Dong, C., & Shan, Y. (2021). Real-ESRGAN: Training Real-World Blind Super-Resolution with Pure Synthetic Data. ICCV Workshops. arXiv:2107.10833. arxiv.org
  4. Lange, D. (1936). “Migrant Mother” (Destitute pea pickers in California), Farm Security Administration. Public domain, via Wikimedia Commons. commons.wikimedia.org
  5. ONNX Runtime: the inference engine both our server (CPU) and in-browser (WebGPU/WASM) engines run on. onnxruntime.ai