1. Pengantar
Terakhir Diperbarui: 12-10-2023
Pembuatan Gambar Imagegen
Google Imagen adalah model bahasa besar Google yang canggih dan dapat menghasilkan gambar realistis dan kreatif dari deskripsi teks. Imagen di Vertex AI memungkinkan pengguna membuat produk AI generasi berikutnya yang mengubah imajinasi pengguna mereka menjadi aset visual berkualitas tinggi, dalam hitungan detik. Selain Pembuatan Gambar dari teks, model ini juga mendukung Pengeditan Gambar melalui perintah teks, Pemberian Teks pada Gambar, Tanya Jawab Visual, dan Penyesuaian Model Gambar Berbasis Subjek & Gaya.
Pembuatan Perintah
Untuk Membuat gambar menggunakan Imagen, Anda harus memberikan deskripsi teks gambar yang dikenal sebagai perintah, yang digunakan untuk membuat gambar. Namun, untuk menghasilkan gambar fotorealistik berkualitas tinggi, diperlukan keahlian dalam memberikan perintah. Hal ini juga dapat bergantung pada domain jika Anda ingin membuat gambar yang terkait dengan domain bisnis tertentu seperti retail, manufaktur, dll. Pendekatan yang lebih mudah untuk mendesain perintah adalah dengan memberikan sekumpulan kata kunci ke model Text Bison.
Pendekatan keseluruhannya adalah sebagai berikut -

UI Gradio
Gradio adalah library Python open source yang memungkinkan Anda membuat komponen UI yang mudah digunakan dan dapat disesuaikan dengan cepat untuk model machine learning, API, atau bahkan fungsi Python arbitrer menggunakan beberapa baris kode. Anda dapat mengintegrasikan GUI Gradio langsung ke notebook Jupyter atau membagikannya sebagai link kepada siapa saja. Gradio mendukung berbagai jenis media, termasuk teks, gambar, video, dan audio. Jetpack Compose juga menyediakan sejumlah komponen UI bawaan, seperti kolom 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 dihasilkan juga dapat diedit secara manual.
- Buat gambar dari perintah yang dihasilkan di UI.
Yang akan Anda pelajari
- Cara menggunakan zero-shot dan few-shot learning dengan model text-bison secara terprogram untuk membuat perintah khusus imagen untuk pembuatan gambar.
- Cara membuat gambar menggunakan model Imagen melalui API dan Perintah.
- Cara Membangun, Men-deploy, dan Menguji Aplikasi Gradio dari notebook Vertex AI Workbench.
Yang Anda butuhkan
- Akses ke project GCP, misalnya - 'Cloud-llm-preview4'
- Akses untuk membuat Vertex AI Workbench
- Vertex AI API diaktifkan.
- Persyaratan Jaringan untuk Gradio: URL publik akses instance Notebook
2. Mempersiapkan
Buat notebook
- Login ke project
- Buka workbench dari menu navigasi kiri
- Di bagian "USER-MANAGED NOTEBOOKS", buat notebook baru dengan opsi default.
- Klik "OPEN JUPYTERLAB" setelah instance disediakan.
Catatan: Mungkin perlu waktu beberapa menit untuk memulai notebook jika notebook dalam keadaan berhenti.
Mendapatkan kode
Kami telah menempatkan file kode di sini. Notebook ini dapat diimpor di lingkungan Anda dan dijalankan apa adanya (kecuali untuk mengubah detail project Anda).
3. Menjalankan kode
Instal/Impor Dependensi dan Library yang diperlukan
- Menginstal aplikasi Gradio
- Impor Vertex AI API untuk Text-Bison dan Pembuatan Gambar.
- Impor semua library lain yang diperlukan.
Pembuatan Perintah 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 diperlukan untuk dibuat.
Contoh - Persona, Subjek, Latar Belakang, Pencahayaan, dan Deskripsi lainnya.
Fungsi yang menghasilkan perintah diberikan sebagai berikut:
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
)
Perintah Few-Shot dan Zero-shot
Zero-shot prompting adalah teknik pembuatan teks yang tidak memberikan konteks atau contoh kepada model untuk menghasilkan teks. Hal ini bisa menjadi tantangan, karena model harus mengandalkan pengetahuannya sendiri untuk menghasilkan teks yang koheren dan informatif.
Namun, perintah zero-shot juga bisa sangat kreatif, karena model tidak dibatasi oleh contoh yang sudah ada sebelumnya.
Few-shot prompting adalah teknik pembuatan teks yang memberi model sejumlah kecil contoh untuk menghasilkan teks. Hal ini bisa lebih mudah daripada perintah zero-shot, karena model memiliki beberapa panduan tentang apa yang harus dibuat. Namun, few-shot prompting juga dapat membatasi, karena model hanya dapat menghasilkan teks yang mirip dengan contoh yang diberikan.
Berikut adalah kode contoh untuk perintah Few-Shot dan Zero-shot.
**# Perintah Few Shot yang digunakan dalam kode**
few_shot_prompt = f"""Anda adalah pakar dalam menulis perintah untuk Model Pembuatan Gambar. Menggunakan frasa dan kata kunci yang diberikan, gabungkan dan tambahkan beberapa detail realistis untuk membuat 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 adalah pakar dalam menulis perintah untuk Model Pembuatan Gambar. Bantu saya menulis daftar perintah yang bermakna untuk Model Pembuatan Gambar, khususnya yang menyertakan kata-kata: "{params_list_str}". Jangan lupa untuk menyertakan kata-kata ini dalam perintah dan buat perintah yang bermakna."""
Pembuatan Gambar Menggunakan Imagen
Menggunakan perintah input pengguna dan perintah negatif(opsional) serta memasukkannya ke model yang sama (imagegeneration@002).
def image_generation_completion(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
negative_prompt=negative_prompt
)
Kode berikut disertakan untuk membuat gambar dari perintah input pengguna dan perintah negatif. Kode akhir menggunakan perintah yang dihasilkan oleh model text-bison.
from vertexai.preview.vision_models import 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 = "Perintah: Seorang Wanita Muda Memamerkan dan menjual Pohon Natal Segar yang tidak dihias dari Sekelompok pohon. Pencahayaan Dingin, Gambar Berkualitas Tinggi dan detail yang Diambil Oleh Fotografer Profesional dari jauh."
negative_prompt = "Wajah yang terdistorsi dan tidak menarik"
generated_images_list = image_generation(user_prompt,negative_prompt)
#show one of the generated image
generated_images_list[0].show()
Output -

4. Men-deploy Aplikasi Gradio
Gradio digunakan untuk frontend tempat pengguna dapat memasukkan kata kunci dan membuat perintah terstruktur. Perintah ini dapat digunakan secara langsung atau diedit lebih lanjut oleh pengguna, lalu dimasukkan ke Imagen untuk membuat gambar sesuai input. Gradio adalah library Python yang dapat digunakan untuk membuat antarmuka pengguna bagi model machine learning. Untuk aplikasi ini, Blok digunakan untuk menambahkan fleksibilitas dan alur data yang kompleks ke aplikasi ini. Blok menyediakan pengelolaan tata letak aplikasi menggunakan Baris dan Kolom:
with gr.Blocks() as 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")
with gr.Row():
btn = gr.Button("Submit")
with 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 = returned_prompts)
Untuk menangani input dan output pengguna, Gradio menyediakan beberapa komponen seperti Image, Video, Slider, Dropdown, Textbox, Radio, dan opsi lainnya. Komponen ini memberi developer fleksibilitas dan kontrol tentang cara menerima input dari pengguna dan memasukkannya ke Test-bison, imagen, atau model ML lainnya.
Untuk project ini, aplikasi dibuat menggunakan Blok untuk menambahkan fleksibilitas dan kompleksitas
data mengalir ke aplikasi. Selain Blok, beberapa Komponen Gradio adalah
digunakan termasuk:
- Baris, Kolom untuk Tata Letak yang Tepat.
- Tombol, Kotak teks, Dropdown, dan Penggeser untuk mencapai fungsi yang diperlukan dan kemudahan penggunaan
- Komponen Gambar untuk menampilkan hasil.
- Helper lain seperti EventData, update untuk mendukung perubahan dinamis pada UI.
Berikut adalah cuplikan kode yang digunakan untuk membuat gambar dari input dan perintah 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 ketik perintah teks dan klik tombol Buat. Imagen akan membuat gambar berdasarkan perintah Anda. Anda dapat mencoba berbagai perintah untuk melihat jenis gambar yang dapat dibuat Imagen.
Di bawah ini adalah screenshot Pembuatan Perintah di Aplikasi Gradio.

Di bawah ini adalah screenshot Pembuatan Gambar di Aplikasi Gradio.

Beberapa contoh -
Contoh 1 -
[Gambar kiri] Perintah (Menggunakan kata kunci sederhana sebagai perintah) : Beberapa teman sedang berperahu.
[Gambar kanan] Perintah (Menggunakan Perintah yang dibuat oleh Text-Bison) : Foto 2 pemuda sedang memancing di atas perahu yang dikelilingi pepohonan gelap di hutan. Pria memakai kemeja dan berdiri di atas perahu. Pencahayaan Alami, Kualitas Tinggi, Foto 4K yang diambil oleh Fotografer Profesional.

Contoh 2 -
[Gambar kiri] Perintah ((Menggunakan kata kunci sederhana sebagai perintah)) : Pohon Natal
[Gambar kanan] Perintah (Menggunakan Perintah yang dibuat oleh Text-Bison) : Pohon Natal di sebuah ruangan dengan lampu dan furnitur. Pohon dihiasi dengan lampu dan ornamen. Kucing tersebut ditempatkan di dekat jendela, dan ada dinding yang terlihat di latar belakang. Pencahayaan Hangat, Kualitas Tinggi, Foto HDR yang diambil oleh Fotografer Profesional dari jauh.

5. Membersihkan
Untuk membersihkan resource Anda:
- Hentikan aplikasi gradio.
- Hentikan/Hapus notebook Workbench.
6. Selamat
Selamat, Anda telah berhasil men-deploy aplikasi Gradio untuk membuat perintah dan gambar dengan Google Text-Bison API dan Imagen API.