تولید دسته‌ای تصاویر با 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

تولید می‌شود.


اگر نمی‌خواهی وقتت را صرف نصب و تنظیمات سرور کنی، می‌توانی یک سرور کاملاً آماده و از قبل پیاده‌سازی‌شده تهیه کنی و بلافاصله کار با GPU را شروع کنی.