1. Giriş
Son güncelleme: 2023-10-12
Imagegen Image Generation
Google Imagen, metin açıklamalarından gerçekçi ve yaratıcı resimler oluşturabilen güçlü bir Google büyük dil modelidir. Vertex AI'daki Imagen, kullanıcıların hayal güçlerini saniyeler içinde yüksek kaliteli görsel öğelere dönüştüren yeni nesil yapay zeka ürünleri oluşturmasına olanak tanır. Metinden görüntü üretmenin yanı sıra metin istemleriyle görüntü düzenleme, görüntü açıklaması, görsel soru-cevap ve konu ile stile dayalı görüntü modeli ayarlama özelliklerini de destekler.
İstem Oluşturma
Imagen'ı kullanarak resim oluşturmak için istem olarak bilinen ve resim oluşturmak için kullanılan resmin metin açıklamasını sağlamanız gerekir. Ancak yüksek kaliteli, fotoğrafa benzeyen bir görüntü oluşturmak için istem uzmanlığı gerekir. Perakende, üretim vb. gibi belirli iş alanlarıyla ilgili bir resim oluşturmak istiyorsanız bu durum alana da bağlı olabilir. İstem tasarlamanın daha kolay bir yolu, Text Bison modeline bir dizi anahtar kelime vermektir.
Genel yaklaşım aşağıdaki gibidir:
Gradio kullanıcı arayüzü
Gradio, birkaç satır kod kullanarak makine öğrenimi modeliniz, herhangi bir API veya hatta rastgele bir Python işlevi için kullanımı kolay ve özelleştirilebilir kullanıcı arayüzü bileşenlerini hızlı bir şekilde oluşturmanıza olanak tanıyan açık kaynaklı bir Python kitaplığıdır. Gradio GUI'yi doğrudan Jupyter not defterinize entegre edebilir veya bağlantı olarak herkesle paylaşabilirsiniz. Gradio; metin, resim, video ve ses gibi çok çeşitli medya türlerini destekler. Ayrıca giriş alanları, düğmeler, kaydırma çubukları ve açılır menüler gibi bir dizi önceden oluşturulmuş kullanıcı arayüzü bileşeni de sunar.
Ne oluşturacaksınız?
Bu codelab'de, aşağıdakileri yapacak bir Gradio uygulaması dağıtacaksınız:
- Anahtar kelimeler veya kelime öbekleri kullanarak metin istemi oluşturun. Oluşturulan istem manuel olarak da düzenlenebilir.
- Kullanıcı arayüzünde oluşturulan istemden resimler üretin.
Neler öğreneceksiniz?
- Görüntü üretme için Imagen'e özel istemler oluşturmak üzere metin-bison modeliyle sıfır görevli ve few-shot örneği öğrenmeyi programatik olarak kullanma.
- API ve istem aracılığıyla Imagen modelini kullanarak görüntü oluşturma
- Vertex AI Workbench not defterinden Gradio uygulaması oluşturma, dağıtma ve test etme
Gerekenler
- Örneğin, "Cloud-llm-preview4" gibi bir GCP projesine erişim
- Vertex AI Workbench oluşturma erişimi
- Vertex AI API etkinleştirilmiş olmalıdır.
- Gradio için ağ gereksinimleri: Not defteri örneği herkese açık URL'si
2. Hazırlanma
Not defterini oluşturma
- Projeye giriş yapma
- Soldaki gezinme menüsünden çalışma alanına gidin.
- "USER-MANAGED NOTEBOOKS" (Kullanıcı Tarafından Yönetilen Not Defterleri) bölümünde varsayılan seçeneklerle yeni bir not defteri oluşturun.
- Örnek sağlandıktan sonra "OPEN JUPYTERLAB" (JUPYTERLAB'İ AÇ) seçeneğini tıklayın.
Not: Not defteri durdurulmuş durumdaysa başlatılması birkaç dakika sürebilir.
Kodu alma
Kod dosyasını buraya yerleştirdik. Bu not defteri, ortamınıza aktarılabilir ve olduğu gibi çalıştırılabilir (proje ayrıntılarınızı değiştirme hariç).
3. Kodu çalıştırma
Gerekli bağımlılıkları ve kitaplıkları yükleme/içe aktarma
- Gradio uygulamasını yükleyin
- Text-Bison ve görüntü üretme için Vertex AI API'lerini içe aktarın.
- Gerekli diğer tüm kitaplıkları içe aktarın.
Text-Bison ile İstem Oluşturma
Anahtar kelimeler ve/veya kelime öbeği içeren bir kullanıcı girişi kullanır. Örneğin, oluşturulacak resmi açıklayan bir cümle oluşturmak için kullanılabilecek, virgülle ayrılmış anahtar kelimeler veya kelime öbekleri listesi.
Örneğin: Karakter, Konu, Arka Plan, Işık ve diğer açıklamalar.
İstemi oluşturan işlev aşağıda verilmiştir:
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
)
Az örnekli ve sıfır örnekli istem
Sıfır görevli istem, modelin metin oluşturması için bağlam veya örnek verilmediği bir metin oluşturma tekniğidir. Modelin tutarlı ve bilgilendirici bir metin oluşturmak için kendi bilgisine güvenmesi gerektiğinden bu zorlu bir süreç olabilir.
Ancak sıfır örnekli istem, model önceden var olan örneklerle sınırlanmadığı için çok yaratıcı da olabilir.
Az örnekli istem, modelin metin oluşturmak için az sayıda örnek aldığı bir metin oluşturma tekniğidir. Modelin ne oluşturması gerektiği konusunda bazı yönergeleri olduğundan bu yöntem, sıfır görevli isteme yöntemine göre daha kolay olabilir. Ancak az örnekli istem, model yalnızca kendisine verilen örneklere benzer metinler oluşturabildiğinden sınırlayıcı da olabilir.
Aşağıda, az görevli ve sıfır görevli istemler için örnek kod verilmiştir.
**# Few Shot Prompt used in the code**
few_shot_prompt = f"""You are an expert in writing prompts for Image Generation Models. Sağlanan ifadeleri ve anahtar kelimeleri birleştirip bazı gerçekçi ayrıntılar ekleyerek görsel oluşturma için kullanılabilecek mantıklı ve anlamlı bir istem oluşturun.
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 used in the code
prompt = f"""You are an expert in writing prompts for Image Generation Models. Özellikle "{params_list_str}" kelimelerini içeren, Görüntü Üretme Modeli için anlamlı istemlerden oluşan bir liste yazmama yardım et. Bu kelimeleri isteme eklemeyi ve istemi anlamlı hale getirmeyi unutmayın."""
Imagen ile Görüntü Üretme
Kullanıcı girişi istemi ve negatif istem(isteğe bağlı) kullanır ve bunları modele (imagegeneration@002) iletir.
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
)
Aşağıdaki kod, kullanıcı giriş isteminden ve olumsuz istemden resim oluşturmak için eklenmiştir. Son kodda, text-bison modeli tarafından oluşturulan istem kullanılır.
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 = "İstem: Bir grup ağaç arasından seçtiği, süslenmemiş taze bir Noel ağacını sergileyip satan genç bir kadın. Soğuk ışık, yüksek kaliteli ve ayrıntılı, profesyonel fotoğrafçı tarafından uzaktan çekilmiş görüntü."
negative_prompt = "Çarpık ve çekici olmayan yüzler"
generated_images_list = image_generation(user_prompt,negative_prompt)
#show one of the generated image
generated_images_list[0].show()
Çıkış -

4. Gradio uygulamasını dağıtma
Gradio, kullanıcıların anahtar kelimeleri girebileceği ve yapılandırılmış istemler oluşturabileceği ön uç için kullanılır. Bu istemler doğrudan kullanılabilir veya kullanıcı tarafından daha fazla düzenlenebilir ve ardından girişlere göre resim oluşturmak için Imagen'e aktarılabilir. Gradio, makine öğrenimi modelleri için kullanıcı arayüzleri oluşturmak üzere kullanılabilen bir Python kitaplığıdır. Bu uygulamada, esneklik ve karmaşık veri akışları eklemek için bloklar kullanılır. Bloklar, satır ve sütun kullanarak uygulama düzeni yönetimi sağlar:
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)
Gradio, kullanıcı girişlerini ve çıkışlarını işlemek için Image, Video, Slider, Dropdown, Textbox, Radio gibi çeşitli bileşenler ve başka seçenekler sunar. Bu bileşenler, geliştiricilere kullanıcılardan gelen girişleri kabul etme ve bunları Test-bison, Imagen veya başka bir makine öğrenimi modeline aktarma konusunda esneklik ve kontrol sağlar.
Bu projede, esneklik ve karmaşık işlevler eklemek için uygulama Bloklar kullanılarak oluşturulur.
veriler uygulamaya aktarılır. Bloklara ek olarak, birden fazla Gradio bileşeni de
kullanımı dahil olmak üzere:
- Uygun düzenler için Satırlar, Sütunlar.
- Gerekli işlevselliği ve kullanım kolaylığını sağlamak için Düğme, Metin kutusu, Açılır liste ve Kaydırma çubuğu
- Sonuçları görüntülemek için Resim bileşeni.
- Kullanıcı arayüzünde dinamik değişiklikleri desteklemek için EventData ve update gibi diğer yardımcılar.
Aşağıda, giriş ve olumsuz istemden resim oluşturmak için kullanılan bir kod snippet'i yer almaktadır:
#Image Generation part
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 uygulamasını çalıştırmak ve test etmek için metin istemi yazıp Oluştur düğmesini tıklamanız yeterlidir. Imagen, isteminize göre bir resim üretir. Imagen'in ne tür resimler oluşturabileceğini görmek için farklı istemler deneyebilirsiniz.
Aşağıda, Gradio uygulamasında istem oluşturma ekran görüntüsü yer almaktadır.

Aşağıda, Gradio uygulamasında görüntü oluşturma özelliğinin ekran görüntüsü yer almaktadır.

Bazı örnekler:
1. örnek
[Sol resim] İstem (İstem olarak basit anahtar kelimeler kullanılıyor) : Tekneyle gezen iki arkadaş.
[Sağdaki resim] İstem (Text-Bison tarafından oluşturulan istemler kullanılarak) : Ormandaki koyu renkli ağaçlarla çevrili bir teknede balık tutan 2 genç adamın fotoğrafı. Gömlek giyen adamlar bir teknede duruyor. Doğal ışık, yüksek kalite, profesyonel fotoğrafçı tarafından çekilmiş 4K fotoğraf.

2. örnek
[Sol resim] İstem ((İstem olarak basit anahtar kelimeler kullanma)) : Yılbaşı ağacı
[Sağdaki resim] İstem (Text-Bison tarafından oluşturulan istemler kullanılarak) : Bir odada lamba ve mobilyaların yanında duran Noel ağacı. Ağaç, ışıklar ve süslerle dekore edilmiş olsun. Pencerenin yakınına yerleştirilmiş ve arka planda bir duvar görünüyor. Uzaktan çekilmiş, profesyonel fotoğrafçı tarafından çekilmiş, yüksek kaliteli, HDR fotoğraf.

5. Temizleme
Kaynaklarınızı temizlemek için
- gradio uygulamasını durdurun.
- Workbench not defterini durdurun/silin.
6. Tebrikler
Tebrikler, Google Text-Bison API ve Imagen API ile istem ve resim oluşturmak için Gradio uygulamasını başarıyla dağıttınız.