تولید دستهای تصاویر با Stable Diffusion در Jupyter
🧠 مقدمه
وقتی با Stable Diffusion کار میکنیم معمولاً هر بار فقط یک تصویر تولید میکنیم.
اما در بسیاری از پروژهها نیاز داریم دهها یا حتی صدها تصویر بسازیم.
مثلاً برای:
- ساخت dataset
- تولید تصاویر برای NFT یا بازی
- تست کردن promptهای مختلف
- تولید محتوای زیاد برای پروژههای AI
در این آموزش یاد میگیریم چگونه با Jupyter Notebook فرآیند تولید تصویر را خودکار و دستهای (Batch) انجام دهیم.
⚙️ مرحله ۱: نصب کتابخانهها
ابتدا کتابخانههای مورد نیاز را نصب میکنیم.
!pip install diffusers transformers accelerate torch
کتابخانههای مهم:
| کتابخانه | کاربرد |
|---|---|
| diffusers | اجرای Stable Diffusion |
| transformers | مدلهای متن |
| torch | پردازش GPU |
| accelerate | مدیریت حافظه |
📦 مرحله ۲: بارگذاری مدل Stable Diffusion
حالا مدل را بارگذاری میکنیم.
import torch
from diffusers import StableDiffusionPipeline
model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(
model_id,
torch_dtype=torch.float16
)
pipe = pipe.to("cuda")
اگر GPU در دسترس نباشد میتوان از CPU استفاده کرد، اما سرعت بسیار کمتر خواهد بود.
✏️ مرحله ۳: تعریف Prompt
حالا prompt تصویر را تعریف میکنیم.
prompt = "cinematic portrait of a futuristic warrior, ultra detailed, 8k"
negative_prompt = "blurry, low quality, distorted"
Prompt مشخص میکند تصویر چه ویژگیهایی داشته باشد.
🔁 مرحله ۴: تولید چند تصویر
حالا یک حلقه برای تولید چند تصویر مینویسیم.
num_images = 10
for i in range(num_images):
image = pipe(
prompt,
negative_prompt=negative_prompt,
num_inference_steps=25,
guidance_scale=7
).images[0]
image.save(f"image_{i}.png")
این کد:
- 10 تصویر تولید میکند
- هر تصویر را در فایل جداگانه ذخیره میکند
🧩 مرحله ۵: تولید صدها تصویر
برای پروژههای بزرگ میتوان تعداد تصاویر را افزایش داد.
مثلاً:
num_images = 100
یا حتی:
num_images = 1000
بهتر است برای datasetهای بزرگ از GPU قوی استفاده شود.
🎨 استفاده از Promptهای مختلف
گاهی میخواهیم چند prompt مختلف را تست کنیم.
میتوان یک لیست از promptها ساخت.
prompts = [
"cyberpunk city at night",
"futuristic robot portrait",
"alien planet landscape",
"fantasy warrior armor"
]
for i, p in enumerate(prompts):
image = pipe(p).images[0]
image.save(f"prompt_{i}.png")
این روش برای prompt engineering بسیار مفید است.
📂 ذخیره تصاویر در پوشه
بهتر است تصاویر در یک پوشه ذخیره شوند.
import os
os.makedirs("generated_images", exist_ok=True)
سپس:
image.save(f"generated_images/image_{i}.png")
ساختار خروجی:
generated_images/
image_0.png
image_1.png
image_2.png
image_3.png
⚡ افزایش سرعت تولید
برای سریعتر شدن generation میتوان:
- steps کمتر استفاده کرد
- GPU قویتر
- batch inference
- استفاده از SDXL Turbo
مثال:
steps = 20
guidance = 6
این تنظیمات سریعتر هستند.
🧠 ساخت Dataset با Stable Diffusion
یکی از کاربردهای مهم Batch Generation ساخت dataset است.
مثلاً برای:
- آموزش LoRA
- پروژههای Computer Vision
- ساخت synthetic dataset
در این حالت معمولاً:
500 - 5000 images
تولید میشود.