نموذج الانتشار الكامن

نموذج الانتشار الكامن ( LDM ) [ 1 ] هو بنية نموذج انتشار تم تطويرها بواسطة مجموعة CompVis (رؤية الكمبيوتر والتعلم) [ 2 ] في جامعة لودفيغ ماكسيميليان في ميونخ . [ 3 ]

طُرحت نماذج الانتشار (DMs) في عام 2015، ويتم تدريبها بهدف إزالة التشويش المتكرر (عادةً ما يكون تشويشًا غاوسيًا ) من صور التدريب. يُعد نموذج الانتشار الكامن (LDM) تحسينًا لنموذج الانتشار القياسي من خلال إجراء نمذجة الانتشار في فضاء كامن ، والسماح بتكييف الانتباه الذاتي والانتباه المتبادل.

تُستخدم نماذج الانتشار الخطي (LDMs) على نطاق واسع في نماذج الانتشار العملية. على سبيل المثال، استندت إصدارات Stable Diffusion من 1.1 إلى 2.1 إلى بنية LDM. [ 4 ]

سجل الإصدارات

طُرحت نماذج الانتشار في عام 2015 كطريقة لتعلم نموذج قادر على أخذ عينات من توزيع احتمالي شديد التعقيد. وقد استخدمت هذه النماذج تقنيات من الديناميكا الحرارية غير المتوازنة ، وخاصة الانتشار . [ 5 ] وقد رافق ذلك تطبيق برمجي في ثيانو . [ 6 ]

اقترحت ورقة بحثية نُشرت عام 2019 شبكة النقاط الشرطية للضوضاء (NCSN) أو مطابقة النقاط باستخدام ديناميكيات لانجفين (SMLD). [ 7 ] وقد أُرفقت بالورقة حزمة برمجية مكتوبة بلغة PyTorch متاحة على GitHub. [ 8 ]

اقترحت ورقة بحثية نُشرت عام 2020 [ 9 ] نموذجًا احتماليًا لانتشار إزالة التشويش (DDPM)، وهو نموذج يُحسّن الطريقة السابقة باستخدام الاستدلال التبايني . وقد أُرفقت بالورقة حزمة برمجية مكتوبة بلغة TensorFlow، متاحة على GitHub. [ 10 ] أُعيد تنفيذها باستخدام PyTorch بواسطة lucidrains. [ 11 ] [ 12 ]

في 20 ديسمبر 2021، نُشرت ورقة LDM على موقع arXiv، [ 13 ] ونُشرت مستودعات Stable Diffusion [ 14 ] وLDM [ 15 ] على GitHub. مع ذلك، بقيت على حالها تقريبًا. لم تُضَف معلومات جوهرية حول Stable Diffusion v1 إلى GitHub إلا في 10 أغسطس 2022. [ 16 ]

جميع إصدارات Stable Diffusion (SD) من 1.1 إلى XL كانت عبارة عن تجسيدات خاصة لبنية LDM.

أصدرت شركة CompVis الإصدارات من SD 1.1 إلى 1.4 في أغسطس 2022. لا يوجد إصدار "1.0". كان SD 1.1 نموذجًا لنمذجة التعلم (LDM) تم تدريبه على مجموعة بيانات laion2B-en. تم تحسين SD 1.1 إلى الإصدار 1.2 باستخدام صور ذات جودة جمالية أعلى. تم تحسين SD 1.2 إلى الإصدارات 1.3 و1.4 و1.5، مع حذف 10% من عملية تكييف النص، لتحسين التوجيه بدون استخدام المصنف. [ 17 ] [ 18 ] أصدرت RunwayML الإصدار SD 1.5 في أكتوبر 2022. [ 18 ]

بنيان

بينما يمكن لنموذج البيانات الخطية (LDM) أن يعمل على توليد بيانات عشوائية مشروطة ببيانات عشوائية، ولتوضيح ذلك بشكل ملموس، فإننا نصف طريقة عمله في توليد الصور من النصوص المشروطة.

يتكون نموذج LDM من مشفر تلقائي متغير (VAE)، وشبكة U-Net معدلة ، ومشفر نصي.

يقوم مُشفِّر VAE بضغط الصورة من فضاء البكسل إلى فضاء كامن أصغر حجمًا ، ما يُتيح التقاط معنى دلالي أكثر جوهرية للصورة. ويُطبَّق ضجيج غاوسي بشكل تكراري على التمثيل الكامن المضغوط أثناء الانتشار الأمامي. أما وحدة U-Net، المُكوَّنة من بنية ResNet الأساسية ، فتُزيل الضجيج من مُخرَج الانتشار الأمامي عكسيًا للحصول على تمثيل كامن. وأخيرًا، يُولِّد مُفكِّك VAE الصورة النهائية بتحويل التمثيل مرة أخرى إلى فضاء البكسل. [ 4 ]

يمكن ربط خطوة إزالة التشويش بسلسلة نصية أو صورة أو أي وسيلة أخرى. تُعرَض بيانات الربط المُشفَّرة لشبكات U-Net لإزالة التشويش عبر آلية الانتباه المتبادل . [ 4 ] بالنسبة للربط بالنص، يُستخدم مُشفِّر نصي مُدرَّب مسبقًا من نوع CLIP ViT-L/14 لتحويل النصوص إلى فضاء تضمين. [ 3 ]

المشفر التلقائي المتغير

لضغط بيانات الصور، يتم أولاً تدريب نموذج التشفير التلقائي التبايني (VAE) على مجموعة بيانات من الصور. يأخذ جزء التشفير في النموذج صورة كمدخل ويُخرج تمثيلاً كامناً منخفض الأبعاد للصورة. يُستخدم هذا التمثيل الكامن بعد ذلك كمدخل لشبكة U-Net. بمجرد تدريب النموذج، يُستخدم المُشفِّر لترميز الصور إلى تمثيلات كامنة، ويُستخدم المُفكِّك لفك ترميز هذه التمثيلات الكامنة وتحويلها إلى صور.

لنفترض أن المشفر والمفكك الخاصين بـ VAE هماهـ،د{\displaystyle E,D}.

لترميز صورة RGB، يتم تقسيم قنواتها الثلاث على القيمة القصوى، مما ينتج عنه موتر.x{\displaystyle x}شكل(3،512،512){\displaystyle (3,512,512)}مع وجود جميع الإدخالات ضمن النطاق[0،1]{\displaystyle [0,1]}المتجه المشفر هو0.18215×هـ(2x-1){\displaystyle 0.18215\times E(2x-1)}، مع شكل(4،64،64){\displaystyle (4,64,64)}حيث يمثل 0.18215 مُعاملًا فائقًا، اختاره المؤلفون الأصليون لتبييض المتجه المُشفّر تقريبًا إلى تباين يساوي واحدًا. وعلى العكس من ذلك، بالنظر إلى موتر كامنy{\displaystyle y}الصورة التي تم فك تشفيرها هي(د(y/0.18125)+1)/2{\displaystyle (D(y/0.18125)+1)/2}ثم يتم قصها إلى النطاق[0،1]{\displaystyle [0,1]}[ 19 ] [ 20 ]

في النسخة المُطبقة، [ 3 ] : ldm/models/autoencoder.py ، يكون المُشفِّر عبارة عن شبكة عصبية التفافية (CNN) مزودة بآلية انتباه ذاتي واحدة قرب النهاية. ويأخذ موترًا ذا شكل(3،ح،دبليو){\displaystyle (3,H,W)}ويُخرج موترًا ذا شكل(8،ح/8،دبليو/8){\displaystyle (8,H/8,W/8)}، وهو عبارة عن سلسلة من المتوسط ​​والتباين المتوقعين للمتجه الكامن، كل منهما على شكل(4،ح/8،دبليو/8){\displaystyle (4,H/8,W/8)}يتم استخدام التباين في التدريب، ولكن بعد التدريب، عادة ما يتم أخذ المتوسط ​​فقط، مع تجاهل التباين.

وحدة فك التشفير هي أيضًا شبكة عصبية تلافيفية (CNN) مزودة بآلية انتباه ذاتي واحدة قرب نهايتها. وهي تأخذ شكل موتر.(4،ح/8،دبليو/8){\displaystyle (4,H/8,W/8)}ويُخرج موترًا ذا شكل(3،ح،دبليو){\displaystyle (3,H,W)}.

يو-نت

يستقبل العمود الفقري لشبكة U-Net الأنواع التالية من المدخلات:

  • مصفوفة صور كامنة ، ينتجها مُشفِّر VAE. أبعادها(قناة،عرض،ارتفاع){\displaystyle ({\text{channel}},{\text{width}},{\text{height}})}. عادة،(قناة،عرض،ارتفاع)=(4،64،64){\displaystyle ({\text{channel}},{\text{width}},{\text{height}})=(4,64,64)}.
  • متجه تضمين الخطوة الزمنية ، الذي يُخبر العمود الفقري بمقدار التشويش الموجود في الصورة. على سبيل المثال، تضمين الخطوة الزمنيةت=0{\displaystyle t=0}يشير ذلك إلى أن الصورة المدخلة خالية من التشويش بالفعل، بينمات=100{\displaystyle t=100}وهذا يعني وجود ضوضاء كثيرة.
  • سلسلة متجهات تضمين الوسائط ، التي تُشير إلى البنية الأساسية بشروط إضافية لإزالة التشويش. على سبيل المثال، في توليد الصور من النصوص، يُقسّم النص إلى سلسلة من الرموز، ثم يُشفّر بواسطة مُشفّر نصي، مثل مُشفّر CLIP ، قبل إدخاله إلى البنية الأساسية. كمثال آخر، يمكن معالجة صورة مُدخلة بواسطة مُحوّل الرؤية إلى سلسلة من المتجهات، والتي يمكن استخدامها بعد ذلك لتهيئة البنية الأساسية لمهام مثل توليد صورة بنفس النمط.

تُنتج كل عملية تشغيل لشبكة U-Net الأساسية متجه ضوضاء متوقع. يُصغّر هذا المتجه ويُطرح من مصفوفة الصورة الكامنة، مما ينتج عنه صورة كامنة أقل ضوضاءً. تُكرر عملية إزالة الضوضاء وفقًا لجدول زمني محدد ("جدول الضوضاء")، ثم يُعالج مُفكِّك VAE مخرجات الخطوة الأخيرة للحصول على الصورة النهائية.

آلية انتباه متقاطع واحدة كما تظهر في نموذج لغة Transformer القياسي
مخطط كتلي لبنية المحول الكاملة. المكدس على اليمين هو وحدة فك تشفير قياسية لما قبل LN Transformer، وهي في الأساس مطابقة لـ SpatialTransformer.

على غرار شبكة U-Net القياسية ، تتكون البنية الأساسية لشبكة U-Net المستخدمة في SD 1.5 بشكل أساسي من طبقات تصغير متبوعة بطبقات تكبير. مع ذلك، تحتوي البنية الأساسية لشبكة U-Net على وحدات إضافية تُمكّنها من معالجة التضمين. كمثال توضيحي، سنصف طبقة تصغير واحدة في البنية الأساسية:

  • تتم معالجة المصفوفة الكامنة والتضمين الزمني بواسطة ResBlock:
    • تتم معالجة المصفوفة الكامنة بواسطة طبقة التفافية .
    • تتم معالجة متجه تضمين الوقت بواسطة شبكة تغذية أمامية ذات طبقة واحدة ، ثم تتم إضافته إلى المصفوفة السابقة (يتم بثها على جميع وحدات البكسل).
    • تتم معالجة هذا بواسطة طبقة التفافية أخرى، ثم يتم تضمين الوقت مرة أخرى.
  • تتم معالجة المصفوفة الكامنة وتسلسل متجه التضمين بواسطة SpatialTransformer، وهو في الأساس وحدة فك تشفير قياسية قبل LN Transformer بدون إخفاء سببي.
    • في وحدات الانتباه المتقاطع، تعمل المصفوفة الكامنة نفسها كسلسلة استعلام، حيث يمثل كل بكسل متجه استعلام واحد. على سبيل المثال، إذا كانت أبعاد المصفوفة الكامنة في هذه الطبقة من شبكة U-Net(128،32،32){\displaystyle (128,32,32)}ثم يكون تسلسل الاستعلام قد1024{\displaystyle 1024}متجهات، كل منها يحتوي على128{\displaystyle 128}الأبعاد. يعمل تسلسل متجه التضمين كتسلسل مفتاح وكتسلسل قيمة.
    • عند عدم إدخال أي تسلسل متجه تضمين، فإن كتلة الانتباه المتبادل تُفعّل الانتباه الذاتي افتراضيًا، حيث تعمل المصفوفة الكامنة كاستعلام ومفتاح وقيمة. [ 21 ] : السطر 251

بلغة شبه رمزية،

دالة ResBlock ( x , time , residual_channels ): x_in = x time_embedding = feedforward_network ( time ) x = concatenate ( x , residual_channels ) x = conv_layer_1 ( activate ( normalize_1 ( x ))) + time_embedding x = conv_layer_2 ( dropout ( activate ( normalize_2 ( x )))) return x_in + xدالة SpatialTransformer ( x , cond ): x_in = x x = normalize ( x ) x = proj_in ( x ) x = cross_attention ( x , cond ) x = proj_out ( x ) return x_in + xدالة unet ( x , time , cond ) : residual_channels = [ ] for resblock , spatialtransformer in downscaling_layers : x = resblock ( x , time ) residual_channels.append ( x ) x = spatialtransformer ( x , cond )x = middle_layer.resblock_1 ( x , time ) x = middle_layer.spatialtransformer ( x , time ) x = middle_layer.resblock_2 ( x , time )لكل resblock و spatialtransformer في upscaling_layers : residual = residual_channels.pop ( ) x = resblock ( concatenate ( x , residual ) , time ) x = spatialtransformer ( x , cond )إرجاع x

يمكن الاطلاع على التصميم المعماري المفصل في [ 22 ] [ 23 ]

التدريب والاستدلال

يتم تدريب نموذج LDM باستخدام سلسلة ماركوف لإضافة ضوضاء تدريجيًا إلى صور التدريب. ثم يُدرَّب النموذج على عكس هذه العملية، بدءًا بصورة مشوشة وإزالة الضوضاء تدريجيًا حتى يستعيد الصورة الأصلية. وبشكل أكثر تحديدًا، يمكن وصف عملية التدريب على النحو التالي:

  • عملية الانتشار الأمامي: بالنظر إلى صورة حقيقيةx0{\displaystyle x_{0}}، سلسلة من المتغيرات الكامنةx1:تي{\displaystyle x_{1:T}}يتم توليدها عن طريق إضافة ضوضاء غاوسية تدريجيًا إلى الصورة، وفقًا لـ "جدول ضوضاء" محدد مسبقًا.
  • عملية الانتشار العكسي: بدءًا من عينة ضوضاء غاوسيةxتي{\displaystyle x_{T}}يتعلم النموذج التنبؤ بالضوضاء المضافة في كل خطوة، وذلك لعكس عملية الانتشار والحصول على إعادة بناء للصورة الأصلية.x0{\displaystyle x_{0}}.

يتم تدريب النموذج لتقليل الفرق بين الضوضاء المتوقعة والضوضاء الفعلية المضافة في كل خطوة. ويتم ذلك عادةً باستخدام دالة خسارة متوسط ​​مربع الخطأ (MSE).

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

راجع صفحة نموذج الانتشار لمزيد من التفاصيل.

انظر أيضاً

مراجع

  1. رومباخ، روبن؛ بلاتمان، أندرياس؛ لورنز، دومينيك؛ إيسر، باتريك؛ أومر، بيورن (2022). توليف الصور عالية الدقة باستخدام نماذج الانتشار الكامنة . مؤتمر IEEE/CVF حول رؤية الحاسوب والتعرف على الأنماط (CVPR) 2022. الصفحات 10684-10695 . 
  2. "الصفحة الرئيسية" . مجموعة رؤية الحاسوب والتعلم . تم الاسترجاع في 2024-09-05 .
  3. 1 2 3 "مستودع نشر مستقر على GitHub" . مجموعة أبحاث الرؤية الآلية والتعلم الآلي (CompVis)، جامعة لودفيغ ماكسيميليان في ميونخ. 17 سبتمبر 2022. مؤرشف من الأصل في 18 يناير 2023. تم الاطلاع عليه في 17 سبتمبر 2022 .
  4. 1 2 3 العمار، جاي. "الانتشار المستقر المصور" . jalammar.github.io . مؤرشف من الأصل في 1 نوفمبر 2022. تم الاسترجاع في 31 أكتوبر 2022 .
  5. سول-ديكستين، ياشا؛ فايس، إريك؛ ماهيسواراناثان، نيرو؛ جانجولي، سوريا (2015-06-01). "التعلم العميق غير الخاضع للإشراف باستخدام الديناميكا الحرارية غير المتوازنة" (ملف PDF) . وقائع المؤتمر الدولي الثاني والثلاثين للتعلم الآلي . 37. PMLR: 2256–2265 . arXiv : 1503.03585 .
  6. ^ سوهل ديكستين ، جاشا (2024/09/01). "Sohl-Dickstein/نماذج الانتشار الاحتمالية" . جيثب . تم الاسترجاع بتاريخ 2024-09-07 .
  7. "ermongroup/ncsn" . ermongroup. 2019. تم الاسترجاع في 2024-09-07 .
  8. سونغ، يانغ؛ إرمون، ستيفانو (2019). "النمذجة التوليدية من خلال تقدير تدرجات توزيع البيانات" . التطورات في أنظمة معالجة المعلومات العصبية . 32. كوران أسوشيتس، إنك. arXiv : 1907.05600 .
  9. هو، جوناثان؛ جاين، أجاي؛ أبيل، بيتر (2020). "إزالة التشويش من نماذج الانتشار الاحتمالية" . التطورات في أنظمة معالجة المعلومات العصبية . 33. كوران أسوشيتس، إنك: 6840-6851 .
  10. ^ هو ، جوناثان (20 يونيو 2020). "هوجوناثانهو/انتشار" . جيثب . تم الاسترجاع بتاريخ 2024-09-07 .
  11. وانغ، فيل (2024-09-07). "lucidrains/denoising-diffusion-pytorch" . جيت هاب . تم الاسترجاع في 2024-09-07 .
  12. "نموذج الانتشار المشروح" . huggingface.co . تم ​​الاطلاع عليه بتاريخ 2024-09-07 .
  13. ^ رومباك ، روبن. بلاتمان، أندرياس. لورينز، دومينيك؛ إيسر، باتريك؛ عمر ، بيورن (2021/12/20). “توليف الصور عالية الدقة مع نماذج الانتشار الكامنة”. أرخايف : 2112.10752 [ cs.CV ].
  14. "تحديث ملف README.md · CompVis/stable-diffusion@17e64e3" . GitHub . تم الاطلاع عليه بتاريخ 2024-09-07 .
  15. "تحديث ملف README.md · CompVis/latent-diffusion@17e64e3" . GitHub . تم الاطلاع عليه بتاريخ 2024-09-07 .
  16. "الانتشار المستقر · CompVis/stable-diffusion@2ff270f" . GitHub . تم الاسترجاع في 2024-09-07 .
  17. "CompVis (CompVis)" . huggingface.co . 2023-08-23 . تم الاطلاع عليه بتاريخ 2024-03-06 .
  18. 1 2 "runwayml/stable-diffusion-v1-5 · Hugging Face" . huggingface.co . مؤرشف من الأصل في 21 سبتمبر 2023. تم الاسترجاع في 17 أغسطس 2023 .
  19. "شرح عامل 0.18215 في دالة textual_inversion؟ · المشكلة رقم 437 · huggingface/diffusers" . GitHub . تم الاطلاع عليه بتاريخ 19 سبتمبر 2024 .
  20. "diffusion-nbs/Stable Diffusion Deep Dive.ipynb at master · fastai/diffusion-nbs" . GitHub . تم الاطلاع عليه بتاريخ 19-09-2024 .
  21. "latent-diffusion/ldm/modules/attention.py at main · CompVis/latent-diffusion" . GitHub . تم الاسترجاع في 2024-09-09 .
  22. "شبكة يو للانتشار المستقر" . شبكة يو للانتشار المستقر . تم الاسترجاع في 31 أغسطس 2024 .
  23. "محول لشبكة الانتشار المستقر U-Net" . محول لشبكة الانتشار المستقر U-Net . تم الاسترجاع في 2024-09-07 .

للمزيد من القراءة