کنترل شبکه، لورا و تهویه
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 + متن = ابزارک تمرین کننده 2026 . بیشتر خطوط لوله تصویر تولید لایه 2-5 LoRAs ، 1-3 ControlNets و یک آداپتور IP در بالای یک SDXL / SD3 / Flux پایه است.
مفهوم
!ControlNet clones the encoder; LoRA adds low-rank deltas
ControlNet (Zhang و همکارانش، 2023)
یک SD پیش از آموزش بگیرید. کلون نصف کدگر U-Net. اصلی را منجمد کنید. کلون را برای پذیرش ورودی اضافی شرایط (حوا، عمق، حالت) آموزش دهید. کلون را به نیمه کدگر اصلی با صفر کنوولسیون اتصال های تخلیه (۱ × ۱ کنو شروع به صفر شروع به بدون کار، یادگیری دلتا) متصل کنید.
SD U-Net decoder: ... ← orig_enc_features + zero_conv(controlnet_enc(condition))صفر-conv init به این معنی است که ControlNet به عنوان هویت شروع می شود حتی قبل از آموزش هیچ ضرر ندارد. قطار در 1M (سرعت، حالت، تصویر) با ضایعات انتشار استاندارد سه برابر می شود.
ControlNets های هر مدل به عنوان مدل های جانبی کوچک (~ 360M برای SDXL، ~ 70M برای SD 1.5) ارسال می شوند.
features += weight_a * control_a(depth) + weight_b * control_b(pose)LoRA (Hu et al., 2021)
برای هر لایه خطی 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 کاهش. در سراسر مدل: یک LoRA معمولا 20-200MB در مقابل پایه 5GB است.
در نتیجه می تونید لورا رو مقیاس بزنید:W' = W + α · B @ A.α = 0.5-1.5این امر طبیعی است. LORA های متعدد به صورت اضافی (با توجه به هشدار معمول که آنها به روش های غیر خطی تعامل می کنند) ، جمع می شوند.
آداپتور IP (Ye et al., 2023)
یک آداپتور کوچک که یک تصاویر را به عنوان شرایط (با متن) پذیرفته است. از کدگر تصویر CLIP برای تولید توکن های تصویر استفاده می کند، آنها را در کنار توکن های متن به توجه متقابل تزریق می کند. ~ 20MB در هر مدل پایه. اجازه می دهد تا شما "تصاویر را به سبک این مرجع تولید کنید" بدون یک LoRA.
ماتریس ترکیب پذیری
| 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.استفاده از یک Pose ControlNet با وزن 1.0 و یک Depth ControlNet با وزن 1.0 معمولاً بیش از حد انجام می شود. مجموع وزن ≈ 1.0 یک پیش فرض امن است.
- LoRA on the wrong base.SDXL LoRA به طور خاموشي در SD 1.5 بدون کار ميکنه چون ابعاد توجه با هم مطابقت نداره.
- Textual Inversion drift.توکن هایی که در یک نقطه بازرسی آموزش دیده اند به طور بدی در نقطه بازرسی دیگری حرکت می کنند.
- LoRA weight-merging and storage.شما می توانید یک LoRA را به وزن مدل پایه برای نتیجه گیری سریعتر (بدون اضافه کردن زمان اجرا) درست کنید، اما توانایی مقیاس را از دست می دهید
αدر زمان اجرا، هر دو نسخه رو نگه دار
ازش استفاده کن
| 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، درجه LoRA را تغییر دهیدrدر چه درجه ای LoRA دقیقا با دلتای هدف درجه 2 مطابقت دارد؟ - Medium.دو LoRA جداگانه را روی دو تغییر هدف آموزش دهید. آنها را با هم بارگذاری کنید و تعامل اضافی آنها را نشان دهید. تعامل خطی را چه زمانی شکسته است؟
- Hard.استفاده از diffusers برای جمع آوری: SDXL-base + Canny-ControlNet (وزن 0.8) + یک سبک LoRA (α 0.8) + IP-Adapter (وزن 0.6). اندازه گیری FID-vs-prompt-adherence trade-off به عنوان وزن های جمع متفاوت است.
اصطلاحات کلیدی
| 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. |
یادداشت تولید: تبادلات LoRA، خطوط کنترل شبکه، خدمات چند مستاجر
یک سامسونگ واقعی از متن به تصویر صدها LoRA و ده ها 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 بیت Flux بدون شکستن حافظه جمع کنید.
فلوکس مخصوص: لپ تاپ Niels Flux-on-8GB پایه را به 4 بیت اندازه می گیرد؛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 LoRA (در اصل برای 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 جایگزین سبک تر به ControlNet
- 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.