GenAI - Pembuatan Gambar dari kata kunci

1. Pengantar

Terakhir diperbarui: 12-10-2023

Pembuatan Gambar Imagegen

Google Imagen adalah model bahasa besar (LLM) Google yang canggih dan dapat membuat gambar yang realistis dan kreatif dari deskripsi teks. Imagen di Vertex AI memungkinkan pengguna membangun produk AI generasi berikutnya yang mengubah imajinasi pengguna menjadi aset visual berkualitas tinggi dalam hitungan detik. Selain Pembuatan Gambar dari teks, aplikasi ini juga mendukung Pengeditan Gambar melalui perintah teks, Pemberian Teks Gambar, Tanya Jawab Visual, dan Subjek & Penyesuaian Model Gambar Berbasis Gaya.

Pembuatan Perintah

Untuk membuat gambar menggunakan Imagen, Anda perlu memberikan deskripsi teks dari gambar yang dikenal sebagai perintah, yang akan digunakan untuk membuat gambar. Namun, untuk menghasilkan gambar fotorealistik berkualitas tinggi, diperlukan keahlian yang mumpuni. Model ini juga bisa bergantung pada domain jika Anda ingin membuat gambar yang terkait dengan domain bisnis tertentu seperti retail, manufaktur, dll. Pendekatan yang lebih mudah untuk mendesain prompt adalah dengan memberikan satu set kata kunci ke model Text Bison.

Pendekatan keseluruhan seperti di bawah -

fbb3826592b2816d.png

UI Gradio

Gradio adalah library Python open source yang memungkinkan Anda dengan cepat membuat komponen UI yang mudah digunakan dan dapat disesuaikan untuk model machine learning, API apa pun, atau bahkan fungsi Python arbitrer menggunakan beberapa baris kode. Anda dapat mengintegrasikan GUI Gradio langsung ke Jupyter notebook Anda atau membagikannya sebagai tautan dengan siapa pun. Gradio mendukung berbagai jenis media, termasuk teks, gambar, video, dan audio. Kode ini juga menyediakan sejumlah komponen UI bawaan, seperti bidang input, tombol, penggeser, dan menu drop-down.

Yang akan Anda bangun

Dalam codelab ini, Anda akan men-deploy aplikasi Gradio yang akan:

  • Buat perintah teks menggunakan kata kunci atau frasa. Perintah yang dibuat juga dapat diedit secara manual.
  • Membuat gambar dari perintah yang dihasilkan di UI.

Yang akan Anda pelajari

  • Cara menggunakan pembelajaran zero-shot dan few-shot dengan model text-bison secara terprogram guna menghasilkan perintah khusus imagen untuk pembuatan gambar.
  • Cara membuat gambar menggunakan model Imagen melalui API dan Prompt.
  • Cara Membangun, Men-deploy, dan Menguji Aplikasi Gradio dari notebook workbench Vertex AI.

Yang Anda butuhkan

  • Misalnya, akses ke project GCP - 'Cloud-llm-preview4'
  • Akses untuk membuat Vertex AI Workbench
  • Vertex AI API diaktifkan.
  • Persyaratan Jaringan untuk Gradio: URL publik akses instance Notebook

2. Mempersiapkan

Membuat notebook

  • Login ke project
  • Buka workbench dari menu navigasi sebelah kiri
  • Di bagian "USER-MANAGED NOTEBOOKS", buat notebook baru dengan opsi default.
  • Klik "BUKA JUPYTERLAB" setelah instance disediakan.

Catatan: Mungkin diperlukan waktu beberapa menit untuk memulai notebook jika notebook dalam status berhenti.

Mendapatkan kode

Kita telah menempatkan file kode di sini. Notebook ini dapat diimpor di lingkungan Anda dan dijalankan sebagaimana adanya (kecuali untuk mengubah detail project Anda).

3. Menjalankan kode

Menginstal/Mengimpor Dependensi dan Library yang diperlukan

  • Instal aplikasi Gradio
  • Impor Vertex AI API untuk Text-Bison dan Pembuatan Gambar.
  • Impor semua library lain yang diperlukan.

Pembuatan Prompt Menggunakan Text-Bison

Menggunakan input pengguna yang berisi Kata Kunci dan/atau Frasa, yaitu daftar kata kunci atau frasa yang dipisahkan koma yang dapat digunakan untuk menyusun kalimat yang menjelaskan gambar yang akan dibuat.

Misalnya - Persona, Subjek, Latar Belakang, Pencahayaan, dan Deskripsi lainnya.

Fungsi yang menghasilkan perintah diberikan seperti di bawah ini:

fdef prompt_generation(persona,sinyal,tema, pencahayaan, kualitas, ekstra_desc):

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

response_few_shot = model.Predict(

    few_shot_prompt,

    **parameters

)

response_single_shot = model.predict(

    prompt,

    **parameters

)

Prompt Few-Shot dan Zero-shot

Zero-shot prompting adalah teknik pembuatan teks saat model tidak diberi konteks atau contoh untuk menghasilkan teks. Hal ini bisa jadi tantangan, karena model harus mengandalkan pengetahuannya sendiri untuk menghasilkan teks yang koheren dan informatif.

Namun, metode zero-shot prompting juga bisa sangat kreatif, karena model tidak dibatasi oleh contoh yang sudah ada sebelumnya.

Few-shot prompting adalah teknik pembuatan teks di mana model diberi sejumlah kecil contoh untuk menghasilkan teks. Cara ini lebih mudah daripada metode zero-shot prompting, karena model ini memiliki beberapa panduan tentang apa yang akan dihasilkan. Namun, few-shot prompting juga dapat membatasi, karena model mungkin hanya dapat menghasilkan teks yang mirip dengan contoh yang diberikan.

Berikut adalah kode contoh untuk prompt Few-Shot dan Zero-shot.

鰃**# Beberapa Perintah Shot yang digunakan dalam kode**

few_shot_prompt = f"""Anda ahli dalam menulis perintah untuk Model Pembuatan Gambar. Gunakan frasa dan kata kunci yang disediakan, gabungkan dan tambahkan beberapa detail realistis untuk menghasilkan perintah yang logis dan bermakna yang dapat digunakan untuk pembuatan gambar.

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:

"""

# Perintah Zero Shot yang digunakan dalam kode

prompt = f"""Anda ahli dalam menulis perintah untuk Model Pembuatan Gambar. Bantu saya menulis daftar perintah yang bermakna untuk Model Pembuatan Gambar, yang secara khusus menyertakan kata-kata: "{params_list_str}". Ingatlah untuk menyertakan kata-kata ini dalam perintah dan membuat perintah tersebut bermakna."""

Pembuatan Gambar Menggunakan Imagen

Menggunakan perintah input pengguna dan perintah negatif(opsional) serta memberikan feed yang sama ke model (imagegeneration@002).

{i>Fi<i} def image_generation_completion(input, {i>negative_prompt<i}):

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

)

Kode berikut disertakan untuk membuat gambar dari prompt input pengguna dan perintah negatif. Kode akhir menggunakan perintah yang dibuat oleh model text-bison.

鰃from vertexai.preview.vision_models impor ImageGenerationModel

def image_generation(input, negative_prompt):

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 = "Prompt: Seorang Perempuan Muda Menampilkan dan menjual Pohon Natal Segar tanpa hiasan dari sekelompok pohon. Pencahayaan Dingin, Kualitas Tinggi, dan Gambar mendetail Diambil Fotografer Profesional dari jauh."

negative_prompt = "Wajah terdistorsi dan tidak menarik"

generated_images_list = image_generation(user_prompt,negative_prompt)

#show salah satu gambar yang dibuat

generated_images_list[0].show()

{i>Output<i} -

db04a6bfdd78693b.jpeg

4. Men-deploy Aplikasi Gradio

Gradio digunakan untuk frontend tempat pengguna dapat memasukkan kata kunci dan membuat prompt terstruktur. Perintah ini dapat digunakan secara langsung atau dapat diedit lebih lanjut oleh pengguna, lalu dimasukkan ke Imagen untuk menghasilkan gambar sesuai input. Gradio adalah library Python yang dapat digunakan untuk membuat antarmuka pengguna bagi model machine learning. Untuk aplikasi ini, Blocks digunakan untuk menambahkan fleksibilitas dan aliran data yang kompleks ke aplikasi ini. Blok menyediakan pengelolaan tata letak aplikasi menggunakan Baris dan Kolom:

鰃dengan gr.Blocks() sebagai demo:

#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")

dengan gr.Row():

    btn = gr.Button("Submit")

dengan gr.Row():

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

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

Untuk menangani input dan output pengguna, Gradio menyediakan beberapa komponen seperti Gambar, Video, Penggeser, Dropdown, Kotak Teks, Radio, dan opsi lainnya. Komponen ini memberi developer fleksibilitas dan kontrol terkait cara menerima input dari pengguna dan memasukkannya ke Test-bison, imagen, atau model ML lainnya.

Untuk project ini, aplikasi dibuat menggunakan Blocks untuk menambahkan fleksibilitas dan kerumitan

aliran data ke aplikasi. Selain Blok, beberapa Komponen Gradio

digunakan, termasuk:

Berikut adalah cuplikan kode yang digunakan untuk membuat gambar dari input dan prompt negatif:

鰃 #Bagian Pembuatan Gambar

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])       

Untuk menjalankan dan menguji aplikasi Gradio, cukup ketikkan prompt teks dan klik tombol Generate. Imagen akan membuat gambar berdasarkan perintah Anda. Anda dapat mencoba berbagai perintah untuk melihat jenis gambar yang dapat dibuat oleh Imagen.

Di bawah ini adalah screenshot Prompt Generation di Aplikasi Gradio.

70331c9645b1e91b.pngS

Di bawah ini adalah tangkapan layar dari Pembuatan Gambar di Aplikasi Gradio.

a7261e8fafab7073.png

Beberapa contoh -

Contoh 1 -

[Gambar kiri] Perintah (Menggunakan kata kunci sederhana sebagai perintah) : Sepasang teman berperahu.

[Right image] Prompt (Using Prompts created by Text-Bison) : Foto 2 laki-laki sedang memancing di atas perahu yang dikelilingi pohon gelap di hutan. Pria mengenakan kemeja dan berdiri di atas perahu. Pencahayaan Alami, Kualitas Tinggi, Foto 4K difoto oleh Fotografer Profesional.

c2f5fabd10baf42.jpeg abc9b8204a9fdf7f.jpeg

Contoh 2 -

[Left image] Dialog ((Using simple keywords as prompt)) : Pohon Natal

[Right image] Perintah (Menggunakan Perintah yang dibuat oleh Text-Bison) : Pohon Natal di ruangan dengan lampu dan furnitur. Pohon itu dihiasi dengan lampu dan ornamen. Sensor ini ditempatkan di dekat jendela, dan terdapat dinding yang terlihat di latar belakang. Pencahayaan Hangat, Kualitas Tinggi, Foto HDR difoto oleh Fotografer Profesional yang diambil dari jarak jauh.

f10cf9f52ffd92c7.jpeg cce36df7a439b309.jpeg

5. Membersihkan

Untuk membersihkan sumber daya Anda,

  • Hentikan aplikasi gradio.
  • Hentikan/Hapus notebook Workbench.

6. Selamat

Selamat, Anda telah berhasil men-deploy aplikasi Gradio untuk membuat prompt dan gambar dengan Google Text-Bison API dan Imagen API.