ControlNet، LoRA & Conditioning
Type: Build
Languages: Python
Prerequisites: Phase 8 · 07 (Latent Diffusion), Phase 10 (LLMs from Scratch — for LoRA foundation)
Time: ~75 minutes
المشكلة
إن إشارة مثل "مرأة في ثوب أحمر تمشي كلباً في شارع مزدحم" لا تعطي النموذج معلومات عن أين الكلب ، ما هي وضعية المرأة ، أو منظور من الشارع. يحدد النص حوالي 10% مما تحتاج إليه لتضمين صورة. الباقي بصري ولا يمكن وصفه بكلمات بكفاءة.
تعليماً نموذج مشروط جديد من الصفر لكل إشارة (موقف، عمق، حكمة، قسم) أمر محظور. تريد أن تبقي العمود الفقري SDXL 2.6B-param مقفوفة، وربط شبكة جانبية صغيرة تقرأ التشريع، وتجعلها تدفع الميزات المتوسطة للعمود الفقري. وهذا هو ControlNet.
كما تريد تعليم النموذج مفاهيم جديدة (وجهك، منتجك، أسلوبك) دون إعادة تدريب النموذج الكامل. تريد دلتا أصغر بنسبة 100 مرة. هذا هو مكيّفات LoRA منخفضة الدرجة التي تتواصل مع أوزان الاهتمام القائمة.
ControlNet + LoRA + text = مجموعة أدوات الممارس 2026. معظم خطوط أنابيب الصورة الإنتاجية تضم 2-5 LoRAs ، 1-3 ControlNets ، ومعدل IP فوق قاعدة SDXL / SD3 / Flux.
المفهوم
!ControlNet clones the encoder; LoRA adds low-rank deltas
(تشارون)
خذ SD متدربة مسبقاً. قم بتسجيلها من نصف تشفير U-Net. قم بتجميد الأصلي. قم بتسجيله لتقبل مدخل إضافي للتشغيل (الحواف والعمق والوضع). قم بتوصيل الكلون إلى نصف تشفير الأصلي مع صفر-convolution تخطي الاتصالات (1 × 1 convs المبدئية إلى الصفر تبدأ كإغلاق، تعلم دلتا).
SD U-Net decoder: ... ← orig_enc_features + zero_conv(controlnet_enc(condition))0-conv init يعني أن ControlNet يبدأ على شكل هوية لا ضرر حتى قبل التدريب. القطار على 1M (السرعة، الحالة، الصورة) يضاعف إلى ثلاثة أضعاف مع فقدان الانتشار القياسي.
تم إرسال ControlNets للطريقة الواحدة كنموذج جانبي صغير (~ 360M لـ SDXL، ~ 70M لـ SD 1.5).
features += weight_a * control_a(depth) + weight_b * control_b(pose)(هو وزملاء)
لأي طبقة خطيةW ∈ R^{d×d}في النموذج، التجمد Wو أضف ديلتا منخفضة الدرجة:
W' = W + ΔW, ΔW = B @ A, A ∈ R^{r×d}, B ∈ R^{d×r}معr << d. الدرجة 4-16 هي معيار للاهتمام، الدرجة 64-128 لخطوات دقيقة ثقيلة. عدد المعلمات الجديدة: 2 · d · rبدلاً منd². لـ (SDXL) الاهتمام معd=640،r=16: 20k في كل جهاز تعديل بدلا من 410k تخفيض 20x. عبر النموذج بأكمله: لورا عادة ما تكون 20-200MB مقابل 5GB القاعدة.
عند الاستنتاج يمكنك أن تقوم بتحقيق حجم المعدلW' = W + α · B @ A. .α = 0.5-1.5المواد المتعددة لـ LoRA تتراكم بشكل إضافي (مع الحذارة المعتادة بأنها تتفاعل بطريقة غير خطية).
المعدل المعدل (Ye et al., 2023)
مُعدّل صغير يقبل الصورة كشروط (بجانب النص). يستخدم مُرمّد الصورة CLIP لإنتاج رموز الصورة، ويُحققها في الاهتمام المتقاطع جنباً إلى جنب مع رموز النص. ~ 20 ميب لكل نموذج أساسي. يسمح لك بـ "إنتاج صورة في أسلوب هذا المرجع" دون لورا.
ماتريكس التراكم
| Tool | What it controls | Size | When to use |
|---|---|---|---|
| ControlNet | Spatial structure (pose, depth, edges) | 70-360MB | Exact layout, composition |
| LoRA | Style, subject, concept | 20-200MB | Personalization, style |
| IP-Adapter | Style or subject from reference image | 20MB | No text can describe the look |
| Textual Inversion | Single concept as a new token | 10KB | Legacy, mostly replaced by LoRA |
| DreamBooth | Full fine-tune on a subject | 2-5GB | Strong identity, high compute |
| T2I-Adapter | Lighter ControlNet alternative | 70MB | Edge devices, inference budget |
شبكة التحكم فضائية، لورا معنوية، استخدم الاثنين
بناءها
code/main.pyيحاكي الآليين في 1-D:
- LoRA.طبقة خطية مسبقة
Wأجمدوه، تدربوا منخفضينB @ Aمثل هذاW + BAيطابق طبقة خطية هدف.r = 1يكفي لتعلم تصحيح الدرجة 1 بشكل مثالي
- ControlNet-lite."قاعدة مقفزة" و "شبكة جانبية" تقرأ إشارة إضافية. يتم إغلاق خروج الشبكة الجانبية بواسطة مقياس قابل للتعلم تم تشريعه إلى الصفر (إصدارنا من الصفر-conv). قم بتشغيل ومراقبة البوابة.
الخطوة الأولى: رياضيات لورا
pythondef lora(W, A, B, x, alpha=1.0):
# W is frozen; A, B are the trainable low-rank factors.
return [W[i][j] * x[j] for i, j in ...] + alpha * (B @ (A @ x))الخطوة الثانية: شبكة جانبية صفر
pythonside_out = control_net(x, condition)
gated = gate * side_out # gate initialized to 0
h = base(x) + gatedفي الخطوة 0 تكون الناتجية متطابقة مع القاعدة. تحديثات التدريب المبكر gateببطء لا يوجد تدفق كارثي
الفخاخ
- Over-scaling LoRAs.
α = 2أوα = 3هو عملية "جعلها أقوى" شائعة التي تنتج نتائج أكثر من اللازمة.α ≤ 1.5. . . - ControlNet weight conflict.استخدام شبكة التحكم في الوزن 1.0 و شبكة التحكم في الغموض عند الوزن 1.0 عادة ما يتجاوز. مجموع الوزن ≈ 1.0 هو افتراض آمن.
- LoRA on the wrong base.SDXL LoRA لا تعمل بصمت على SD 1.5 لأن أبعاد الاهتمام لا تتطابق.
- Textual Inversion drift.الوهم المدربة في نقطة تفتيش تتحرك بشكل سيء في نقطة أخرى.
- LoRA weight-merging and storage.يمكنك تطبيق لورا في أساس النموذج الوزن لتحديد أسرع (لا إضافة وقت التشغيل) ، ولكنك تفقد القدرة على التوسع
αفي وقت تشغيل، احتفظ بالنسختين
استخدمها
| Goal | 2026 pipeline |
|---|---|
| Reproduce a brand's art style | LoRA trained on ~30 curated images at rank 32 |
| Put my face in a generated image | DreamBooth or LoRA + IP-Adapter-FaceID |
| Specific pose + prompt | ControlNet-Openpose + SDXL + text |
| Depth-aware composition | ControlNet-Depth + SD3 |
| Reference + prompt | IP-Adapter + text |
| Exact layout | ControlNet-Scribble or ControlNet-Canny |
| Background replace | ControlNet-Seg + Inpainting (Lesson 09) |
| Fast 1-step style | LCM-LoRA on SDXL-Turbo |
أرسله
إنقاذoutputs/skill-sd-toolkit-composer.md. تتولى المهارة مهمة (أصول المدخل: عجلة، صورة مرجعية اختيارية، وضع اختياري، عمق اختياري، مسرح اختياري) وتخرج كومة الأدوات، والأوزان، وبروتوكول البذور المتكملة.
التمارين
- Easy.في
code/main.py، تغير رتبة لوراrمن 1 إلى 4 في أي صف يطابق لورا بالضبط دلتا الهدف من صف 2؟ - Medium.قم بتدريب اثنين من الـ LoRA على اثنين من تحويلات الهدف قم بتحميلها معاً وظهر تفاعلهم الإضافي متى ينتهي التفاعل الخطية؟
- Hard.استخدام الموزعات لتحديد: SDXL-base + Canny-ControlNet (وزن 0.8) + LoRA (α 0.8) + IP-Adapter (وزن 0.6).
الشروط الرئيسية
| Term | What people say | What it actually means |
|---|---|---|
| ControlNet | "Spatial control" | Cloned encoder + zero-conv skips; reads a conditioning image. |
| Zero convolution | "Starts as identity" | 1×1 conv initialized to zero; ControlNet starts as no-op. |
| LoRA | "Low-rank adapter" | W + B @ A, r << d; 100x fewer params than a full fine-tune. |
| rank r | "The knob" | LoRA compression; 4-16 typical, 64+ for heavy personalization. |
| α | "LoRA strength" | Runtime scaling of the LoRA delta. |
| IP-Adapter | "Reference image" | Small image-conditioning adapter via CLIP-image tokens. |
| DreamBooth | "Full subject fine-tune" | Train the full model on ~30 images of a subject. |
| Textual Inversion | "New token" | Learn a new word embedding only; legacy, mostly replaced. |
ملاحظة الإنتاج: تبادلات لوراء، خطوط مراقبة شبكة التشغيل، خدمة متعددة المستأجرين
يقدم SaaS الحقيقي من النص إلى الصورة مئات من LoRAs وعشرات ControlNets على نفس نقطة التفتيش القاعدة. تبدو مشكلة الخدمة على غرار LLM متعددة التأجير (غطي أدب الإنتاج حالة LLM تحت الإجراءات المستمرة والLoRAX / S-LoRA):
- Hot-swap LoRAs, do not merge.الاندماج
W' = W + α·B·Aفي القاعدة يعطي ~ 3-5% أسرع في خطوة استنتاج ولكن يتجمدαو القاعدة. الحفاظ على لورا ساخنة في VRAM كديلتا رتبة- r؛ الموزعات تعرضpipe.load_lora_weights()+pipe.set_adapters([...], adapter_weights=[...])لتنشيط الطلب. تكلفة التبادل هي2 · d · r · num_layersالوزن على مقياس MB، في الجزء الثاني. - ControlNet as a second attention lane.يعمل المُخترف المُستنسخ بالتوازي مع القاعدة. اثنين من ControlNets وزنها 1.0 كل واحد = مرتين إضافيتين إلى الأمام في كل خطوة، وليس مراراً واحداً مدمجاً. تنخفض مساحة المجموعة من الحجم التربيعي. ميزانية ~ 1.5 × تكلفة الخطوة لكل ControlNet نشطة.
- Quantized LoRAs too.إذا قمت بتقييم القاعدة (انظر الدروس 07, التدفق على 8GB) ، فإن دلتا LoRA تقييمها أيضاً بشكل نظيف إلى 8 بتات أو 4 بتات. تسمح لك التحميل على شكل QLoRA بتجميع 5-10 LoRA على رأس قاعدة 4 بتات من التدفق دون تفجير الذاكرة.
تحديد التدفق: نيبوك نيلز التدفق على 8GB يقدر القاعدة إلى 4 بتات؛ وضع طراز LoRA (pipe.load_lora_weights("user/style-lora")) على هذه القاعدة الكمية في weight_name="pytorch_lora_weights.safetensors"هذا هو وصفة معظم وكالات SaaS تسافر في عام 2026.
المزيد من القراءة
- Zhang, Rao, Agrawala (2023). Adding Conditional Control to Text-to-Image Diffusion Models ControlNet
- Hu et al. (2021). LoRA: Low-Rank Adaptation of Large Language Models لورا (أولياً لـ LLM؛ الموانئ إلى التنشر).
- Ye et al. (2023). IP-Adapter: Text Compatible Image Prompt Adapter جهاز تعديل IP
- Mou et al. (2023). T2I-Adapter: Learning Adapters to Dig Out More Controllable Abilityبديل أخف للسيطرة على شبكة التحكم
- Ruiz et al. (2023). DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation"مكتب الأحلام"
- HuggingFace Diffusers — ControlNet / LoRA / IP-Adapter docsخطوط الأنابيب المرجعية
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.