LLM'lerin yalnızca metin oluşturma yeteneklerinden daha fazlası vardır. 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ını nasıl geliştirebileceğiniz.
Bu dersi tamamladıktan sonra şunları yapabileceksiniz:
- Bir görüntü oluşturma uygulaması geliştirmek.
- 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 dersin bir parçası olarak, bu derste 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.
Örneğin, Edu4All'ın öğrencileri sınıfta anıtlar üzerinde çalışıyorsa şu tür görüntüler oluşturabilirler:
ş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, en popüler iki görüntü oluşturma modelidir. Bu modeller, istemler kullanarak görüntüler oluşturmanıza olanak tanır.
Öncelikle DALL-E ile başlayalım. DALL-E, metin açıklamalarından görüntüler 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, embedding'lerden görüntüler oluşturan bir modeldir. DALL-E, görüntüler ve metinlerden oluşan bir veri kümesi üzerinde eğitilmiştir ve metin açıklamalarından görüntüler 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şturabilir.
Midjourney, DALL-E ile 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şturulan görüntü
Öncelikle DALL-E. DALL-E, autoregressive transformer mimarisine dayalı bir Üretken Yapay Zeka modelidir.
Bir autoregressive transformer, bir modelin metin açıklamalarından görüntü oluşturma yöntemini tanımlar. Görüntüyü bir piksel bir piksel oluşturur ve ardından oluşturulan pikselleri bir sonraki pikseli oluşturmak için kullanır. Bu işlem, görüntü tamamlanana kadar bir sinir ağı içinde birden fazla katmandan geçer.
Bu süreçle DALL-E, oluşturduğu görüntüdeki özellikleri, nesneleri, karakteristikleri 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ı geliştirmek için neye ihtiyacınız var? Şu kütüphanelere ihtiyacınız olacak:
- python-dotenv, bu kütüphaneyi kullanarak gizli bilgilerinizi .env dosyasında koddan uzak tutmanız önerilir.
- 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 modeli 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'da kaynağınızın "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 ihtiyaç duyduğumuz 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çıyoruz ve standart görüntü görüntüleyici ile görüntülüyoruz:
image = Image.open(image_path) image.show()
Görüntüyü oluşturan kodu daha ayrıntılı inceleyelim:
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 büyüdüğü yerde, at üzerinde lolipop tutan 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; 0 çıktının deterministik olduğunu, 1 ise rastgele olduğunu ifade eder. Varsayılan değer 0.7'dir.
Görüntülerle yapabileceğiniz daha fazla şey var; bunları bir sonraki bölümde ele alacağız.
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 yapın. 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 yapmak için görüntüyü, bir maske (değişiklik yapılacak alanı belirleyen) ve yapılması gerekeni belirten bir metin istemi sağlamanız gerekir.
Not: Bu özellik DALL-E 3'te desteklenmemektedir.
İşte GPT Image kullanılarak 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şturun. Mevcut bir görüntüyü alıp farklı bağlamlarda varyasyonlar oluşturabilirsiniz. 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 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; 0 çıktının deterministik olduğunu, 1 ise rastgele olduğunu ifade eder. Varsayılan değer 0.7'dir.
Sıcaklığın nasıl çalıştığını bir örnekle inceleyelim; bu istemi iki kez çalıştırarak:
İstem: "Sisli bir çayırda nergislerin büyüdüğü yerde, at üzerinde lolipop tutan 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 olacağını 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 birinde bir tavşan, diğerinde 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 görüntülerin birbirine daha çok benzediğini açıkça görebilirsiniz.
Demo uygulamamızla müşterilerimiz için görüntüler oluşturabiliyoruz. Ancak, uygulamamız için bazı sınırlar oluşturmalıyız.
Örneğin, iş yerinde 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ş yerinde 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. Bu istemler, metin isteminden önce yerleştirilir ve modelin çıktısını kontrol etmek için kullanılır. Uygulamalara entegre edilerek modelin çıktısını kontrol etmek için kullanılır. İstem girdisi ve meta istem girdisi tek bir metin isteminde birleştirilir.
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 uygulamamızda 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, değerlendirmeleri için anıtlar içeren görüntüler oluşturacaklar; hangi anıtların oluşturulacağı tamamen öğrencilere bağlıdır. Öğ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 çevirilerin hata veya yanlışlıklar içerebileceğini lütfen unutmayın. Belgenin orijinal dili, yetkili kaynak olarak kabul edilmelidir. Kritik bilgiler için profesyonel insan çevirisi önerilir. Bu çevirinin kullanımından kaynaklanan yanlış anlamalar veya yanlış yorumlamalar için sorumluluk kabul etmiyoruz.








