LLMs không chỉ dừng lại ở việc tạo văn bản. Chúng cũng có thể tạo hình ảnh từ các mô tả văn bản. Việc sử dụng hình ảnh như một phương thức có thể rất hữu ích trong nhiều lĩnh vực như công nghệ y tế, kiến trúc, du lịch, phát triển trò chơi và nhiều lĩnh vực khác. Trong chương này, chúng ta sẽ tìm hiểu về hai mô hình tạo hình ảnh phổ biến nhất, DALL-E và Midjourney.
Trong bài học này, chúng ta sẽ đề cập đến:
- Tạo hình ảnh và lý do tại sao nó hữu ích.
- DALL-E và Midjourney, chúng là gì và cách chúng hoạt động.
- Cách bạn xây dựng một ứng dụng tạo hình ảnh.
Sau khi hoàn thành bài học này, bạn sẽ có thể:
- Xây dựng một ứng dụng tạo hình ảnh.
- Đặt giới hạn cho ứng dụng của bạn bằng các meta prompt.
- Làm việc với DALL-E và Midjourney.
Ứng dụng tạo hình ảnh là một cách tuyệt vời để khám phá khả năng của Generative AI. Chúng có thể được sử dụng cho, ví dụ:
-
Chỉnh sửa và tổng hợp hình ảnh. Bạn có thể tạo hình ảnh cho nhiều trường hợp sử dụng, chẳng hạn như chỉnh sửa hình ảnh và tổng hợp hình ảnh.
-
Áp dụng cho nhiều ngành công nghiệp. Chúng cũng có thể được sử dụng để tạo hình ảnh cho nhiều ngành công nghiệp như công nghệ y tế, du lịch, phát triển trò chơi và nhiều hơn nữa.
Trong bài học này, chúng ta sẽ tiếp tục làm việc với startup của chúng ta, Edu4All. Các học sinh sẽ tạo hình ảnh cho các bài đánh giá của họ, chính xác hình ảnh nào là tùy thuộc vào học sinh, nhưng chúng có thể là minh họa cho câu chuyện cổ tích của riêng họ hoặc tạo một nhân vật mới cho câu chuyện của họ hoặc giúp họ hình dung ý tưởng và khái niệm của mình.
Đây là những gì học sinh của Edu4All có thể tạo ra, ví dụ, nếu họ đang học về các công trình kiến trúc:
sử dụng một prompt như
"Chó bên cạnh Tháp Eiffel trong ánh sáng mặt trời buổi sáng sớm"
DALL-E và Midjourney là hai trong số các mô hình tạo hình ảnh phổ biến nhất, cho phép bạn sử dụng các prompt để tạo hình ảnh.
Hãy bắt đầu với DALL-E, một mô hình Generative AI tạo hình ảnh từ các mô tả văn bản.
DALL-E là sự kết hợp của hai mô hình, CLIP và diffused attention.
-
CLIP, là một mô hình tạo ra các embeddings, tức là các biểu diễn số của dữ liệu, từ hình ảnh và văn bản.
-
Diffused attention, là một mô hình tạo hình ảnh từ embeddings. DALL-E được huấn luyện trên một tập dữ liệu gồm hình ảnh và văn bản và có thể được sử dụng để tạo hình ảnh từ các mô tả văn bản. Ví dụ, DALL-E có thể được sử dụng để tạo hình ảnh của một con mèo đội mũ, hoặc một con chó với kiểu tóc mohawk.
Midjourney hoạt động tương tự như DALL-E, nó tạo hình ảnh từ các prompt văn bản. Midjourney cũng có thể được sử dụng để tạo hình ảnh bằng các prompt như “một con mèo đội mũ”, hoặc “một con chó với kiểu tóc mohawk”.
Hình ảnh từ Wikipedia, hình ảnh được tạo bởi Midjourney
Đầu tiên, DALL-E. DALL-E là một mô hình Generative AI dựa trên kiến trúc transformer với một autoregressive transformer.
Một autoregressive transformer định nghĩa cách một mô hình tạo hình ảnh từ các mô tả văn bản, nó tạo từng pixel một, sau đó sử dụng các pixel đã tạo để tạo pixel tiếp theo. Quá trình này đi qua nhiều lớp trong mạng neural, cho đến khi hình ảnh hoàn chỉnh.
Với quy trình này, DALL-E kiểm soát các thuộc tính, đối tượng, đặc điểm và nhiều yếu tố khác trong hình ảnh mà nó tạo ra. Tuy nhiên, DALL-E 2 và 3 có khả năng kiểm soát hình ảnh được tạo ra tốt hơn.
Vậy cần gì để xây dựng một ứng dụng tạo hình ảnh? Bạn cần các thư viện sau:
- python-dotenv, bạn được khuyến nghị sử dụng thư viện này để giữ các thông tin bí mật trong tệp .env tách biệt khỏi mã nguồn.
- openai, thư viện này sẽ được sử dụng để tương tác với API của OpenAI.
- pillow, để làm việc với hình ảnh trong Python.
- requests, để giúp bạn thực hiện các yêu cầu HTTP.
Nếu chưa thực hiện, hãy làm theo hướng dẫn trên trang Microsoft Learn để tạo tài nguyên và mô hình Azure OpenAI. Chọn DALL-E 3 làm mô hình.
-
Tạo một tệp .env với nội dung sau:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key> AZURE_OPENAI_DEPLOYMENT="dall-e-3"Tìm thông tin này trong Azure OpenAI Foundry Portal cho tài nguyên của bạn trong phần "Deployments".
-
Thu thập các thư viện trên vào một tệp có tên requirements.txt như sau:
python-dotenv openai pillow requests -
Tiếp theo, tạo môi trường ảo và cài đặt các thư viện:
python3 -m venv venv source venv/bin/activate pip install -r requirements.txtĐối với Windows, sử dụng các lệnh sau để tạo và kích hoạt môi trường ảo:
python3 -m venv venv venv\Scripts\activate.bat
-
Thêm mã sau vào tệp có tên 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)
Giải thích mã này:
-
Đầu tiên, chúng ta nhập các thư viện cần thiết, bao gồm thư viện OpenAI, thư viện dotenv, thư viện requests và thư viện Pillow.
import openai import os import requests from PIL import Image import dotenv
-
Tiếp theo, chúng ta tải các biến môi trường từ tệp .env.
# import dotenv dotenv.load_dotenv()
-
Sau đó, chúng ta cấu hình client dịch vụ 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" )
-
Tiếp theo, chúng ta tạo hình ảnh:
# 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'] )
Mã trên trả về một đối tượng JSON chứa URL của hình ảnh được tạo. Chúng ta có thể sử dụng URL để tải hình ảnh và lưu vào tệp.
-
Cuối cùng, chúng ta mở hình ảnh và sử dụng trình xem hình ảnh tiêu chuẩn để hiển thị nó:
image = Image.open(image_path) image.show()
Hãy xem mã tạo hình ảnh chi tiết hơn:
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, là prompt văn bản được sử dụng để tạo hình ảnh. Trong trường hợp này, chúng ta sử dụng prompt "Thỏ trên lưng ngựa, cầm kẹo mút, trên đồng cỏ sương mù nơi mọc hoa thủy tiên".
- size, là kích thước của hình ảnh được tạo. Trong trường hợp này, chúng ta tạo hình ảnh có kích thước 1024x1024 pixel.
- n, là số lượng hình ảnh được tạo. Trong trường hợp này, chúng ta tạo hai hình ảnh.
- temperature, là tham số kiểm soát tính ngẫu nhiên của đầu ra của mô hình Generative AI. Giá trị của temperature nằm trong khoảng từ 0 đến 1, trong đó 0 nghĩa là đầu ra mang tính xác định và 1 nghĩa là đầu ra ngẫu nhiên. Giá trị mặc định là 0.7.
Có nhiều điều bạn có thể làm với hình ảnh mà chúng ta sẽ đề cập trong phần tiếp theo.
Bạn đã thấy cách chúng ta có thể tạo hình ảnh chỉ với vài dòng mã trong Python. Tuy nhiên, còn nhiều điều bạn có thể làm với hình ảnh.
Bạn cũng có thể làm những điều sau:
- Thực hiện chỉnh sửa. Bằng cách cung cấp một hình ảnh hiện có, một mặt nạ và một prompt, bạn có thể thay đổi hình ảnh. Ví dụ, bạn có thể thêm một thứ gì đó vào một phần của hình ảnh. Hãy tưởng tượng hình ảnh con thỏ của chúng ta, bạn có thể thêm một chiếc mũ cho con thỏ. Cách bạn làm điều đó là cung cấp hình ảnh, một mặt nạ (xác định phần khu vực cần thay đổi) và một prompt văn bản để nói điều gì cần được thực hiện.
Lưu ý: điều này không được hỗ trợ trong DALL-E 3.
Dưới đây là một ví dụ sử dụng 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].urlHình ảnh gốc chỉ chứa ghế dài với hồ bơi nhưng hình ảnh cuối cùng sẽ có một con chim hồng hạc:
-
Tạo các biến thể. Ý tưởng là bạn lấy một hình ảnh hiện có và yêu cầu tạo các biến thể. Để tạo một biến thể, bạn cung cấp một hình ảnh và một prompt văn bản và mã như sau:
response = openai.Image.create_variation( image=open("bunny-lollipop.png", "rb"), n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Lưu ý, điều này chỉ được hỗ trợ trên OpenAI.
Temperature là một tham số kiểm soát tính ngẫu nhiên của đầu ra của mô hình Generative AI. Giá trị của temperature nằm trong khoảng từ 0 đến 1, trong đó 0 nghĩa là đầu ra mang tính xác định và 1 nghĩa là đầu ra ngẫu nhiên. Giá trị mặc định là 0.7.
Hãy xem một ví dụ về cách temperature hoạt động, bằng cách chạy prompt này hai lần:
Prompt: "Thỏ trên lưng ngựa, cầm kẹo mút, trên đồng cỏ sương mù nơi mọc hoa thủy tiên"
Bây giờ hãy chạy lại prompt đó để xem rằng chúng ta sẽ không nhận được cùng một hình ảnh hai lần:
Như bạn thấy, các hình ảnh tương tự nhau, nhưng không giống hệt. Hãy thử thay đổi giá trị temperature thành 0.1 và xem điều gì xảy ra:
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
)Vậy hãy thử làm cho đầu ra mang tính xác định hơn. Chúng ta có thể quan sát từ hai hình ảnh đã tạo rằng trong hình ảnh đầu tiên, có một con thỏ và trong hình ảnh thứ hai, có một con ngựa, vì vậy các hình ảnh khác nhau rất nhiều.
Do đó, hãy thay đổi mã của chúng ta và đặt temperature thành 0, như sau:
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
)Bây giờ khi bạn chạy mã này, bạn sẽ nhận được hai hình ảnh sau:
Ở đây bạn có thể thấy rõ cách các hình ảnh giống nhau hơn.
Với demo của chúng ta, chúng ta đã có thể tạo hình ảnh cho khách hàng của mình. Tuy nhiên, chúng ta cần tạo một số giới hạn cho ứng dụng của mình.
Ví dụ, chúng ta không muốn tạo hình ảnh không phù hợp với công việc, hoặc không phù hợp với trẻ em.
Chúng ta có thể làm điều này với metaprompts. Metaprompts là các prompt văn bản được sử dụng để kiểm soát đầu ra của mô hình Generative AI. Ví dụ, chúng ta có thể sử dụng metaprompts để kiểm soát đầu ra, và đảm bảo rằng các hình ảnh được tạo ra phù hợp với công việc, hoặc phù hợp với trẻ em.
Vậy, metaprompts hoạt động như thế nào?
Metaprompts là các prompt văn bản được sử dụng để kiểm soát đầu ra của mô hình Generative AI, chúng được đặt trước prompt văn bản, và được sử dụng để kiểm soát đầu ra của mô hình và được nhúng trong các ứng dụng để kiểm soát đầu ra của mô hình. Gói gọn đầu vào của prompt và đầu vào của metaprompt trong một prompt văn bản duy nhất.
Một ví dụ về metaprompt sẽ là:
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)
Bây giờ, hãy xem cách chúng ta có thể sử dụng metaprompts trong demo của mình.
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 imageTừ prompt trên, bạn có thể thấy cách tất cả các hình ảnh được tạo ra đều xem xét metaprompt.
Chúng ta đã giới thiệu Edu4All ở đầu bài học này. Bây giờ là lúc hỗ trợ các học sinh tạo hình ảnh cho các bài đánh giá của họ.
Các học sinh sẽ tạo hình ảnh cho các bài đánh giá của họ chứa các công trình kiến trúc, chính xác công trình nào là tùy thuộc vào học sinh. Các học sinh được yêu cầu sử dụng sự sáng tạo của mình trong nhiệm vụ này để đặt các công trình kiến trúc này trong các bối cảnh khác nhau.
Dưới đây là một giải pháp khả thi:
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)Sau khi hoàn thành bài học này, hãy xem bộ sưu tập Học về AI Tạo sinh để tiếp tục nâng cao kiến thức về AI Tạo sinh của bạn!
Hãy chuyển sang Bài học 10, nơi chúng ta sẽ tìm hiểu cách xây dựng ứng dụng AI với mã thấp
Tuyên bố miễn trừ trách nhiệm:
Tài liệu này đã được dịch bằng dịch vụ dịch thuật AI Co-op Translator. Mặc dù chúng tôi cố gắng đảm bảo độ chính xác, xin lưu ý rằng các bản dịch tự động có thể chứa lỗi hoặc không chính xác. Tài liệu gốc bằng ngôn ngữ bản địa nên được coi là nguồn thông tin chính thức. Đối với thông tin quan trọng, khuyến nghị sử dụng dịch vụ dịch thuật chuyên nghiệp bởi con người. Chúng tôi không chịu trách nhiệm cho bất kỳ sự hiểu lầm hoặc diễn giải sai nào phát sinh từ việc sử dụng bản dịch này.








