GenAI - Anahtar kelimelerden görsel oluşturma

1. Giriş

Son Güncelleme: 12.10.2023

Görsel Oluşturma Aracı Görseli

Google Imagen, metin açıklamalarından gerçekçi ve yaratıcı görseller oluşturabilen güçlü bir Google dil modelidir. Vertex AI'daki Imagen, kullanıcıların hayal gücünü saniyeler içinde yüksek kaliteli görsel öğelere dönüştüren yeni nesil yapay zeka ürünleri geliştirmelerine olanak tanır. Metinden görsel oluşturmanın yanı sıra metin istemleri, görsel alt yazılar, görsel soru-cevap ve konu ve Stile Dayalı Resim Modeli Ayarlama.

İstem Oluşturma

Imagen'i kullanarak resim oluşturmak için istem olarak bilinen, görselin oluşturulduğu metin açıklamasını sağlamanız gerekir. Ancak, yüksek kaliteli, foto gerçekçi görüntüler üretmek için uzmanlığa ihtiyaç vardır. Perakende, imalat vb. belirli iş alanlarıyla ilgili bir resim oluşturmak istiyorsanız alana bağlı da olabilir. İstem tasarlamanın daha kolay bir yolu, Text Bison modeline bir anahtar kelime grubu vermektir.

Genel yaklaşım şöyledir:

fbb3826592b2816d.png

Gradyo kullanıcı arayüzü

Gradio, makine öğrenimi modeliniz, herhangi bir API veya birkaç satır kod kullanarak rastgele bir Python işlevi için hızlı bir şekilde kullanımı kolay, özelleştirilebilir kullanıcı arayüzü bileşenleri oluşturmanıza olanak tanıyan açık kaynak bir Python kitaplığıdır. Gradyo GUI'yi doğrudan Jupyter not defterinize entegre edebilir veya bağlantı olarak herkesle paylaşabilirsiniz. Gradyo, metin, resim, video ve ses de 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 önceden oluşturulmuş bir dizi kullanıcı arayüzü bileşeni de sağlar.

Oluşturacaklarınız

Bu codelab'de, aşağıdakileri yapacak bir Gradyasyon 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ü oluşturma için görüntüye özgü istemler oluşturmak amacıyla metin bizon modeliyle programatik olarak sıfır çekim ve birkaç atımlık öğrenmenin nasıl kullanılacağı.
  • API ve İstem aracılığıyla Imagen modelini kullanarak görüntü oluşturma.
  • Vertex AI Workbench not defterinden Gradyo Uygulaması Derleme, Dağıtma ve Test Etme.

Gerekenler

  • Bir GCP projesine erişim (ör. "Cloud-llm-preview4")
  • Vertex AI Workbench oluşturma erişimi
  • Vertex AI API etkinleştirildi.
  • Grad için Ağ Gereksinimleri: Not defteri örneği erişimi genel url'si

2. Kurulum

Not defterini oluşturma

  • Projeye giriş yapın
  • Sol gezinme menüsünden workbench'e gidin.
  • "KULLANICI TARAFINDAN YÖNETİLEN NOT KİTAPLARI"nın altında, varsayılan seçeneklerle yeni bir not defteri oluşturun.
  • "JUPYTERLAB'I AÇ" seçeneğini tıklayın. otomatik olarak eklenir.

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ştirmek hariç).

3. Kodu çalıştırma

Gerekli Bağımlılıkları ve Kitaplıkları Yükleme/İçe Aktarma

  • Grad uygulamasını yükleyin
  • Text-Bison ve görsel oluşturma için Vertex AI API'lerini içe aktarın.
  • Diğer tüm gerekli kitaplıkları içe aktarın.

Text-Bison Kullanarak İstem Oluşturma

Anahtar Kelimeler ve/veya Kelime Öbeği (ör. oluşturulacak gerekli resmi açıklayan bir cümle oluşturmak için kullanılabilecek anahtar kelime veya kelime öbeklerinin virgülle ayrılmış listesi) içeren bir kullanıcı girişi kullanır.

Örneğin karakter, konu, arka plan, ışık ve diğer açıklamalar.

İstemi oluşturan fonksiyon aşağıdaki gibi verilir:

içerik_def istemi_oluşturma(karakter,sinyal,tema, aydınlatma, kalite, extra_desc):

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

response_few_shot = model.tahmin(

    few_shot_prompt,

    **parameters

)

response_single_shot = model.predict(

    prompt,

    **parameters

)

Az sayıda çekim ve sıfır çekim istemi

Sıfır çekim istemi, modele metin oluşturmak için hiçbir 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 bunu yapmak zor olabilir.

Bununla birlikte, model önceden var olan örneklerle kısıtlanmadığından, sıfır çekim istemi de çok yaratıcı olabilir.

Az sayıda çekim istemi, metin oluşturmak için modele az sayıda örnek verilen bir metin oluşturma tekniğidir. Modelin ne üretileceği konusunda yol göstermesi nedeniyle bu yöntem, sıfır çekim istemeden daha kolay olabilir. Bununla birlikte, model yalnızca verilen örneklere benzer metinler oluşturabileceğinden, birkaç çekim istemi de sınırlayıcı olabilir.

Aşağıda, Birkaç Atış ve Sıfır Çekim istemleri için örnek kod verilmiştir.

Ⰳ**# Kodda Az sayıda Çekim İstemi kullanıldı**

Birkaç_shot_prompt = f"""Görsel Oluşturma Modelleri için istem yazma konusunda uzmansınız. Sağlanan ifadeleri ve anahtar kelimeleri kullanarak bunları birleştirin ve görsel oluşturma için kullanılabilecek mantıksal ve anlamlı bir istem oluşturmak için gerçekçi ayrıntılar ekleyin.

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:

"""

# Kodda kullanılan sıfır çekim istemi

prompt = f"""Görsel Oluşturma Modelleri için istem yazma konusunda uzmansınız. Görsel oluşturma modeli için özellikle şu kelimeleri içeren anlamlı istemlerin listesini yazmama yardım et: "{params_list_str}". Bu kelimeleri isteme ve anlamlı bir hale getirmeyi unutmayın."""

Imagen Kullanarak Resim Oluşturma

Kullanıcı giriş istemi ile negatif istem(isteğe bağlı) kullanır ve aynısını modele (imagegenerate@002) besler.

??def resim_oluşturma_tamamlanma(giriş, negatif_istem):

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

)

Kullanıcı giriş isteminden ve negatif istemden resim oluşturmak için aşağıdaki kod eklenir. Son kod, metin bizon modeli tarafından oluşturulan istemi kullanır.

Ⰳfrom vertexai.preview.vision_models ImageGenerationModel'i içe aktar

def image_generate(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: Biraz ağaçtan süslememiş taze bir yılbaşı ağacı satan genç bir kadın. Profesyonel Fotoğrafçı Tarafından Uzaktan Çekilmiş Soğuk Işık, Yüksek Kaliteli ve ayrıntılı Resim."

negative_prompt = "Bozuk ve ilgi çekici olmayan yüzler"

oluşturulan_resimler_listesi = görsel_oluşturma(kullanıcı_istemi;negatif_istem)

#oluşturulan resimlerden birini göster

generated_images_list[0].show()

Çıkış -

db04a6bfdd78693b.jpeg

4. Gradyo uygulamasını dağıtma

Grad, kullanıcıların anahtar kelimeleri girip yapılandırılmış istemler oluşturabildiği ön uç için kullanılır. Bu istemler doğrudan kullanılabilir ya da kullanıcı tarafından daha ayrıntılı şekilde düzenlenebilir. Ardından, girişlere göre görseller oluşturmak için Imagen'a beslenebilir. Grad, makine öğrenimi modelleri için kullanıcı arayüzleri oluşturmak amacıyla kullanılabilecek bir Python kitaplığıdır. Bu uygulamada, uygulamaya esneklik ve karmaşık veri akışları eklemek için Engellemeler kullanılır. Bloklar, Satırlar ve Sütunlar'ı kullanarak uygulama düzeni yönetimi sağlar:

Demo olarak bkz. 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() ile:

    btn = gr.Button("Submit")

gr.Row() ile:

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

btn.click(fn=istem_oluşturma, girişler=[Karakter, Sinyaller,Tema, fotoğraf_değiştiriciler, kalite_değiştiriciler, diğer_desc], çıkışlar = döndürülen_istemler)

Grad, kullanıcı giriş ve çıkışlarını yönetmek için Resim, Video, Kaydırma Çubuğu, Açılır Menü, Metin Kutusu, Radyo ve diğer seçenekler gibi birçok bileşen sağlar. Bu bileşenler, geliştiricilere kullanıcılardan gelen girişlerin kabul edilmesi ve Test-bison, imagen veya başka bir makine öğrenimi modeline beslemesi konusunda esneklik ve kontrol sağlar.

Bu projede uygulama, esneklik ve karmaşıklık eklemek için Bloklar kullanılarak oluşturulur.

verilerin uygulamaya geçirilmesinden sorumludur. Bloklara Ek olarak, birden fazla Gradyo Bileşeni

kullanılan araçlar:

Aşağıda, giriş ve negatif istemden resim oluşturmak için kullanılan bir kod snippet'i verilmiştir:

氃 #Resim Oluşturma bölümü

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

Gradyo uygulamasını çalıştırmak ve test etmek için bir metin istemi yazıp Oluştur düğmesini tıklamanız yeterlidir. Imagen, isteminize göre bir görsel oluşturur. Imagen'in oluşturabileceği resim türlerini görmek için farklı istemler deneyebilirsiniz.

Aşağıda, Gradyo uygulamasında istem oluşturma özelliğinin ekran görüntüsünü bulabilirsiniz.

70331c9645b1e91b.png

Gradyo uygulamasında görsel oluşturma işleminin ekran görüntüsünü aşağıda bulabilirsiniz.

a7261e8fafab7073.png

Birkaç örnek:

1. örnek:

[Soldaki resim] İstem (İstem olarak basit anahtar kelimeleri kullanma) : Kayıkla gezen birkaç arkadaş.

[Sağdaki resim] İstem (Text-Bison tarafından oluşturulan istemler kullanılarak) : Ormandaki koyu ağaçlarla çevrili bir teknede balık tutan 2 genç erkeğin fotoğrafı. Tişört giyen adamlar teknede duruyor. Doğal Işıklandırma, Yüksek Kaliteli, 4K Fotoğraf, Profesyonel Fotoğrafçı tarafından çekilmiştir.

c2f5fabd10baf42.jpeg abc9b8204a9fdf7f.jpeg

2. Örnek -

[Soldaki resim] İstem ((İstem olarak basit anahtar kelimeler kullanma)) : Bir Noel ağacı

[Sağ resim] İstem (Text-Bison tarafından oluşturulan istemler kullanılarak) : Lamba ve mobilyalar bulunan bir odada bir Noel ağacı. Ağaç, ışıklar ve süslerle dekore edilmiş. Pencerenin yanına yerleştirilmiş ve arka planda görünen bir duvar var. Profesyonel Fotoğrafçı tarafından uzaktan çekilen sıcak ışık, yüksek kaliteli, HDR fotoğraf.

f10cf9f52ffd92c7.jpeg cce36df7a439b309.jpeg

5. Temizleme

Kaynaklarınızı temizlemek için

  • Gradyo uygulamasını durdurun.
  • Workbench not defterini durdurma/silme.

6. Tebrikler

Tebrikler, Google Text-Bison API ve Imagen API ile istem ve resim oluşturmak için bir Gradyo uygulamasını başarıyla dağıttınız.