Büyük Dil Modelleri (LLM'ler) yalnızca metin oluşturma ile sınırlı değildir. Metin açıklamalarından görüntü oluşturmak da mümkündür. Görüntülerin bir modalite olarak kullanılması, MedTech, mimarlık, turizm, oyun geliştirme gibi birçok alanda oldukça faydalı olabilir. Bu bölümde, en popüler iki görüntü oluşturma modeli olan DALL-E ve Midjourney'i inceleyeceğiz.
Bu derste şunları ele alacağız:
- Görüntü oluşturma ve neden faydalı olduğu.
- DALL-E ve Midjourney, ne oldukları ve nasıl çalıştıkları.
- Görüntü oluşturma uygulaması nasıl oluşturulur.
Bu dersi tamamladıktan sonra şunları yapabileceksiniz:
- Görüntü oluşturma uygulaması oluşturmak.
- Uygulamanız için meta istemlerle sınırlar belirlemek.
- DALL-E ve Midjourney ile çalışmak.
Görüntü oluşturma uygulamaları, Üretken Yapay Zeka'nın yeteneklerini keşfetmek için harika bir yoldur. Örneğin şu amaçlarla kullanılabilirler:
-
Görüntü düzenleme ve sentezleme. Görüntü düzenleme ve görüntü sentezleme gibi çeşitli kullanım durumları için görüntüler oluşturabilirsiniz.
-
Çeşitli endüstrilere uygulanabilir. MedTech, Turizm, Oyun geliştirme gibi çeşitli endüstriler için görüntüler oluşturmak için de kullanılabilirler.
Bu ders kapsamında, Edu4All adlı girişimimizle çalışmaya devam edeceğiz. Öğrenciler, değerlendirmeleri için görüntüler oluşturacaklar; hangi görüntülerin oluşturulacağı tamamen öğrencilere bağlıdır. Örneğin, kendi masalları için illüstrasyonlar oluşturabilir, hikayeleri için yeni bir karakter yaratabilir veya fikirlerini ve kavramlarını görselleştirmelerine yardımcı olabilirler.
Edu4All öğrencilerinin sınıfta anıtlar üzerinde çalışırken oluşturabilecekleri örneklerden biri:
şu tür bir istem kullanarak:
"Sabahın erken saatlerinde güneş ışığında Eyfel Kulesi'nin yanında bir köpek"
DALL-E ve Midjourney, metin istemleri kullanarak görüntü oluşturmanıza olanak tanıyan en popüler iki görüntü oluşturma modelidir.
Öncelikle DALL-E ile başlayalım. Bu, metin açıklamalarından görüntü oluşturan bir Üretken Yapay Zeka modelidir.
DALL-E, CLIP ve diffused attention adlı iki modelin birleşimidir.
-
CLIP, görüntüler ve metinlerden sayısal veri temsilleri (embedding) oluşturan bir modeldir.
-
Diffused attention, embeddinglerden görüntü oluşturan bir modeldir. DALL-E, bir görüntü ve metin veri seti üzerinde eğitilmiştir ve metin açıklamalarından görüntü oluşturmak için kullanılabilir. Örneğin, DALL-E bir şapka takmış kedi veya mohawk saçlı bir köpek görüntüsü oluşturmak için kullanılabilir.
Midjourney, DALL-E'ye benzer şekilde çalışır; metin istemlerinden görüntüler oluşturur. Midjourney, "şapka takmış bir kedi" veya "mohawk saçlı bir köpek" gibi istemler kullanılarak görüntüler oluşturmak için kullanılabilir.
Wikipedia'dan alınan görsel, Midjourney tarafından oluşturulmuş görüntü
Öncelikle, DALL-E. DALL-E, autoregressive transformer ile transformer mimarisine dayalı bir Üretken Yapay Zeka modelidir.
Bir autoregressive transformer, bir modelin metin açıklamalarından görüntü oluşturma şeklini tanımlar; bir pikseli birer birer oluşturur ve ardından oluşturulan pikselleri bir sonraki pikseli oluşturmak için kullanır. Sinir ağında birden fazla katmandan geçerek görüntü tamamlanır.
Bu süreçle DALL-E, oluşturduğu görüntüdeki nitelikleri, nesneleri, özellikleri ve daha fazlasını kontrol eder. Ancak, DALL-E 2 ve 3, oluşturulan görüntü üzerinde daha fazla kontrol sağlar.
Peki bir görüntü oluşturma uygulaması oluşturmak için neye ihtiyacınız var? Şu kütüphanelere ihtiyacınız olacak:
- python-dotenv, gizli bilgilerinizi .env dosyasında koddan uzak tutmanız için bu kütüphaneyi kullanmanız şiddetle tavsiye edilir.
- openai, OpenAI API ile etkileşim kurmak için kullanacağınız kütüphane.
- pillow, Python'da görüntülerle çalışmak için.
- requests, HTTP istekleri yapmanıza yardımcı olur.
Henüz yapmadıysanız, Microsoft Learn sayfasındaki talimatları izleyerek bir Azure OpenAI kaynağı ve model oluşturun. Model olarak DALL-E 3'ü seçin.
-
.env adlı bir dosya oluşturun ve şu içeriği ekleyin:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Bu bilgiyi Azure OpenAI Foundry Portal'daki "Deployments" bölümünde bulabilirsiniz.
-
Yukarıdaki kütüphaneleri requirements.txt adlı bir dosyada şu şekilde toplayın:
python-dotenv openai pillow requests -
Ardından sanal bir ortam oluşturun ve kütüphaneleri yükleyin:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtWindows için sanal ortam oluşturma ve etkinleştirme komutları şunlardır:
python3 -m venv venv venv\Scripts\activate.bat
-
app.py adlı bir dosyaya şu kodu ekleyin:
import openai import os import requests from PIL import Image import dotenv from openai import OpenAI, AzureOpenAI # import dotenv dotenv.load_dotenv() # configure Azure OpenAI service client client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" ) try: # Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] ) # Set the directory for the stored image image_dir = os.path.join(os.curdir, 'images') # If the directory doesn't exist, create it if not os.path.isdir(image_dir): os.mkdir(image_dir) # Initialize the image path (note the filetype should be png) image_path = os.path.join(image_dir, 'generated-image.png') # Retrieve the generated image image_url = generation_response.data[0].url # extract image URL from response generated_image = requests.get(image_url).content # download the image with open(image_path, "wb") as image_file: image_file.write(generated_image) # Display the image in the default image viewer image = Image.open(image_path) image.show() # catch exceptions except openai.InvalidRequestError as err: print(err)
Bu kodu açıklayalım:
-
Öncelikle, OpenAI kütüphanesi, dotenv kütüphanesi, requests kütüphanesi ve Pillow kütüphanesi dahil olmak üzere ihtiyacımız olan kütüphaneleri içe aktarıyoruz.
import openai import os import requests from PIL import Image import dotenv
-
Daha sonra, .env dosyasından ortam değişkenlerini yüklüyoruz.
# import dotenv dotenv.load_dotenv()
-
Ardından, Azure OpenAI hizmeti istemcisini yapılandırıyoruz.
# Get endpoint and key from environment variables client = AzureOpenAI( azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"], api_key=os.environ['AZURE_OPENAI_API_KEY'], api_version = "2024-02-01" )
-
Son olarak, görüntüyü oluşturuyoruz:
# Create an image by using the image generation API generation_response = client.images.generate( prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', size='1024x1024', n=1, model=os.environ['AZURE_OPENAI_DEPLOYMENT'] )
Yukarıdaki kod, oluşturulan görüntünün URL'sini içeren bir JSON nesnesiyle yanıt verir. Bu URL'yi kullanarak görüntüyü indirip bir dosyaya kaydedebiliriz.
-
Son olarak, görüntüyü açar ve standart görüntü görüntüleyici ile görüntüleriz:
image = Image.open(image_path) image.show()
Görüntüyü oluşturan koda daha detaylı bakalım:
generation_response = client.images.generate(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils',
size='1024x1024', n=1,
model=os.environ['AZURE_OPENAI_DEPLOYMENT']
)- prompt, görüntüyü oluşturmak için kullanılan metin istemidir. Bu durumda, "Sisli bir çayırda nergislerin yetiştiği bir alanda lolipop tutan bir atın üzerindeki tavşan" istemini kullanıyoruz.
- size, oluşturulan görüntünün boyutudur. Bu durumda, 1024x1024 piksel boyutunda bir görüntü oluşturuyoruz.
- n, oluşturulan görüntü sayısıdır. Bu durumda, iki görüntü oluşturuyoruz.
- temperature, Üretken Yapay Zeka modelinin çıktısının rastgeleliğini kontrol eden bir parametredir. Sıcaklık, 0 ile 1 arasında bir değerdir; burada 0, çıktının deterministik olduğu ve 1, çıktının rastgele olduğu anlamına gelir. Varsayılan değer 0.7'dir.
Görüntülerle yapabileceğiniz daha fazla şey var ve bunları bir sonraki bölümde ele alacağız.
Şimdiye kadar, Python'da birkaç satır kodla bir görüntü oluşturmayı nasıl başardığımızı gördünüz. Ancak, görüntülerle yapabileceğiniz daha fazla şey var.
Ayrıca şunları yapabilirsiniz:
- Düzenlemeler yapma. Mevcut bir görüntüye bir maske ve bir istem sağlayarak bir görüntüyü değiştirebilirsiniz. Örneğin, bir görüntünün bir kısmına bir şey ekleyebilirsiniz. Tavşan görüntümüzü hayal edin; tavşana bir şapka ekleyebilirsiniz. Bunu, görüntüyü, bir maske (değişiklik yapılacak alanı belirleyen) ve yapılması gerekeni belirten bir metin istemi sağlayarak yapabilirsiniz.
Not: Bu özellik DALL-E 3'te desteklenmemektedir.
İşte GPT Image kullanılarak yapılmış bir örnek:
response = client.images.edit(
model="gpt-image-1",
image=open("sunlit_lounge.png", "rb"),
mask=open("mask.png", "rb"),
prompt="A sunlit indoor lounge area with a pool containing a flamingo"
)
image_url = response.data[0].urlTemel görüntü yalnızca havuzlu salonu içerirken, son görüntüde bir flamingo olacaktır:
-
Varyasyonlar oluşturma. Buradaki fikir, mevcut bir görüntüyü alıp farklı varyasyonlar oluşturmanızdır. Bir varyasyon oluşturmak için bir görüntü ve bir metin istemi sağlayarak şu şekilde kod yazabilirsiniz:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Not: Bu özellik yalnızca OpenAI'de desteklenmektedir.
Sıcaklık, Üretken Yapay Zeka modelinin çıktısının rastgeleliğini kontrol eden bir parametredir. Sıcaklık, 0 ile 1 arasında bir değerdir; burada 0, çıktının deterministik olduğu ve 1, çıktının rastgele olduğu anlamına gelir. Varsayılan değer 0.7'dir.
Sıcaklığın nasıl çalıştığını görmek için bu istemi iki kez çalıştırarak bir örneğe bakalım:
İstem: "Sisli bir çayırda nergislerin yetiştiği bir alanda lolipop tutan bir atın üzerindeki tavşan"
Şimdi aynı istemi tekrar çalıştırarak aynı görüntüyü iki kez alamayacağımızı görelim:
Gördüğünüz gibi, görüntüler benzer ancak aynı değil. Şimdi sıcaklık değerini 0.1'e değiştirip ne olduğunu görelim:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2
)Yanıtı daha deterministik hale getirmeye çalışalım. Oluşturduğumuz iki görüntüden, ilk görüntüde bir tavşan ve ikinci görüntüde bir at olduğunu gözlemleyebiliriz, dolayısıyla görüntüler oldukça farklıdır.
Bu nedenle kodumuzu değiştirip sıcaklığı 0 olarak ayarlayalım:
generation_response = client.images.create(
prompt='Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils', # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0
)Şimdi bu kodu çalıştırdığınızda şu iki görüntüyü elde edersiniz:
Burada açıkça görebilirsiniz ki görüntüler birbirine daha çok benziyor.
Demo ile müşterilerimiz için zaten görüntüler oluşturabiliyoruz. Ancak, uygulamamız için bazı sınırlar oluşturmalıyız.
Örneğin, iş için uygun olmayan veya çocuklar için uygun olmayan görüntüler oluşturmak istemiyoruz.
Bunu meta istemler ile yapabiliriz. Meta istemler, Üretken Yapay Zeka modelinin çıktısını kontrol etmek için kullanılan metin istemleridir. Örneğin, meta istemleri kullanarak çıktıyı kontrol edebilir ve oluşturulan görüntülerin iş için uygun veya çocuklar için uygun olmasını sağlayabiliriz.
Peki, meta istemler nasıl çalışır?
Meta istemler, Üretken Yapay Zeka modelinin çıktısını kontrol etmek için kullanılan metin istemleridir. Metin istemden önce konumlandırılırlar ve modelin çıktısını kontrol etmek için kullanılırlar. İstem girdisi ve meta istem girdisini tek bir metin istemde kapsar.
Bir meta istem örneği şu şekilde olabilir:
You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
(Input)
Şimdi, demo'muzda meta istemleri nasıl kullanabileceğimizi görelim.
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt =f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"{meta_prompt}
Create an image of a bunny on a horse, holding a lollipop"
# TODO add request to generate imageYukarıdaki istemden, oluşturulan tüm görüntülerin meta istemi dikkate aldığını görebilirsiniz.
Bu dersin başında Edu4All'ı tanıttık. Şimdi öğrencilerin değerlendirmeleri için görüntüler oluşturmalarını sağlama zamanı.
Öğrenciler, anıtlar içeren değerlendirmeleri için görüntüler oluşturacaklar; hangi anıtların olacağı tamamen öğrencilere bağlı. Öğrencilerden bu görevde yaratıcılıklarını kullanarak bu anıtları farklı bağlamlara yerleştirmeleri isteniyor.
İşte olası bir çözüm:
import openai
import os
import requests
from PIL import Image
import dotenv
from openai import AzureOpenAI
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
client = AzureOpenAI(
azure_endpoint = os.environ["AZURE_OPENAI_ENDPOINT"],
api_key=os.environ['AZURE_OPENAI_API_KEY'],
api_version = "2024-02-01"
)
disallow_list = "swords, violence, blood, gore, nudity, sexual content, adult content, adult themes, adult language, adult humor, adult jokes, adult situations, adult"
meta_prompt = f"""You are an assistant designer that creates images for children.
The image needs to be safe for work and appropriate for children.
The image needs to be in color.
The image needs to be in landscape orientation.
The image needs to be in a 16:9 aspect ratio.
Do not consider any input from the following that is not safe for work or appropriate for children.
{disallow_list}
"""
prompt = f"""{meta_prompt}
Generate monument of the Arc of Triumph in Paris, France, in the evening light with a small child holding a Teddy looks on.
""""
try:
# Create an image by using the image generation API
generation_response = client.images.generate(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=1,
)
# Set the directory for the stored image
image_dir = os.path.join(os.curdir, 'images')
# If the directory doesn't exist, create it
if not os.path.isdir(image_dir):
os.mkdir(image_dir)
# Initialize the image path (note the filetype should be png)
image_path = os.path.join(image_dir, 'generated-image.png')
# Retrieve the generated image
image_url = generation_response.data[0].url # extract image URL from response
generated_image = requests.get(image_url).content # download the image
with open(image_path, "wb") as image_file:
image_file.write(generated_image)
# Display the image in the default image viewer
image = Image.open(image_path)
image.show()
# catch exceptions
except openai.BadRequestError as err:
print(err)Bu dersi tamamladıktan sonra, Generative AI bilginizi geliştirmeye devam etmek için Generative AI Öğrenme koleksiyonumuza göz atın!
Düşük kodla AI uygulamaları oluşturmayı inceleyeceğimiz 10. Derse geçin.
Feragatname:
Bu belge, AI çeviri hizmeti Co-op Translator kullanılarak çevrilmiştir. Doğruluk için çaba göstersek de, otomatik çeviriler hata veya yanlışlıklar içerebilir. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan herhangi bir yanlış anlama veya yanlış yorumlama durumunda sorumluluk kabul edilmez.








