GenAI - تولید تصویر از کلمات کلیدی

۱. مقدمه

آخرین به‌روزرسانی: 2023-10-12

نسل تصویر Imagegen

گوگل ایمیجن (Google Imagen) یک مدل زبانی قدرتمند و بزرگ گوگل است که می‌تواند تصاویر واقع‌گرایانه و خلاقانه را از توضیحات متنی تولید کند. ایمیجن روی هوش مصنوعی ورتکس (Vertex AI) به کاربران این امکان را می‌دهد تا محصولات هوش مصنوعی نسل بعدی را بسازند که تخیل کاربر را در عرض چند ثانیه به دارایی‌های بصری با کیفیت بالا تبدیل می‌کند. علاوه بر تولید تصویر از متن، این ابزار از ویرایش تصویر از طریق پیام‌های متنی، زیرنویس تصویر، پرسش و پاسخ بصری و تنظیم مدل تصویر مبتنی بر موضوع و سبک نیز پشتیبانی می‌کند.

تولید سریع

برای ایجاد یک تصویر با استفاده از Imagen، باید توضیحی متنی از تصویر که به عنوان prompt شناخته می‌شود، ارائه دهید که با استفاده از آن تصویر تولید می‌شود. با این حال، برای تولید یک تصویر با کیفیت بالا و واقع‌گرایانه، به تخصص prompting نیاز است. همچنین اگر می‌خواهید تصویری مربوط به حوزه‌های تجاری خاص مانند خرده‌فروشی، تولید و غیره ایجاد کنید، می‌تواند وابسته به حوزه باشد. یک رویکرد آسان‌تر برای طراحی prompt، ارائه مجموعه‌ای از کلمات کلیدی به مدل Text Bison است.

رویکرد کلی به شرح زیر است -

fbb3826592b2816d.png

رابط کاربری گرادیو

Gradio یک کتابخانه پایتون متن‌باز است که به شما امکان می‌دهد به سرعت اجزای رابط کاربری قابل تنظیم و با کاربرد آسان را برای مدل یادگیری ماشین، هر API یا حتی یک تابع پایتون دلخواه با استفاده از چند خط کد ایجاد کنید. می‌توانید رابط کاربری گرافیکی Gradio را مستقیماً در نوت‌بوک Jupyter خود ادغام کنید یا آن را به عنوان یک لینک با هر کسی به اشتراک بگذارید. Gradio از طیف گسترده‌ای از انواع رسانه، از جمله متن، تصاویر، ویدیوها و صدا پشتیبانی می‌کند. همچنین تعدادی اجزای رابط کاربری از پیش ساخته شده مانند فیلدهای ورودی، دکمه‌ها، اسلایدرها و منوهای کشویی را ارائه می‌دهد.

آنچه خواهید ساخت

در این آزمایشگاه کد، شما یک برنامه Gradio را پیاده‌سازی خواهید کرد که:

  • با استفاده از کلمات کلیدی یا عبارات، یک متن راهنما ایجاد کنید. متن راهنما تولید شده را می‌توان به صورت دستی نیز ویرایش کرد.
  • تصاویر را از اعلان تولید شده در رابط کاربری تولید کنید.

آنچه یاد خواهید گرفت

  • نحوه استفاده از یادگیری zero-shot و few-shot با مدل text-bison به صورت برنامه‌نویسی شده برای تولید دستورات خاص imagen برای تولید تصویر.
  • نحوه تولید تصاویر با استفاده از مدل Imagen از طریق API و Prompt.
  • نحوه ساخت، استقرار و آزمایش برنامه Gradio از نوت بوک میز کار Vertex AI.

آنچه نیاز دارید

  • دسترسی به یک پروژه GCP به عنوان مثال - 'Cloud-llm-preview4'
  • دسترسی به ایجاد میز کار Vertex AI
  • رابط برنامه‌نویسی کاربردی هوش مصنوعی Vertex فعال شد.
  • الزامات شبکه برای Gradio: دسترسی به نمونه نوت بوک به آدرس عمومی

۲. راه‌اندازی

دفترچه یادداشت را ایجاد کنید

  • ورود به پروژه
  • از منوی ناوبری سمت چپ به میز کار بروید
  • در بخش « دفترچه‌های مدیریت‌شده توسط کاربر »، یک دفترچه یادداشت جدید با گزینه‌های پیش‌فرض ایجاد کنید.
  • پس از آماده‌سازی نمونه، روی « باز کردن JUPYTERLAB » کلیک کنید.

توجه: اگر نوت‌بوک در حالت توقف باشد، ممکن است راه‌اندازی آن چند دقیقه طول بکشد.

کد را دریافت کنید

ما فایل کد را اینجا قرار داده‌ایم. این دفترچه یادداشت را می‌توان در محیط شما وارد کرد و همانطور که هست اجرا کرد (به جز تغییر جزئیات پروژه).

۳. کد را اجرا کنید

نصب/وارد کردن وابستگی‌ها و کتابخانه‌های مورد نیاز

  • اپلیکیشن گرادیو را نصب کنید
  • API های Vertex AI را برای تولید Text-Bison و Image وارد کنید.
  • تمام کتابخانه‌های مورد نیاز دیگر را وارد کنید.

تولید اعلان با استفاده از Text-Bison

از ورودی کاربر که شامل کلمات کلیدی و/یا عبارت است، استفاده می‌کند. یعنی لیستی از کلمات کلیدی یا عبارات که با کاما از هم جدا شده‌اند و می‌توانند برای ساخت جمله‌ای که تصویر مورد نیاز برای تولید را توصیف می‌کند، استفاده شوند.

برای مثال - شخصیت، سوژه، پس‌زمینه، نورپردازی و سایر توضیحات.

تابعی که اعلان را تولید می‌کند به صورت زیر ارائه شده است:

def prompt_generation(persona,signal,theme,lighting,quality,extra_desc):

model = TextGenerationModel.from_pretrained("text-bison")

response_few_shot = model.predict(

    few_shot_prompt,

    **parameters

)

response_single_shot = model.predict(

    prompt,

    **parameters

)

دستور العمل کم-شات و صفر-شات

روش تولید متن Zero-shot یک تکنیک تولید متن است که در آن به مدل هیچ زمینه یا مثالی برای تولید متن داده نمی‌شود. این می‌تواند چالش برانگیز باشد، زیرا مدل باید برای تولید متنی منسجم و آموزنده به دانش خود تکیه کند.

با این حال، روش «بدون تکرار» می‌تواند بسیار خلاقانه نیز باشد، زیرا مدل توسط هیچ نمونه از پیش موجود محدود نمی‌شود.

روش تولید متن با تعداد کم، یک تکنیک تولید متن است که در آن تعداد کمی مثال به مدل داده می‌شود تا متن را از روی آنها تولید کند. این روش می‌تواند آسان‌تر از روش تولید متن با تعداد کم باشد، زیرا مدل در مورد آنچه باید تولید کند، راهنمایی‌هایی دارد. با این حال، روش تولید متن با تعداد کم می‌تواند محدودکننده نیز باشد، زیرا مدل ممکن است فقط بتواند متنی تولید کند که مشابه مثال‌هایی باشد که به آن داده شده است.

در زیر نمونه کد مربوط به دستورات Few-Shot و Zero-shot آمده است.

**# تعداد کمی دستور شلیک در کد استفاده شده است**

few_shot_prompt = f"""شما در نوشتن دستورالعمل برای مدل‌های تولید تصویر متخصص هستید. با استفاده از عبارات و کلمات کلیدی ارائه شده، آنها را به هم پیوند دهید و جزئیات واقع‌بینانه‌ای اضافه کنید تا دستورالعملی منطقی و معنادار ایجاد شود که بتوان از آن برای تولید تصویر استفاده کرد.

input: people, gardening, house garden, colorful plants, Real, HD image, Photo.

output: A Photo of people gardening in a house garden landscape with few coloured flowering plants. Realistic FULL HD Images, Elegant and natural facial and eye features taken by professional photographer

input: plumber, faucet, kitchen, high quality, natural lighting, Photo

output: A Photo of a plumber fixing a faucet in the kitchen. High quality image with natural indoor lighting.

input: house and garden, halloween, warm lighting, high quality image, Sketch

output: A Sketch of Beautiful House and Garden with Halloween Decorations. Warm lighting, High Quality, 4K photograph taken by professional photographer from front.

input: nice living room, warm lighting,Professional Photographer from far, Photo

output: A photo of a Well designed Living Room. Warm lighting, High Quality, 4K photograph taken by Professional Photographer from far

input: {params_list_str}

output:

"""

# دستور Zero Shot که در کد استفاده شده است

prompt = f"""شما در نوشتن سوالات برای مدل‌های تولید تصویر متخصص هستید. به من کمک کنید تا فهرستی از سوالات معنادار برای مدل تولید تصویر بنویسم، به طور خاص شامل کلمات: "{params_list_str}". به یاد داشته باشید که این کلمات را در سوال بگنجانید و سوال را معنادار کنید."""

تولید تصویر با استفاده از Imagen

از یک ورودی کاربر و یک ورودی منفی (اختیاری) استفاده می‌کند و همان را به مدل می‌دهد (imagegeneration@002).

 تعریف تکمیل تولید تصویر(ورودی، اعلان منفی):

input_prompt = input

model = ImageGenerationModel.from_pretrained("imagegeneration@002")

response = model.generate_images(

    prompt=input_prompt,

    number_of_images=4, #kept to static value of 4

    negative_prompt=negative_prompt

)

کد زیر برای تولید تصاویر از یک اعلان ورودی کاربر و یک اعلان منفی گنجانده شده است. کد نهایی از اعلان تولید شده توسط مدل text-bison استفاده می‌کند.

از vertexai.preview.vision_models ایمپورت ImageGenerationModel

تولید تصویر (ورودی، اعلان منفی):

input_prompt = input

model = ImageGenerationModel.from_pretrained("imagegeneration@002")

response = model.generate_images(

    prompt=input_prompt,

    number_of_images=4, #kept to static value of 4.. can be a max value of 8

    negative_prompt=negative_prompt

)

images = response.images

return images

user_prompt = " درخواست : زن جوانی در حال نمایش و فروش یک درخت کریسمس تازه و بدون تزئین از میان انبوهی از درختان. نورپردازی سرد، تصویر با کیفیت بالا و جزئیات بالا که توسط یک عکاس حرفه‌ای از دور گرفته شده است."

negative_prompt = "چهره‌های کج و معوج و غیرجذاب"

generated_images_list = تولید تصویر(دستور_کاربر، دستور_منفی)

#نمایش یکی از تصاویر تولید شده

نمایش_تصاویر_تولیدشده[0].show()

خروجی -

db04a6bfdd78693b.jpeg

۴. اپلیکیشن Gradio را نصب کنید

Gradio برای رابط کاربری استفاده می‌شود که در آن کاربران می‌توانند کلمات کلیدی را وارد کرده و پیام‌های ساختاریافته تولید کنند و این پیام‌ها می‌توانند مستقیماً استفاده شوند یا توسط کاربر ویرایش شده و سپس برای تولید تصاویر مطابق با ورودی‌ها به Imagen ارسال شوند. Gradio یک کتابخانه پایتون است که می‌تواند برای ایجاد رابط‌های کاربری برای مدل‌های یادگیری ماشین استفاده شود. برای این برنامه، از Blocks برای افزودن انعطاف‌پذیری و جریان‌های داده پیچیده به این برنامه استفاده می‌شود. Blocks مدیریت طرح‌بندی برنامه را با استفاده از ردیف‌ها و ستون‌ها فراهم می‌کند:

 با gr.Blocks() به عنوان نسخه آزمایشی:

#Prompt Generation Part

with gr.Row():

    with gr.Column(scale=1):

        Persona = gr.Textbox(label="Persona", info = "Customer segment such as Plumber, Electrician etc.")

    with gr.Column(scale=1):

        Signals = gr.Textbox(label="Signals", info = "Main content of banner such as Faucet, Lamp etc.")

    with gr.Column(scale=1):

        Theme = gr.Textbox(label="Theme", info = "Context of the banner such as Halloween, Kitchen etc.")

with gr.Row():

    with gr.Column(scale=1):

        photo_modifiers = gr.Textbox(label="Photography Modifiers", info = "Photography specific modifiers and parameters such as Lighting(Dramatic/Natural/Warm/Cold), Camera Proximity etc.")

    with gr.Column(scale=1):

        quality_modifiers =  gr.Textbox(label="Image Quality Modifier", info = "Quality Modifiers like high-quality, beautiful, stylized. 4K, HDR, By a professional etc")

    with gr.Column(scale=1):

        other_desc =  gr.Textbox(label="Any Other Description", info = "Other Descriptions for Image such as Style (Painting/Photo/Sketch), Bakground/Foreground Context")

با gr.Row():

    btn = gr.Button("Submit")

با gr.Row():

    returned_prompts = gr.Textbox(label="Result Prompts", interactive = True)    

btn.click(fn=prompt_generation, inputs=[Persona, Signals,Theme, photo_modifiers, quality_modifiers, other_desc], outputs = return_prompts)

برای مدیریت ورودی‌ها و خروجی‌های کاربر، Gradio اجزای متعددی مانند تصویر، ویدیو، اسلایدر، دراپ‌داون، تکست‌باکس، رادیو و گزینه‌های دیگر را ارائه می‌دهد. این اجزا به توسعه‌دهندگان انعطاف‌پذیری و کنترل نحوه پذیرش ورودی‌ها از کاربران و ارسال آن به Test-bison، imagen یا هر مدل ML دیگری را می‌دهند.

برای این پروژه، برنامه با استفاده از بلوک‌ها ایجاد شده است تا انعطاف‌پذیری و پیچیدگی بیشتری به آن اضافه شود.

جریان داده‌ها به برنامه. علاوه بر بلوک‌ها، چندین کامپوننت گرادیو نیز وجود دارند

استفاده شده از جمله:

در زیر قطعه کدی برای تولید تصاویر از ورودی و اعلان منفی استفاده شده است:

 #بخش تولید تصویر

with gr.Row():

    with gr.Column(scale=1):

        image_prompt = gr.Textbox(label="Image Generation Prompt")

with gr.Accordion("Advanced options", open=False): #Let's hide the advanced options!

    with gr.Row():

        negative_prompt = gr.Textbox(label="Negative prompt", info = "Specify What not to Include in Image ex. Bad Quality Image")

with gr.Row():

    with gr.Column(scale=1):    

        img_btn = gr.Button("Generate Images")

with gr.Row():

    with gr.Column():

        output_image_1 = gr.Image(label = "Result Image 1", visible = False)

    with gr.Column():

        output_image_2 = gr.Image(label = "Result Image 2", visible = False)

with gr.Row():

    with gr.Column():

        output_image_3 = gr.Image(label = "Result Image 3", visible = False)

    with gr.Column():

        output_image_4 = gr.Image(label = "Result Image 4", visible = False)

returned_prompts.select(populate_image_prompt, inputs = [returned_prompts], outputs = image_prompt)

img_btn.click(fn=image_generation_completion, inputs=[image_prompt,negative_prompt], outputs = [output_image_1,output_image_2,output_image_3,output_image_4])       

برای اجرا و آزمایش برنامه Gradio، کافیست یک متن تایپ کنید و روی دکمه Generate کلیک کنید. Imagen بر اساس متن شما تصویری تولید می‌کند. می‌توانید متن‌های مختلف را امتحان کنید تا ببینید Imagen چه نوع تصاویری می‌تواند تولید کند.

در زیر تصویر صفحه تولید سریع در برنامه Gradio را مشاهده می‌کنید.

70331c9645b1e91b.png

در زیر تصویر صفحه تولید تصویر در برنامه Gradio را مشاهده می‌کنید.

a7261e8fafab7073.png

چند مثال -

مثال ۱ -

[تصویر سمت چپ] نکته (با استفاده از کلمات کلیدی ساده به عنوان نکته): چند دوست در حال قایق‌سواری هستند.

[تصویر سمت راست] راهنما (با استفاده از راهنماهای تولید شده توسط Text-Bison): عکسی از دو مرد جوان که در حال ماهیگیری روی قایقی احاطه شده توسط درختان تیره در جنگل هستند. مردان پیراهنی به تن دارند و روی قایقی ایستاده‌اند. نورپردازی طبیعی، کیفیت بالا، عکس 4K، گرفته شده توسط عکاس حرفه‌ای.

c2f5fabd10baf42.jpegabc9b8204a9fdf7f.jpeg

مثال ۲ -

[تصویر سمت چپ] سوال ((استفاده از کلمات کلیدی ساده به عنوان سوال)): یک درخت کریسمس

[تصویر سمت راست] راهنما (با استفاده از راهنماهای تولید شده توسط Text-Bison): یک درخت کریسمس در اتاقی با چراغ و مبلمان. درخت با چراغ‌ها و تزئینات تزئین شده است. درخت نزدیک یک پنجره قرار گرفته است و دیواری در پس‌زمینه قابل مشاهده است. نورپردازی گرم، کیفیت بالا، HDR عکس گرفته شده توسط عکاس حرفه‌ای از فاصله دور.

f10cf9f52ffd92c7.jpegcce36df7a439b309.jpeg

۵. تمیز کردن

برای پاکسازی منابع خود،

  • برنامه گرادیو را متوقف کنید.
  • نوت‌بوک Workbench را متوقف/حذف کنید.

۶. تبریک

تبریک می‌گویم، شما با موفقیت یک برنامه Gradio برای ایجاد اعلان‌ها و تصاویر با Google Text-Bison API و Imagen API مستقر کردید.