آماده‌سازی دیتاست LoRA با Jupyter Notebook

🧠 مقدمه

اگر می‌خواهی یک LoRA برای Stable Diffusion آموزش بدهی، مهم‌ترین مرحله قبل از training این است که dataset را درست آماده کنی.

کیفیت دیتاست تقریباً به اندازه خود مدل اهمیت دارد.

در این آموزش یاد می‌گیری:

  • چطور تصاویر dataset را resize و crop کنی
  • چطور آن‌ها را برای آموزش Stable Diffusion آماده کنی
  • چطور caption خودکار برای تصاویر بسازی
  • و همه این کارها را در Jupyter Notebook انجام دهی

این روش برای آموزش LoRA در ابزارهایی مثل:

  • Kohya Trainer
  • ComfyUI LoRA Training
  • Diffusers Training Scripts

کاملاً مناسب است.


📁 مرحله ۱: ساخت ساختار دیتاست

یک پوشه برای dataset بساز:

mkdir lora_dataset

داخل آن تصاویر خودت را قرار بده:

lora_dataset/
  image1.jpg
  image2.jpg
  image3.jpg
  image4.jpg

معمولاً برای یک LoRA خوب نیاز داری به:

نوع LoRAتعداد تصاویر پیشنهادی
سبک هنری20 – 50
شخصیت15 – 30
شیء خاص30 – 100

📦 مرحله ۲: نصب کتابخانه‌های مورد نیاز

در Jupyter این پکیج‌ها را نصب کن:

!pip install pillow tqdm opencv-python

این کتابخانه‌ها برای:

  • پردازش تصویر
  • resize
  • crop
  • مدیریت batch

استفاده می‌شوند.


🖼️ مرحله ۳: تغییر اندازه تصاویر

مدل‌های Stable Diffusion معمولاً با رزولوشن‌های زیر بهترین عملکرد را دارند:

  • 512x512
  • 768x768
  • 1024x1024

کد زیر همه تصاویر dataset را resize می‌کند.

from PIL import Image
import os

input_folder = "lora_dataset"
output_folder = "dataset_resized"

os.makedirs(output_folder, exist_ok=True)

size = (1024, 1024)

for file in os.listdir(input_folder):
    if file.endswith((".png",".jpg",".jpeg")):
        img = Image.open(os.path.join(input_folder, file)).convert("RGB")
        img = img.resize(size)
        img.save(os.path.join(output_folder, file))

حالا همه تصاویر با رزولوشن مناسب ذخیره شده‌اند.


✂️ مرحله ۴: Crop هوشمند تصاویر

گاهی تصاویر نسبت تصویر متفاوت دارند. بهتر است قبل از resize center crop انجام دهیم.

def center_crop(img):
    w, h = img.size
    min_dim = min(w, h)

    left = (w - min_dim) // 2
    top = (h - min_dim) // 2
    right = left + min_dim
    bottom = top + min_dim

    return img.crop((left, top, right, bottom))

استفاده از آن:

img = Image.open("example.jpg")
img = center_crop(img)
img = img.resize((1024,1024))

🧾 مرحله ۵: ساخت Caption برای تصاویر

برای آموزش LoRA، هر تصویر باید یک caption متنی داشته باشد.

مثال:

image1.jpg
image1.txt

محتوای فایل txt:

portrait of a cyberpunk female character, neon lighting

در Jupyter می‌توانیم این فایل‌ها را به صورت خودکار ایجاد کنیم.

import os

dataset_path = "dataset_resized"

base_caption = "photo of sks person"

for file in os.listdir(dataset_path):
    if file.endswith(".jpg") or file.endswith(".png"):
        name = os.path.splitext(file)[0]
        caption_file = os.path.join(dataset_path, name + ".txt")

        with open(caption_file,"w") as f:
            f.write(base_caption)

در اینجا:

sks یک trigger word برای LoRA است.


🤖 مرحله ۶: تولید caption خودکار (اختیاری)

می‌توان از مدل‌های captioning برای تولید توضیح تصویر استفاده کرد.

ابتدا نصب:

!pip install transformers

سپس:

from transformers import BlipProcessor, BlipForConditionalGeneration
from PIL import Image

processor = BlipProcessor.from_pretrained("Salesforce/blip-image-captioning-base")
model = BlipForConditionalGeneration.from_pretrained("Salesforce/blip-image-captioning-base")

img = Image.open("example.jpg").convert("RGB")

inputs = processor(img, return_tensors="pt")
out = model.generate(**inputs)

caption = processor.decode(out[0], skip_special_tokens=True)

print(caption)

این مدل به صورت خودکار caption تولید می‌کند.


📂 مرحله ۷: ساخت dataset نهایی

در پایان ساختار dataset باید شبیه این باشد:

dataset/
  image1.jpg
  image1.txt
  image2.jpg
  image2.txt
  image3.jpg
  image3.txt

این ساختار برای اکثر ابزارهای آموزش LoRA استاندارد است.


⚙️ نکات مهم برای کیفیت بهتر LoRA

نکتهتوضیح
تصاویر متنوعزاویه، نور و پس‌زمینه متفاوت
حذف تصاویر تکراریباعث overfitting می‌شود
caption دقیقمدل بهتر یاد می‌گیرد
رزولوشن مناسبحداقل 512

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