آمادهسازی دیتاست 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 |