مرکزی مواد پر جائیں
اے آئی ٹیوٹوریلز

MOSS-Image کے ساتھ متن سے بھرپور تصاویر اور کنٹرول شدہ لے آؤٹس بنائیں

یہ ٹیوٹوریل MOSS-Image ترتیب دینے، اس کے Base اور SFT ماڈلز میں انتخاب کرنے، Python یا Gradio کے ذریعے تصاویر بنانے، اور ساختی لے آؤٹ پرامپٹس کے ذریعے متن اور اشیا کی پوزیشن متعین کرنے کا طریقہ بیان کرتا ہے۔ اس میں تجویز کردہ سیمپلنگ ترتیبات، میموری موڈز، ComfyUI سپورٹ، اور پرامپٹ بہتر بنانے والے ٹولز بھی شامل ہیں۔

MOSS-Image کے ساتھ متن سے بھرپور تصاویر اور کنٹرول شدہ لے آؤٹس

MOSS-Image کیا ہے؟

MOSS-Image، OpenMOSS ٹیم کا ایک اوپن امیج جنریشن پروجیکٹ ہے۔ یہ ایک بنیادی ٹیکسٹ ٹو امیج ماڈل اور ایک supervised fine-tuned ماڈل فراہم کرتا ہے، ساتھ ہی ایک کسٹم Diffusers پائپ لائن، Gradio انٹرفیس، مقامی ComfyUI پلگ اِن، اور تفصیلی پرامپٹس تیار کرنے کے لیے ٹولز بھی فراہم کرتا ہے۔

MOSS-Image Base اور SFT کی مثالیں

یہ پروجیکٹ ایسی کمپوزیشنز کے لیے بنایا گیا ہے جو بصری عناصر کو قابلِ مطالعہ متن کے ساتھ یکجا کرتی ہیں۔ یہ 4K ٹوکنز تک کے پرامپٹس کو سپورٹ کرتا ہے اور اینیمے سے لے کر فوٹو ریئلسٹک تصاویر تک مختلف انداز تیار کر سکتا ہے۔ اس کا 5B بیک بون نسبتاً مختصر اور مؤثر امیج جنریشن فراہم کرنے کے لیے تیار کیا گیا ہے۔

اہم خصوصیات

  • لے آؤٹ کنٹرول: ساختی JSON اِن پٹ اور باؤنڈنگ باکسز کے ذریعے متن اور بصری عناصر کی جگہ متعین کریں۔
  • متن کی رینڈرنگ: پوسٹرز، نوٹس، وائٹ بورڈز اور دیگر تصویری کمپوزیشنز کے اندر واضح متن تیار کریں۔
  • طویل پرامپٹس: 4K ٹوکنز تک پر مشتمل ٹیکسٹ پرامپٹس جمع کریں۔
  • متعدد انداز: اینیمے طرز اور فوٹو ریئلسٹک تصاویر بنائیں۔
  • فائن ٹیوننگ سپورٹ: بنیادی ماڈل کو حسبِ ضرورت کاموں اور شعبوں کے لیے ڈھالیں۔
  • مؤثر آرکیٹیکچر: 5B بیک بون کے ساتھ تصاویر تیار کریں۔
  • متعدد انٹرفیسز: Python، Gradio، ComfyUI، یا الگ prompt-enhancer skill استعمال کریں۔

ماڈل منتخب کریں

MOSS-Image دو اقسام میں دستیاب ہے:

  • MOSS-Image-Base: بنیادی ٹیکسٹ ٹو امیج ماڈل۔ اس کے weights Hugging Face اور ModelScope سے دستیاب ہیں۔
  • MOSS-Image-SFT: curated data پر بنیادی ماڈل سے fine-tune کیا گیا ورژن۔ اس کے weights Hugging Face اور ModelScope سے دستیاب ہیں۔

پروجیکٹ کی فراہم کردہ تقابلی مثال میں، SFT ماڈل متن کی زیادہ واضح گروپ بندی اور زیادہ منظم وائٹ بورڈ لے آؤٹ تیار کرتا ہے۔ جب آپ کو اصل عمومی مقصد والے checkpoint کی ضرورت ہو یا اسے fine-tune کرنے کا منصوبہ ہو تو Base ماڈل سے شروع کریں۔ جب منظم متن کی پیشکش خاص طور پر اہم ہو تو SFT استعمال کرنے پر غور کریں۔

MOSS-Image Base کا آؤٹ پٹ MOSS-Image SFT کا آؤٹ پٹ

MOSS-Image انسٹال کریں

ریپوزٹری clone کریں، اس کی ڈائریکٹری میں جائیں، virtual environment بنائیں، اسے فعال کریں، اور requirements انسٹال کریں:

git clone https://github.com/OpenMOSS/MOSS-Image.git
cd MOSS-Image
python -m venv .venv
source .venv/bin/activate

pip install -r requirements.txt

مثالوں میں CUDA استعمال ہوتا ہے اور پائپ لائن کو pipe.to("cuda") کے ذریعے GPU پر منتقل کیا جاتا ہے۔ یقینی بنائیں کہ آپ کا PyTorch ماحول اس GPU پلیٹ فارم کے لیے configured ہے جس پر آپ inference چلانا چاہتے ہیں۔

Python کے ذریعے تصویر تیار کریں

MOSS-Image اپنی کسٹم پائپ لائن کے ذریعے Diffusers سے لوڈ ہوتا ہے۔ درج ذیل مثال ماڈل سے باورچی خانے کا ایک منظر تیار کرنے کو کہتی ہے جس میں چینی زبان میں ہاتھ سے لکھا ہوا یاددہانی نوٹ شامل ہے:

import torch
from diffusers import DiffusionPipeline

pipe = DiffusionPipeline.from_pretrained(
    "OpenMOSS-Team/MOSS-Image-Base",
    custom_pipeline="pipeline_moss_image",
    trust_remote_code=True,
    torch_dtype={"default": torch.bfloat16, "vae": torch.float32},
)
pipe.scheduler = type(pipe.scheduler).from_config(pipe.scheduler.config)
pipe.to("cuda")

prompt = (
    "A wide view of a refrigerator beside a kitchen counter with a fruit bowl. "
    "A small sticky note on the refrigerator door is handwritten in Chinese:“\n"
    "记得买牛奶和鸡蛋!\n牛奶两盒,鸡蛋一打。\n顺便带一袋面包。”"
)

image = pipe(
    prompt,
    height=1456,
    width=1456,
    num_inference_steps=50,
    guidance_scale=3.0,
    uncond_skip_layers=[22],
    generator=torch.Generator("cpu").manual_seed(42),
).images[0]

image.save("refrigerator_note.png")

اہم دلائل کو سمجھیں

  • custom_pipeline="pipeline_moss_image"، MOSS-Image پائپ لائن منتخب کرتا ہے۔
  • trust_remote_code=True، Diffusers کو ماڈل کی کسٹم پائپ لائن implementation لوڈ کرنے کی اجازت دیتا ہے۔
  • torch_dtype، بطورِ ڈیفالٹ bfloat16 استعمال کرتا ہے جبکہ VAE کے لیے float32 برقرار رکھتا ہے۔
  • height اور width آؤٹ پٹ کے dimensions متعین کرتے ہیں۔
  • num_inference_steps=50، پروجیکٹ کی تجویز کردہ ڈیفالٹ sampling ترتیب کی پیروی کرتا ہے۔
  • guidance_scale=3.0، تجویز کردہ classifier-free guidance قدر نافذ کرتا ہے۔
  • uncond_skip_layers=[22]، layer 22 پر negative-branch layer skipping فعال کرتا ہے۔
  • manual_seed(42)، ایک ہی configuration کے ساتھ بار بار چلانے کو زیادہ reproducible بناتا ہے۔

Gradio انٹرفیس چلائیں

اختیاری user-interface dependencies انسٹال کریں اور شامل کردہ application لانچ کریں:

pip install -e '.[ui]'
python gradio_app.py --model OpenMOSS-Team/MOSS-Image-Base

Gradio کی بتائی ہوئی مقامی address کھولیں، مثبت پرامپٹ درج کریں، تصویر کے dimensions منتخب کریں، اور generation شروع کریں۔ اس کے بجائے fine-tuned checkpoint آزمانے کے لیے model argument کو OpenMOSS-Team/MOSS-Image-SFT سے تبدیل کریں۔

تجویز کردہ sampling settings

  • Sampler: Flow-matching Euler
  • Steps: 50
  • CFG: 3
  • Shift: 5
  • Layer skipping: layer 22 پر negative-branch skipping
  • Python API negative prompt: خالی

یہ پروجیکٹ کے دستاویزی ڈیفالٹس ہیں اور عملی آغاز فراہم کرتے ہیں۔ اضافی پرامپٹ اور سیمپلنگ تجاویز کے لیے ریپوزٹری کی انگریزی صارف رہنما سے رجوع کریں۔

JSON لے آؤٹس کے ذریعے ساخت کو کنٹرول کریں

عام پرامپٹس بتاتے ہیں کہ تصویر میں کیا شامل ہونا چاہیے، لیکن یہ واضح طور پر متعین نہیں کرتے کہ ہر عنصر کہاں ہونا چاہیے۔ MOSS-Image اس کے بجائے ایسا JSON لے آؤٹ قبول کر سکتا ہے جو مکمل منظر، انفرادی متنی یا آبجیکٹ عناصر، اور ان کے باؤنڈنگ باکسز بیان کرتا ہو۔

مقررہ تصویری عناصر کے لیے لے آؤٹ باؤنڈنگ باکسز

درج ذیل لے آؤٹ ایک سادہ 1024 بائی 1024 سفری پوسٹر بیان کرتا ہے۔ اگر آپ اسے Python سے لوڈ کرنا چاہتے ہیں تو اسے layout.json کے نام سے محفوظ کریں، یا اسے براہِ راست Gradio کے Prompt فیلڈ میں چسپاں کریں۔

{
  "summary": {
    "meta": ["poster"],
    "canvas": "single",
    "caption": "کریم رنگ کے پس منظر، نیلے پہاڑ کی تصویر، اور اوپر عنوان EXPLORE پر مشتمل ایک سادہ سفری پوسٹر۔"
  },
  "items": [
    {
      "label": "text",
      "caption": "اوپر درمیان میں بڑے گہرے نیلے حروف میں لکھا ہوا عنوان۔",
      "text": "EXPLORE",
      "bbox": [-416, -384, -288, 384]
    },
    {
      "label": "object",
      "caption": "نچلے وسط میں نیلے پہاڑ کی ایک سادہ تصویر۔",
      "bbox": [-192, -288, 384, 288]
    }
  ],
  "bbox_coord_space": "abs_centralized",
  "bbox_format": "yxyx"
}

لے آؤٹ فارمیٹ کیسے کام کرتا ہے

  • summary.caption مکمل منظر اور اس کے بصری انداز کی وضاحت کرتا ہے۔
  • items آزادانہ طور پر مقرر کیے گئے متنی اور آبجیکٹ عناصر پر مشتمل ہوتا ہے۔
  • label کسی آئٹم کو متن یا آبجیکٹ کے طور پر شناخت کرتا ہے۔
  • caption آئٹم کی ظاہری شکل اور کردار بیان کرتا ہے۔
  • text ان درست الفاظ پر مشتمل ہوتا ہے جو متنی آئٹم کو دکھانے چاہییں۔
  • bbox عنصر کی جگہ اور حدود متعین کرتا ہے۔
  • bbox_format: "yxyx" کا مطلب ہے کہ ہر باکس کی ترتیب [y_min, x_min, y_max, x_max] ہے۔
  • bbox_coord_space: "abs_centralized" کا مطلب ہے کہ نقاط کینوس کے مرکز سے ناپے جاتے ہیں۔

1024 بائی 1024 کینوس پر دونوں محور -512 سے +512 تک پھیلے ہوتے ہیں۔ x کوآرڈینیٹ دائیں جانب بڑھتا ہے، جبکہ y کوآرڈینیٹ نیچے کی جانب بڑھتا ہے۔ عام کینوس کوآرڈینیٹس تبدیل کرنے کے لیے x اقدار میں سے کینوس کی نصف چوڑائی اور y اقدار میں سے کینوس کی نصف اونچائی منفی کریں۔

ہمیشہ وہی جنریشن ڈائمینشنز استعمال کریں جن کے لیے لے آؤٹ تیار کیا گیا تھا۔ عدم مطابقت کوآرڈینیٹ سسٹم کو تبدیل کر دیتی ہے اور عناصر کو ان کی مطلوبہ جگہوں سے ہٹا سکتی ہے۔

Python کے ذریعے لے آؤٹ جمع کرائیں

JSON فائل لوڈ کریں، اسے ایک سٹرنگ میں تبدیل کریں، اور اس سٹرنگ کو پائپ لائن پرامپٹ کے طور پر پاس کریں:

import json
import torch

with open("layout.json", "r", encoding="utf-8") as file:
    layout = json.load(file)

layout_prompt = json.dumps(layout, ensure_ascii=False)

image = pipe(
    layout_prompt,
    height=1024,
    width=1024,
    num_inference_steps=50,
    guidance_scale=3.0,
    uncond_skip_layers=[22],
    generator=torch.Generator("cpu").manual_seed(42),
).images[0]

image.save("travel_poster.png")

آپ پورے پرامپٹ کو دوبارہ لکھے بغیر ساخت میں ترمیم کر سکتے ہیں۔ کسی آئٹم کے متن، کیپشن یا باؤنڈنگ باکس میں ترمیم کریں اور تصویر دوبارہ بنائیں۔ README میں یہ بھی بتایا گیا ہے کہ یہ منظم طریقہ کنٹرول شدہ ایڈیٹنگ اور صارف دوست لے آؤٹ ٹولز کی معاونت کر سکتا ہے۔

GPU میموری کا نظم کریں

Gradio انٹرفیس Advanced settings کے تحت میموری کے تین طریقے فراہم کرتا ہے:

  • GPU resident: براہِ راست رسائی کے لیے مکمل ماڈل GPU پر رکھتا ہے۔
  • Component: ضرورت کے مطابق ماڈل کے اجزا CPU اور GPU کے درمیان منتقل کرتا ہے۔
  • Sequential fallback: سست تر inference کی قیمت پر میموری کا استعمال کم کرتا ہے۔

اگر ماڈل دستیاب GPU میموری میں فٹ نہ ہو تو Sequential موڈ منتخب کریں یا آؤٹ پٹ تصویر کا سائز کم کریں۔ DiT compilation ڈیفالٹ طور پر غیر فعال ہے اور Sequential موڈ میں دستیاب نہیں ہے۔

MOSS-Image کو ComfyUI کے ساتھ استعمال کریں

ریپوزٹری میں ComfyUI کے لیے مقامی MOSS-Image پلگ اِن شامل ہے۔ اسے انسٹال کرنے کے لیے ComfyUI Manager میں MOSS-Image تلاش کریں۔ پروجیکٹ ایک مثالی ورک فلو بھی فراہم کرتا ہے جسے ابتدائی نقطۂ آغاز کے طور پر درآمد کیا جا سکتا ہے۔

پروجیکٹ کو سرکاری ComfyUI ریپوزٹری میں انضمام کے لیے تیار کیا جا رہا ہے۔ تب تک ریپوزٹری کی ComfyUI انسٹالیشن اور استعمال کی ہدایات پر عمل کریں۔

Prompt Enhancer کے ساتھ جدید پرامپٹنگ

بنڈل شدہ MOSS-Image Prompt Enhancer ایک بنیادی تصویری خیال کو تفصیلی کیپشن یا مقامی لے آؤٹ پرامپٹ میں تبدیل کرتا ہے۔ اسے GPT-6-family agents کے لیے تیار کیا گیا ہے جن کے پاس مقامی فائل اور Python ٹولز موجود ہوں۔

  1. skills/moss-image-prompt-enhancer فولڈر اپنے ایجنٹ کی skills ڈائریکٹری میں انسٹال کریں۔
  2. تصویری خیال کے ساتھ $moss-image-prompt-enhancer چلائیں۔
  3. بتائیں کہ آپ تفصیلی کیپشن چاہتے ہیں یا Layout آؤٹ پٹ۔
  4. لے آؤٹ بناتے وقت مطلوبہ کینوس ڈائمینشنز فراہم کریں۔
  5. مرتب شدہ آؤٹ پٹ کو MOSS-Image کے positive prompt میں چسپاں کریں۔
  6. Layout آؤٹ پٹ کے لیے تصویر انہی کینوس ڈائمینشنز کے ساتھ بنائیں جو compilation کے دوران استعمال کی گئی تھیں۔

شامل کردہ اسکرپٹ پکسل کوآرڈینیٹ پر مبنی مسودوں کو مرکز پر مبنی عددی کوآرڈینیٹس استعمال کرتے ہوئے مختصر JSON میں تبدیل کرتا ہے۔ یہ صرف پرامپٹس تیار کرتا ہے اور کسی تصویر بنانے والی سروس کو کال نہیں کرتا۔

عملی تجاویز

  • دستاویزی ڈیفالٹس سے شروع کریں: تجربہ کرنے سے پہلے 50 اسٹیپس، CFG 3، شفٹ 5، اور لیئر 22 پر منفی برانچ کو چھوڑنے کی ترتیب استعمال کریں۔
  • درکار متن واضح رکھیں: درست عبارت پرامپٹ میں یا کسی آئٹم کے text فیلڈ میں درج کریں۔
  • پیچیدہ ڈیزائن کے لیے منظم لے آؤٹس استعمال کریں: پوسٹرز، خاکوں اور متن پر مبنی مناظر میں الگ الگ بیان کردہ عناصر اور باؤنڈنگ باکسز زیادہ مؤثر ہوتے ہیں۔
  • ابعاد احتیاط سے ہم آہنگ کریں: لے آؤٹ کوآرڈینیٹس منتخب کردہ کینوس کی چوڑائی اور اونچائی سے وابستہ ہوتے ہیں۔
  • تکراری کام کے دوران سیڈ برقرار رکھیں: ایک ہی سیڈ برقرار رکھنے سے پرامپٹ، ماڈل اور لے آؤٹ میں ہونے والی تبدیلیوں کا موازنہ آسان ہوتا ہے۔
  • میموری محدود ہو تو تصویر کا سائز کم کریں: یہ ان تدابیر میں سے ایک ہے جن کی منصوبے میں واضح طور پر سفارش کی گئی ہے۔
  • Base اور SFT کا موازنہ کریں: جب زیادہ واضح گروپ بندی اور زیادہ منظم متنی لے آؤٹ ترجیح ہوں تو SFT چیک پوائنٹ بہتر انتخاب ہو سکتا ہے۔

نتیجہ

MOSS-Image عمومی متن سے تصویر بنانے کی صلاحیت کو مضبوط متن رینڈرنگ اور منظم کمپوزیشن کنٹرول کے ساتھ یکجا کرتا ہے۔ آپ Python پائپ لائن یا Gradio انٹرفیس سے آغاز کر سکتے ہیں، پھر جہاں درست جگہ بندی اہم ہو وہاں JSON لے آؤٹس استعمال کر سکتے ہیں۔ ComfyUI انضمام، میموری موڈز اور prompt-enhancer اسکل ماڈل کو بصری ورک فلو میں شامل کرنے کے مزید طریقے فراہم کرتے ہیں۔ اسٹینڈ الون پائپ لائن کا کوڈ Apache License 2.0 کے تحت دستیاب ہے۔