LLM bukan hanya untuk penjanaan teks. Ia juga boleh digunakan untuk menjana imej daripada deskripsi teks. Mempunyai imej sebagai satu modaliti boleh sangat berguna dalam pelbagai bidang seperti MedTech, seni bina, pelancongan, pembangunan permainan dan banyak lagi. Dalam bab ini, kita akan melihat dua model penjanaan imej yang paling popular, DALL-E dan Midjourney.
Dalam pelajaran ini, kita akan membincangkan:
- Penjanaan imej dan mengapa ia berguna.
- DALL-E dan Midjourney, apa itu dan bagaimana ia berfungsi.
- Bagaimana anda boleh membina aplikasi penjanaan imej.
Selepas menyelesaikan pelajaran ini, anda akan dapat:
- Membina aplikasi penjanaan imej.
- Menentukan sempadan untuk aplikasi anda dengan meta prompt.
- Bekerja dengan DALL-E dan Midjourney.
Aplikasi penjanaan imej adalah cara yang hebat untuk meneroka keupayaan AI Generatif. Ia boleh digunakan untuk, sebagai contoh:
-
Penyuntingan dan sintesis imej. Anda boleh menjana imej untuk pelbagai kegunaan seperti penyuntingan imej dan sintesis imej.
-
Digunakan dalam pelbagai industri. Ia juga boleh digunakan untuk menjana imej untuk pelbagai industri seperti MedTech, Pelancongan, Pembangunan Permainan dan banyak lagi.
Sebagai sebahagian daripada pelajaran ini, kita akan terus bekerja dengan startup kita, Edu4All. Pelajar akan mencipta imej untuk penilaian mereka, jenis imej yang dihasilkan bergantung kepada pelajar, tetapi mereka boleh membuat ilustrasi untuk cerita dongeng mereka sendiri atau mencipta watak baru untuk cerita mereka atau membantu mereka menggambarkan idea dan konsep mereka.
Berikut adalah contoh apa yang pelajar Edu4All boleh hasilkan jika mereka sedang belajar tentang monumen:
menggunakan prompt seperti
"Anjing di sebelah Menara Eiffel pada waktu pagi yang cerah"
DALL-E dan Midjourney adalah dua model penjanaan imej yang paling popular, mereka membolehkan anda menggunakan prompt untuk menjana imej.
Mari kita mulakan dengan DALL-E, yang merupakan model AI Generatif yang menjana imej daripada deskripsi teks.
DALL-E adalah gabungan dua model, CLIP dan perhatian tersebar.
-
CLIP, adalah model yang menjana embedding, iaitu representasi data secara numerik, daripada imej dan teks.
-
Perhatian tersebar, adalah model yang menjana imej daripada embedding. DALL-E dilatih menggunakan dataset imej dan teks dan boleh digunakan untuk menjana imej daripada deskripsi teks. Sebagai contoh, DALL-E boleh digunakan untuk menjana imej kucing memakai topi, atau anjing dengan gaya rambut mohawk.
Midjourney berfungsi dengan cara yang sama seperti DALL-E, ia menjana imej daripada prompt teks. Midjourney juga boleh digunakan untuk menjana imej menggunakan prompt seperti "kucing memakai topi", atau "anjing dengan gaya rambut mohawk".
Kredit imej Wikipedia, imej dijana oleh Midjourney
Pertama, DALL-E. DALL-E adalah model AI Generatif berdasarkan seni bina transformer dengan transformer autoregresif.
Transformer autoregresif menentukan bagaimana model menjana imej daripada deskripsi teks, ia menjana satu piksel pada satu masa, dan kemudian menggunakan piksel yang dijana untuk menjana piksel seterusnya. Melalui beberapa lapisan dalam rangkaian neural, sehingga imej selesai.
Dengan proses ini, DALL-E mengawal atribut, objek, ciri, dan banyak lagi dalam imej yang dijana. Walau bagaimanapun, DALL-E 2 dan 3 mempunyai lebih banyak kawalan ke atas imej yang dijana.
Jadi, apa yang diperlukan untuk membina aplikasi penjanaan imej? Anda memerlukan perpustakaan berikut:
- python-dotenv, sangat disarankan untuk menggunakan perpustakaan ini untuk menyimpan rahsia anda dalam fail .env jauh daripada kod.
- openai, perpustakaan ini adalah apa yang anda akan gunakan untuk berinteraksi dengan API OpenAI.
- pillow, untuk bekerja dengan imej dalam Python.
- requests, untuk membantu anda membuat permintaan HTTP.
Jika belum dilakukan, ikuti arahan di halaman Microsoft Learn untuk mencipta sumber dan model Azure OpenAI. Pilih DALL-E 3 sebagai model.
-
Cipta fail .env dengan kandungan berikut:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Cari maklumat ini di Portal Azure OpenAI Foundry untuk sumber anda di bahagian "Deployments".
-
Kumpulkan perpustakaan di atas dalam fail bernama requirements.txt seperti berikut:
python-dotenv openai pillow requests -
Seterusnya, cipta persekitaran maya dan pasang perpustakaan:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtUntuk Windows, gunakan arahan berikut untuk mencipta dan mengaktifkan persekitaran maya anda:
python3 -m venv venv venv\Scripts\activate.bat
-
Tambahkan kod berikut dalam fail bernama app.py:
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)
Mari kita jelaskan kod ini:
-
Pertama, kita import perpustakaan yang kita perlukan, termasuk perpustakaan OpenAI, perpustakaan dotenv, perpustakaan requests, dan perpustakaan Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Seterusnya, kita muatkan pembolehubah persekitaran daripada fail .env.
# import dotenv dotenv.load_dotenv()
-
Selepas itu, kita konfigurasikan klien perkhidmatan Azure OpenAI
# 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" )
-
Seterusnya, kita menjana imej:
# 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'] )
Kod di atas memberikan respons dengan objek JSON yang mengandungi URL imej yang dijana. Kita boleh menggunakan URL untuk memuat turun imej dan menyimpannya ke fail.
-
Akhir sekali, kita buka imej dan gunakan penonton imej standard untuk memaparkannya:
image = Image.open(image_path) image.show()
Mari kita lihat kod yang menjana imej dengan lebih terperinci:
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, adalah teks prompt yang digunakan untuk menjana imej. Dalam kes ini, kita menggunakan prompt "Arnab di atas kuda, memegang lolipop, di padang berkabus di mana tumbuh bunga daffodil".
- size, adalah saiz imej yang dijana. Dalam kes ini, kita menjana imej bersaiz 1024x1024 piksel.
- n, adalah bilangan imej yang dijana. Dalam kes ini, kita menjana dua imej.
- temperature, adalah parameter yang mengawal kebarangkalian output model AI Generatif. Nilai temperature adalah antara 0 dan 1 di mana 0 bermaksud output adalah deterministik dan 1 bermaksud output adalah rawak. Nilai lalai adalah 0.7.
Terdapat lebih banyak perkara yang boleh anda lakukan dengan imej yang akan kita bincangkan dalam bahagian seterusnya.
Anda telah melihat bagaimana kita dapat menjana imej menggunakan beberapa baris kod dalam Python. Walau bagaimanapun, terdapat lebih banyak perkara yang boleh anda lakukan dengan imej.
Anda juga boleh melakukan perkara berikut:
- Melakukan penyuntingan. Dengan memberikan imej sedia ada, topeng dan prompt, anda boleh mengubah imej. Sebagai contoh, anda boleh menambah sesuatu pada bahagian imej. Bayangkan imej arnab kita, anda boleh menambah topi pada arnab. Cara anda melakukannya adalah dengan memberikan imej, topeng (mengenal pasti bahagian kawasan untuk perubahan) dan prompt teks untuk mengatakan apa yang perlu dilakukan.
Nota: ini tidak disokong dalam DALL-E 3.
Berikut adalah contoh menggunakan GPT Image:
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].urlImej asas hanya akan mengandungi ruang santai dengan kolam tetapi imej akhir akan mempunyai flamingo:
-
Cipta variasi. Ideanya adalah anda mengambil imej sedia ada dan meminta variasi dicipta. Untuk mencipta variasi, anda memberikan imej dan prompt teks serta kod seperti berikut:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Nota, ini hanya disokong pada OpenAI
Temperature adalah parameter yang mengawal kebarangkalian output model AI Generatif. Nilai temperature adalah antara 0 dan 1 di mana 0 bermaksud output adalah deterministik dan 1 bermaksud output adalah rawak. Nilai lalai adalah 0.7.
Mari kita lihat contoh bagaimana temperature berfungsi, dengan menjalankan prompt ini dua kali:
Prompt : "Arnab di atas kuda, memegang lolipop, di padang berkabus di mana tumbuh bunga daffodil"
Sekarang mari kita jalankan prompt yang sama untuk melihat bahawa kita tidak akan mendapat imej yang sama dua kali:
Seperti yang anda lihat, imej-imej itu serupa, tetapi tidak sama. Mari cuba ubah nilai temperature kepada 0.1 dan lihat apa yang berlaku:
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
)Jadi mari kita cuba membuat respons lebih deterministik. Kita dapat melihat daripada dua imej yang kita hasilkan bahawa dalam imej pertama, terdapat arnab dan dalam imej kedua, terdapat kuda, jadi imej-imej itu sangat berbeza.
Oleh itu, mari kita ubah kod kita dan tetapkan temperature kepada 0, seperti berikut:
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
)Sekarang apabila anda menjalankan kod ini, anda akan mendapat dua imej ini:
Di sini anda dapat melihat dengan jelas bagaimana imej-imej itu lebih menyerupai satu sama lain.
Dengan demo kita, kita sudah boleh menjana imej untuk pelanggan kita. Walau bagaimanapun, kita perlu mencipta beberapa sempadan untuk aplikasi kita.
Sebagai contoh, kita tidak mahu menjana imej yang tidak sesuai untuk kerja, atau yang tidak sesuai untuk kanak-kanak.
Kita boleh melakukan ini dengan metaprompt. Metaprompt adalah teks prompt yang digunakan untuk mengawal output model AI Generatif. Sebagai contoh, kita boleh menggunakan metaprompt untuk mengawal output, dan memastikan imej yang dijana sesuai untuk kerja, atau sesuai untuk kanak-kanak.
Sekarang, bagaimana metaprompt berfungsi?
Metaprompt adalah teks prompt yang digunakan untuk mengawal output model AI Generatif, ia diletakkan sebelum teks prompt, dan digunakan untuk mengawal output model serta disematkan dalam aplikasi untuk mengawal output model. Menggabungkan input prompt dan input metaprompt dalam satu teks prompt.
Satu contoh metaprompt adalah seperti berikut:
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)
Sekarang, mari kita lihat bagaimana kita boleh menggunakan metaprompt dalam demo kita.
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 imageDaripada prompt di atas, anda dapat melihat bagaimana semua imej yang dihasilkan mengambil kira metaprompt.
Kami memperkenalkan Edu4All pada permulaan pelajaran ini. Sekarang tiba masanya untuk membantu pelajar menjana imej untuk penilaian mereka.
Pelajar akan mencipta imej untuk penilaian mereka yang mengandungi monumen, jenis monumen yang dihasilkan bergantung kepada pelajar. Pelajar diminta menggunakan kreativiti mereka dalam tugasan ini untuk meletakkan monumen ini dalam konteks yang berbeza.
Berikut adalah satu penyelesaian yang mungkin:
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)Selepas menyelesaikan pelajaran ini, lihat koleksi Pembelajaran AI Generatif kami untuk terus meningkatkan pengetahuan anda tentang AI Generatif!
Pergi ke Pelajaran 10 di mana kita akan melihat cara membina aplikasi AI dengan kod rendah
Penafian:
Dokumen ini telah diterjemahkan menggunakan perkhidmatan terjemahan AI Co-op Translator. Walaupun kami berusaha untuk ketepatan, sila ambil perhatian bahawa terjemahan automatik mungkin mengandungi kesilapan atau ketidaktepatan. Dokumen asal dalam bahasa asalnya harus dianggap sebagai sumber yang berwibawa. Untuk maklumat penting, terjemahan manusia profesional adalah disyorkan. Kami tidak bertanggungjawab atas sebarang salah faham atau salah tafsir yang timbul daripada penggunaan terjemahan ini.








