T2I-Adapter هو نموذج فعال للتوصيل والتشغيل يوفر إرشادات إضافية لنماذج تحويل النص إلى صورة المدربة مسبقًا مع تجميد نماذج تحويل النص إلى صورة الأصلية الكبيرة. يقوم T2I-Adapter بمحاذاة المعرفة الداخلية في نماذج T2I مع إشارات التحكم الخارجية. يمكننا تدريب محولات مختلفة وفقًا لظروف مختلفة وتحقيق تأثيرات تحكم وتحرير غنية.
كعمل معاصر، فإن ControlNet لها وظيفة مماثلة ويتم استخدامها على نطاق واسع. ومع ذلك، يمكن أن يكون مكلفة حسابيا للتشغيل. وذلك لأنه خلال كل خطوة من خطوات تقليل الضوضاء في عملية الانتشار العكسي، يجب تشغيل كل من ControlNet وUNet. بالإضافة إلى ذلك، تؤكد ControlNet على أهمية نسخ برنامج تشفير UNet كنموذج تحكم، مما يؤدي إلى رقم معلمة أكبر. وبالتالي، فإن عملية التوليد تعاني من اختناق بسبب حجم ControlNet (كلما زاد حجمها، أصبحت العملية أبطأ).
توفر محولات T2I ميزة تنافسية لـ ControlNets في هذا الشأن. تعد محولات T2I أصغر حجمًا، وعلى عكس شبكات التحكم، يتم تشغيل محولات T2I مرة واحدة فقط خلال الدورة الكاملة لعملية تقليل الضوضاء.
| نوع النموذج | معلمات النموذج | التخزين (fp16) |
|---|---|---|
| كونترول نت-SDXL | 1251 م | 2.5 جيجابايت |
| ControlLoRA (المرتبة 128) | 197.78 مليون (تخفيض بنسبة 84.19%) | 396 ميجابايت (تخفيض بنسبة 84.53%) |
| T2I-محول-SDXL | 79 م (تخفيض 93.69%) | 158 ميجابايت (تخفيض بنسبة 94%) |
على مدى الأسابيع القليلة الماضية، تعاون فريق Diffusers ومؤلفو T2I-Adapter لتقديم دعم T2I-Adapters for Stable Diffusion XL (SDXL) في diffusers. في منشور المدونة هذا، نشارك النتائج التي توصلنا إليها من تدريب محولات T2I على SDXL من البداية، وبعض النتائج الجذابة، وبالطبع نقاط فحص T2I-Adapter على تكييفات مختلفة (رسم تخطيطي، وذكي، وخطي، وعمق، ومفتوح)!

بالمقارنة مع الإصدارات السابقة من T2I-Adapter (SD-1.4/1.5)، لا يزال T2I-Adapter-SDXL يستخدم الوصفة الأصلية، حيث يقود 2.6B SDXL مع محول 79M! يحتفظ T2I-Adapter-SDXL بقدرات تحكم قوية بينما يرث الجيل عالي الجودة من SDXL!
تدريب T2I-Adapter-SDXL مع diffusers
لقد بنينا نصنا التدريبي على هذا المثال الرسمي المقدم من diffusers.
تم تدريب معظم نماذج T2I-Adapter التي ذكرناها في منشور المدونة هذا على 3M من أزواج الصور والنصوص عالية الدقة من LAION-Aesthetics V2 مع الإعدادات التالية:
- خطوات التدريب: 20000-35000
- حجم الدفعة: بيانات متوازية مع حجم دفعة وحدة معالجة الرسومات (GPU) واحد يبلغ 16 ليصبح إجمالي حجم الدفعة 128.
- معدل التعلم: معدل التعلم المستمر 1e-5.
- الدقة المختلطة: FP16
نحن نشجع المجتمع على استخدام نصوصنا لتدريب محولات T2I المخصصة والقوية، وإجراء مقايضة تنافسية بين السرعة والذاكرة والجودة.
باستخدام T2I-Adapter-SDXL في diffusers
هنا، نأخذ الشرط الخطي كمثال لتوضيح استخدام T2I-Adapter-SDXL. للبدء، قم أولاً بتثبيت التبعيات المطلوبة:
pip install -U git+https://github.com/huggingface/diffusers.git
pip install -U controlnet_aux==0.0.7
pip install transformers accelerate
تتكون عملية إنشاء T2I-Adapter-SDXL بشكل أساسي من الخطوتين التاليتين:
- يتم إعداد صور الحالة أولاً في المكان المناسب صورة التحكم شكل.
- ال صورة التحكم و اِسْتَدْعَى يتم تمريرها إلى
StableDiffusionXLAdapterPipeline.
دعونا نلقي نظرة على مثال بسيط باستخدام محول Lineart. نبدأ بتهيئة خط أنابيب T2I-Adapter لـ SDXL والكاشف الخطي.
import torch
from controlnet_aux.lineart import LineartDetector
from diffusers import (AutoencoderKL, EulerAncestralDiscreteScheduler,
StableDiffusionXLAdapterPipeline, T2IAdapter)
from diffusers.utils import load_image, make_image_grid
adapter = T2IAdapter.from_pretrained(
"TencentARC/t2i-adapter-lineart-sdxl-1.0", torch_dtype=torch.float16, varient="fp16"
).to("cuda")
model_id = "stabilityai/stable-diffusion-xl-base-1.0"
euler_a = EulerAncestralDiscreteScheduler.from_pretrained(
model_id, subfolder="scheduler"
)
vae = AutoencoderKL.from_pretrained(
"madebyollin/sdxl-vae-fp16-fix", torch_dtype=torch.float16
)
pipe = StableDiffusionXLAdapterPipeline.from_pretrained(
model_id,
vae=vae,
adapter=adapter,
scheduler=euler_a,
torch_dtype=torch.float16,
variant="fp16",
).to("cuda")
line_detector = LineartDetector.from_pretrained("lllyasviel/Annotators").to("cuda")
ثم قم بتحميل صورة للكشف عن الخط:
url = "https://huggingface.co/Adapter/t2iadapter/resolve/main/figs_SDXLV1.0/org_lin.jpg"
image = load_image(url)
image = line_detector(image, detect_resolution=384, image_resolution=1024)

ثم نقوم بإنشاء:
prompt = "Ice dragon roar, 4k photo"
negative_prompt = "anime, cartoon, graphic, text, painting, crayon, graphite, abstract, glitch, deformed, mutated, ugly, disfigured"
gen_images = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
image=image,
num_inference_steps=30,
adapter_conditioning_scale=0.8,
guidance_scale=7.5,
).images[0]
gen_images.save("out_lin.png")

هناك حجتان مهمتان يجب فهمهما لمساعدتك في التحكم في مقدار التكييف.
-
adapter_conditioning_scaleتتحكم هذه الحجة في مقدار التأثير الذي يجب أن يحدثه التكييف على الإدخال. القيم العالية تعني تأثير تكييف أعلى والعكس صحيح.
-
adapter_conditioning_factorتتحكم هذه الوسيطة في عدد خطوات الإنشاء الأولية التي يجب تطبيق التكييف عليها. يجب تعيين القيمة بين 0-1 (الافتراضي هو 1). قيمة
adapter_conditioning_factor=1يعني أنه يجب تطبيق المحول على جميع الخطوات الزمنية، في حين أنadapter_conditioning_factor=0.5يعني أنه سيتم تطبيقه فقط على أول 50% من الخطوات.
لمزيد من التفاصيل، نرحب بكم للتحقق من الوثائق الرسمية.
جرب العرض التوضيحي
يمكنك بسهولة تجربة T2I-Adapter-SDXL في هذه المساحة أو في ساحة اللعب المضمنة أدناه:
يمكنك أيضًا تجربة Doodly، الذي تم تصميمه باستخدام نموذج الرسم الذي يحول رسومات الشعار المبتكرة إلى صور واقعية (مع الإشراف اللغوي):
المزيد من النتائج
أدناه، نقدم النتائج التي تم الحصول عليها من استخدام أنواع مختلفة من الشروط. نحن أيضًا نكمل النتائج بروابط لنقاط التفتيش المدربة مسبقًا المقابلة لها. تحتوي بطاقاتهم النموذجية على مزيد من التفاصيل حول كيفية تدريبهم، إلى جانب أمثلة الاستخدام.
الموجهة الخطية

الموديل من TencentARC/t2i-adapter-lineart-sdxl-1.0
رسم موجه

الموديل من TencentARC/t2i-adapter-sketch-sdxl-1.0
كاني يسترشد

الموديل من TencentARC/t2i-adapter-canny-sdxl-1.0
موجهة للعمق

نماذج موجهة للعمق من TencentARC/t2i-adapter-depth-midas-sdxl-1.0 و TencentARC/t2i-adapter-depth-zoe-sdxl-1.0 على التوالى
OpenPose الموجهة

الموديل من TencentARC/t2i-adapter-openpose-sdxl-1.0
الشكر والتقدير: الشكر الجزيل ل ويليام بيرمان لمساعدتنا في تدريب النماذج ومشاركة أفكاره.