مدلهای زبانی بزرگ (LLMs) فقط برای تولید متن نیستند. امکان تولید تصاویر از توضیحات متنی نیز وجود دارد. داشتن تصاویر به عنوان یک حالت میتواند در بسیاری از زمینهها مانند فناوری پزشکی، معماری، گردشگری، توسعه بازی و موارد دیگر بسیار مفید باشد. در این فصل، به دو مدل محبوب تولید تصویر، DALL-E و Midjourney، خواهیم پرداخت.
در این درس، موارد زیر را پوشش خواهیم داد:
- تولید تصویر و دلایل مفید بودن آن.
- DALL-E و Midjourney، چی هستند و چگونه کار میکنند.
- چگونه میتوانید یک برنامه تولید تصویر بسازید.
پس از اتمام این درس، قادر خواهید بود:
- یک برنامه تولید تصویر بسازید.
- مرزهایی برای برنامه خود با استفاده از متاپرامپتها تعریف کنید.
- با DALL-E و Midjourney کار کنید.
برنامههای تولید تصویر راهی عالی برای کشف قابلیتهای هوش مصنوعی تولیدی هستند. این برنامهها میتوانند برای مثال در موارد زیر استفاده شوند:
-
ویرایش و ترکیب تصاویر. میتوانید تصاویر را برای موارد مختلفی مانند ویرایش و ترکیب تصاویر تولید کنید.
-
کاربرد در صنایع مختلف. همچنین میتوانند برای تولید تصاویر در صنایع مختلف مانند فناوری پزشکی، گردشگری، توسعه بازی و موارد دیگر استفاده شوند.
به عنوان بخشی از این درس، ما به کار با استارتاپ خود، Edu4All، ادامه خواهیم داد. دانشآموزان تصاویر را برای ارزیابیهای خود ایجاد خواهند کرد. اینکه چه تصاویری ایجاد کنند به خودشان بستگی دارد، اما میتوانند تصاویری برای داستانهای خود یا شخصیتهای جدیدی برای داستانهایشان ایجاد کنند یا به آنها کمک کنند تا ایدهها و مفاهیم خود را تجسم کنند.
در اینجا نمونهای از چیزی که دانشآموزان Edu4All میتوانند ایجاد کنند آورده شده است، اگر در کلاس روی بناهای تاریخی کار میکنند:
با استفاده از پرامپتی مانند:
"سگی کنار برج ایفل در نور صبحگاهی"
DALL-E و Midjourney دو مدل محبوب تولید تصویر هستند که به شما امکان میدهند با استفاده از پرامپتها تصاویر تولید کنید.
بیایید با DALL-E شروع کنیم، که یک مدل هوش مصنوعی تولیدی است و تصاویر را از توضیحات متنی تولید میکند.
-
CLIP، مدلی است که تعبیهها (نمایشهای عددی دادهها) را از تصاویر و متن تولید میکند.
-
توجه پراکنده، مدلی است که تصاویر را از تعبیهها تولید میکند. DALL-E بر اساس مجموعه دادهای از تصاویر و متن آموزش دیده است و میتواند تصاویر را از توضیحات متنی تولید کند. برای مثال، DALL-E میتواند تصاویر یک گربه با کلاه یا یک سگ با موهاک تولید کند.
Midjourney به شیوهای مشابه DALL-E کار میکند و تصاویر را از پرامپتهای متنی تولید میکند. Midjourney همچنین میتواند با استفاده از پرامپتهایی مانند "گربهای با کلاه" یا "سگی با موهاک" تصاویر تولید کند.
اعتبار تصویر: ویکیپدیا، تصویر تولید شده توسط Midjourney
ابتدا، DALL-E. DALL-E یک مدل هوش مصنوعی تولیدی بر اساس معماری ترانسفورمر با یک ترانسفورمر خودبازگشتی است.
یک ترانسفورمر خودبازگشتی تعیین میکند که چگونه یک مدل تصاویر را از توضیحات متنی تولید میکند. این مدل یک پیکسل را در هر بار تولید میکند و سپس از پیکسلهای تولید شده برای تولید پیکسل بعدی استفاده میکند. این فرآیند از طریق لایههای مختلف شبکه عصبی ادامه مییابد تا تصویر کامل شود.
با این فرآیند، DALL-E ویژگیها، اشیاء، خصوصیات و موارد دیگر را در تصویر تولید شده کنترل میکند. با این حال، DALL-E 2 و 3 کنترل بیشتری بر تصویر تولید شده دارند.
برای ساخت یک برنامه تولید تصویر به کتابخانههای زیر نیاز دارید:
- python-dotenv، توصیه میشود از این کتابخانه برای نگهداری اطلاعات محرمانه در فایل .env دور از کد استفاده کنید.
- openai، این کتابخانه برای تعامل با API OpenAI استفاده میشود.
- pillow، برای کار با تصاویر در پایتون.
- requests، برای کمک به ارسال درخواستهای HTTP.
اگر هنوز این کار را انجام ندادهاید، دستورالعملهای صفحه Microsoft Learn را دنبال کنید تا یک منبع و مدل Azure OpenAI ایجاد کنید. مدل DALL-E 3 را انتخاب کنید.
-
یک فایل .env با محتوای زیر ایجاد کنید:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"این اطلاعات را در پورتال Azure OpenAI Foundry برای منبع خود در بخش "Deployments" پیدا کنید.
-
کتابخانههای بالا را در یک فایل به نام requirements.txt جمعآوری کنید، به این صورت:
python-dotenv openai pillow requests -
سپس، محیط مجازی ایجاد کرده و کتابخانهها را نصب کنید:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtبرای ویندوز، از دستورات زیر برای ایجاد و فعال کردن محیط مجازی استفاده کنید:
python3 -m venv venv venv\Scripts\activate.bat
-
کد زیر را در فایلی به نام 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)
توضیح این کد:
-
ابتدا، کتابخانههای مورد نیاز را وارد میکنیم، از جمله کتابخانه OpenAI، کتابخانه dotenv، کتابخانه requests و کتابخانه Pillow.
import openai import os import requests from PIL import Image import dotenv
-
سپس، متغیرهای محیطی را از فایل .env بارگذاری میکنیم.
# import dotenv dotenv.load_dotenv()
-
بعد از آن، سرویس مشتری 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" )
-
سپس، تصویر را تولید میکنیم:
# 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'] )
کد بالا با یک شی JSON پاسخ میدهد که حاوی URL تصویر تولید شده است. میتوانیم از این URL برای دانلود تصویر و ذخیره آن در یک فایل استفاده کنیم.
-
در نهایت، تصویر را باز کرده و از نمایشگر استاندارد تصویر برای نمایش آن استفاده میکنیم:
image = Image.open(image_path) image.show()
بیایید کدی که تصویر را تولید میکند با جزئیات بیشتری بررسی کنیم:
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، پرامپت متنی است که برای تولید تصویر استفاده میشود. در این مورد، ما از پرامپت "خرگوش روی اسب، در حال نگه داشتن یک آبنبات چوبی، در یک چمنزار مهآلود که در آن نرگس رشد میکند" استفاده میکنیم.
- size، اندازه تصویر تولید شده است. در این مورد، ما تصویری با اندازه 1024x1024 پیکسل تولید میکنیم.
- n، تعداد تصاویر تولید شده است. در این مورد، ما دو تصویر تولید میکنیم.
- temperature، پارامتری است که تصادفی بودن خروجی مدل هوش مصنوعی تولیدی را کنترل میکند. مقدار دما بین 0 و 1 است که 0 به معنای خروجی قطعی و 1 به معنای خروجی تصادفی است. مقدار پیشفرض 0.7 است.
کارهای بیشتری میتوانید با تصاویر انجام دهید که در بخش بعدی به آنها خواهیم پرداخت.
تا اینجا دیدید که چگونه توانستیم با چند خط کد در پایتون یک تصویر تولید کنیم. با این حال، کارهای بیشتری میتوانید با تصاویر انجام دهید.
همچنین میتوانید کارهای زیر را انجام دهید:
- ویرایش تصاویر. با ارائه یک تصویر موجود، یک ماسک و یک پرامپت، میتوانید تصویر را تغییر دهید. برای مثال، میتوانید چیزی را به بخشی از تصویر اضافه کنید. تصور کنید تصویر خرگوش ما، میتوانید یک کلاه به خرگوش اضافه کنید. این کار را با ارائه تصویر، یک ماسک (مشخص کردن بخشی از منطقه برای تغییر) و یک پرامپت متنی برای توضیح تغییر انجام میدهید.
توجه: این قابلیت در DALL-E 3 پشتیبانی نمیشود.
در اینجا یک مثال با استفاده از 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].urlتصویر پایه فقط شامل سالن با استخر خواهد بود اما تصویر نهایی یک فلامینگو خواهد داشت:
-
ایجاد تغییرات. ایده این است که یک تصویر موجود را بگیرید و درخواست کنید که تغییراتی ایجاد شود. برای ایجاد تغییرات، یک تصویر و یک پرامپت متنی ارائه میدهید و کدی مانند زیر را اجرا میکنید:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
توجه: این قابلیت فقط در OpenAI پشتیبانی میشود.
دما پارامتری است که تصادفی بودن خروجی مدل هوش مصنوعی تولیدی را کنترل میکند. مقدار دما بین 0 و 1 است که 0 به معنای خروجی قطعی و 1 به معنای خروجی تصادفی است. مقدار پیشفرض 0.7 است.
بیایید یک مثال از نحوه کار دما را بررسی کنیم، با اجرای این پرامپت دو بار:
پرامپت: "خرگوش روی اسب، در حال نگه داشتن یک آبنبات چوبی، در یک چمنزار مهآلود که در آن نرگس رشد میکند"
حالا همان پرامپت را دوباره اجرا میکنیم تا ببینیم که تصویر یکسانی دریافت نمیکنیم:
همانطور که میبینید، تصاویر مشابه هستند، اما یکسان نیستند. بیایید مقدار دما را به 0.1 تغییر دهیم و ببینیم چه اتفاقی میافتد:
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
)بیایید سعی کنیم پاسخ را قطعیتر کنیم. از دو تصویری که تولید کردیم میتوان مشاهده کرد که در تصویر اول یک خرگوش وجود دارد و در تصویر دوم یک اسب، بنابراین تصاویر تفاوت زیادی دارند.
بنابراین کد خود را تغییر میدهیم و دما را به 0 تنظیم میکنیم، به این صورت:
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
)حالا وقتی این کد را اجرا میکنید، این دو تصویر را دریافت میکنید:
اینجا به وضوح میبینید که تصاویر بیشتر شبیه به هم هستند.
با دموی ما، میتوانیم تصاویر را برای مشتریان خود تولید کنیم. با این حال، باید برخی مرزها برای برنامه خود ایجاد کنیم.
برای مثال، نمیخواهیم تصاویر نامناسب برای محیط کار یا کودکان تولید کنیم.
میتوانیم این کار را با متاپرامپتها انجام دهیم. متاپرامپتها پرامپتهای متنی هستند که برای کنترل خروجی مدل هوش مصنوعی تولیدی استفاده میشوند. برای مثال، میتوانیم از متاپرامپتها برای کنترل خروجی استفاده کنیم و اطمینان حاصل کنیم که تصاویر تولید شده مناسب محیط کار یا کودکان هستند.
حالا، متاپرامپتها چگونه کار میکنند؟
متاپرامپتها پرامپتهای متنی هستند که برای کنترل خروجی مدل هوش مصنوعی تولیدی استفاده میشوند. آنها قبل از پرامپت متنی قرار میگیرند و برای کنترل خروجی مدل استفاده میشوند و در برنامهها برای کنترل خروجی مدل تعبیه میشوند. پرامپت ورودی و ورودی متاپرامپت در یک پرامپت متنی واحد قرار میگیرند.
یک مثال از متاپرامپت میتواند به صورت زیر باشد:
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)
حالا، بیایید ببینیم چگونه میتوانیم از متاپرامپتها در دموی خود استفاده کنیم.
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 imageاز پرامپت بالا میتوانید ببینید که تمام تصاویر ایجاد شده متاپرامپت را در نظر میگیرند.
ما در ابتدای این درس Edu4All را معرفی کردیم. حالا وقت آن است که به دانشآموزان کمک کنیم تا تصاویر را برای ارزیابیهای خود تولید کنند.
دانشآموزان تصاویر را برای ارزیابیهای خود که شامل بناهای تاریخی است ایجاد خواهند کرد. اینکه چه بناهایی را انتخاب کنند به خودشان بستگی دارد. از دانشآموزان خواسته میشود در این وظیفه خلاقیت خود را به کار بگیرند و این بناها را در زمینههای مختلف قرار دهند.
در اینجا یک راهحل ممکن آورده شده است:
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)پس از اتمام این درس، مجموعه یادگیری هوش مصنوعی مولد را بررسی کنید تا دانش خود در زمینه هوش مصنوعی مولد را ارتقا دهید!
به درس ۱۰ بروید، جایی که به بررسی نحوه ساخت برنامههای هوش مصنوعی با کدنویسی کم خواهیم پرداخت.
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما تلاش میکنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حیاتی، ترجمه حرفهای انسانی توصیه میشود. ما مسئولیتی در قبال سوء تفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.








