GenAI - Anahtar kelimelerden görsel oluşturma

1. Giriş

Son güncelleme: 2023-10-12

Imagegen Image Generation

Google Imagen, metin açıklamalarından gerçekçi ve yaratıcı görüntüler 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 Üretme

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 ve fotogerçekçi 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. Bir istem tasarlamanın daha kolay bir yolu, Text Bison modeline bir dizi anahtar kelime vermektir.

Genel yaklaşım aşağıdaki gibidir:

fbb3826592b2816d.png

Gradio kullanıcı arayüzü

Gradio, makine öğrenimi modeliniz, herhangi bir API veya hatta rastgele bir Python işlevi için birkaç satır kod kullanarak kolayca kullanılabilen, özelleştirilebilir kullanıcı arayüzü bileşenleri 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 dahil olmak üzere ç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 resim üretin.

Neler öğreneceksiniz?

  • Görüntü üretme için Imagen'e özel istemler oluşturmak üzere metin-bison modeliyle sıfır örnekli ve çok örnekli öğ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
  • Sol gezinme menüsünden workbench'e gidin.
  • "KULLANICI TARAFINDAN YÖNETİLEN NOT DEFTERLERİ" bölümünde varsayılan seçeneklerle yeni bir not defteri oluşturun.
  • Örnek sağlandıktan sonra "OPEN JUPYTERLAB"ı (JupyterLab'i aç) 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 Image Generation 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şturulması gereken resmi açıklayan bir cümle oluşturmak için kullanılabilecek, virgülle ayrılmış anahtar kelime veya kelime öbeği listesi.

Örneğin; karakter, konu, arka plan, ışı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 örnekli 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 görev olabilir.

Ancak model, önceden var olan örneklerle sınırlanmadığı için sıfır görevli istemler de çok yaratıcı 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ğu için bu yöntem, sıfır görevli istemden daha kolay olabilir. Ancak model, yalnızca kendisine verilen örneklere benzer metinler oluşturabildiğinden az örnekli istem de sınırlayıcı olabilir.

Aşağıda, çok 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 gerçekçi ayrıntılar ekleyerek görüntü üretme 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. Resim Üretme Modeli için anlamlı istemler listesi oluşturmama yardım et. Listede özellikle "{params_list_str}" kelimeleri yer alsın. Bu kelimeleri isteme eklemeyi ve istemin anlamlı olmasını sağlamayı 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ı sergileyen ve satan genç bir kadın. Soğuk ışık, yüksek kaliteli ve ayrıntılı görüntü, profesyonel fotoğrafçı tarafından uzaktan çekilmiş."

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ış -

db04a6bfdd78693b.jpeg

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 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ılır. Örneğin:

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 görüntü oluşturur. 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.

70331c9645b1e91b.png

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

a7261e8fafab7073.png

Bazı örnekler:

1. örnek

[Sol resim] İstem (İstem olarak basit anahtar kelimeler kullanma) : Tekneyle gezen iki arkadaş.

[Sağdaki resim] İstem (Text-Bison tarafından oluşturulan istemler kullanılarak) : Ormanda 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.

c2f5fabd10baf42.jpeg abc9b8204a9fdf7f.jpeg

2. örnek

[Soldaki 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 bir Noel ağacı. Ağaç, ışıklar ve süslerle dekore edilmiş. 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.

f10cf9f52ffd92c7.jpeg cce36df7a439b309.jpeg

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.