LLM không chỉ dùng để tạo văn bản. Bạn cũng có thể tạo hình ảnh từ mô tả bằng văn bản. Việc có hình ảnh như một phương thức truyền tải có thể rất hữu ích trong nhiều lĩnh vực như MedTech, kiến trúc, du lịch, phát triển game và nhiều hơn nữa. 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 là gì, và cách chúng hoạt động.
- Cách 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.
- Định nghĩa giới hạn cho ứng dụng của bạn bằng meta prompts.
- Làm việc với DALL-E và Midjourney.
Ứng dụng tạo hình ảnh là 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 mục đích khác nhau, 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 dùng để tạo hình ảnh cho nhiều ngành như Medtech, Du lịch, Phát triển game 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 Edu4All. Học sinh sẽ tạo hình ảnh cho bài tập của mình, hình ảnh cụ thể do học sinh quyết định, có thể là minh họa cho câu chuyện cổ tích của riêng họ, tạo nhân vật mới cho câu chuyện hoặc giúp họ hình dung ý tưởng và khái niệm.
Dưới đây là ví dụ những gì học sinh Edu4All có thể tạo ra khi làm việc trên chủ đề các công trình kiến trúc:
với prompt như
"Chó bên cạnh Tháp Eiffel dưới ánh nắng ban mai"
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 prompt để tạo hình ảnh.
Bắt đầu với DALL-E, một mô hình Generative AI tạo hình ảnh từ mô tả bằng 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ô hình tạo 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ô hình tạo hình ảnh từ embeddings. DALL-E được huấn luyện trên bộ dữ liệu gồm hình ảnh và văn bản, và có thể tạo hình ảnh từ mô tả bằng văn bản. Ví dụ, DALL-E có thể tạo hình ảnh 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ự DALL-E, tạo hình ảnh từ các prompt văn bản. Midjourney cũng có thể tạo hình ảnh với 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, do Midjourney tạo
Trước tiên, DALL-E. DALL-E là mô hình Generative AI dựa trên kiến trúc transformer với autoregressive transformer.
Một autoregressive transformer xác định cách mô hình tạo hình ảnh từ mô tả văn bản, nó tạo từng điểm ảnh một, rồi dùng các điểm ảnh đã tạo để tạo điểm ảnh tiếp theo. Quá trình này đi qua nhiều lớp trong mạng nơ-ron 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 nó tạo ra. Tuy nhiên, DALL-E 2 và 3 có khả năng kiểm soát hình ảnh tạo ra tốt hơn.
Vậy để xây dựng một ứng dụng tạo hình ảnh cần những gì? Bạn cần các thư viện sau:
- python-dotenv, được khuyến nghị dùng để giữ các thông tin bí mật trong file .env tách biệt với mã nguồn.
- openai, thư viện dùng để tương tác với API 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.
-
Tạo file .env với nội dung sau:
AZURE_OPENAI_ENDPOINT=<your endpoint> AZURE_OPENAI_API_KEY=<your key>Thông tin này bạn có thể tìm trong Azure Portal ở phần "Keys and Endpoint" của tài nguyên.
-
Tập hợp các thư viện trên vào file 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.txtVới Windows, 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 đoạn mã sau vào file app.py:
import openai import os import requests from PIL import Image import dotenv # import dotenv dotenv.load_dotenv() # Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only) openai.api_version = '2023-06-01-preview' openai.api_type = 'azure' try: # Create an image by using the image generation API generation_response = openai.Image.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, ) # 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 đoạn mã này:
-
Đầu tiên, chúng ta import các thư viện cần thiết, bao gồm thư viện OpenAI, dotenv, requests và 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ừ file .env.
# import dotenv dotenv.load_dotenv()
-
Sau đó, thiết lập endpoint, key cho API OpenAI, phiên bản và loại.
# Get endpoint and key from environment variables openai.api_base = os.environ['AZURE_OPENAI_ENDPOINT'] openai.api_key = os.environ['AZURE_OPENAI_API_KEY'] # add version and type, Azure specific openai.api_version = '2023-06-01-preview' openai.api_type = 'azure'
-
Tiếp theo, tạo hình ảnh:
# Create an image by using the image generation API generation_response = openai.Image.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, )
Đoạn 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ể dùng URL này để tải hình ảnh và lưu vào file.
-
Cuối cùng, mở hình ảnh và dùng trình xem ảnh mặc định để hiển thị:
image = Image.open(image_path) image.show()
Hãy xem kỹ đoạn mã tạo hình ảnh:
generation_response = openai.Image.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,
)- prompt là đoạn văn bản dùng để tạo hình ảnh. Ở đây, chúng ta dùng prompt "Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils".
- size là kích thước hình ảnh được tạo. Ở đây, hình ảnh có kích thước 1024x1024 pixel.
- n là số lượng hình ảnh được tạo. Ở đây, chúng ta tạo hai hình ảnh.
- temperature là tham số điều khiển độ ngẫu nhiên của kết quả từ mô hình Generative AI. Giá trị nằm trong khoảng từ 0 đến 1, trong đó 0 nghĩa là kết quả xác định, 1 nghĩa là kết quả ngẫu nhiên. Giá trị mặc định là 0.7.
Còn 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 tạo hình ảnh chỉ với vài dòng Python. Tuy nhiên, còn nhiều điều khác bạn có thể làm với hình ảnh.
Bạn cũng có thể:
-
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 vật thể 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 làm là cung cấp hình ảnh, mặt nạ (xác định phần cần thay đổi) và prompt văn bản để mô tả thay đổi.
response = openai.Image.create_edit( image=open("base_image.png", "rb"), mask=open("mask.png", "rb"), prompt="An image of a rabbit with a hat on its head.", n=1, size="1024x1024" ) image_url = response['data'][0]['url']
Hình ảnh gốc chỉ có con thỏ, nhưng hình ảnh cuối cùng sẽ có thêm chiếc mũ trên con thỏ.
-
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 biến thể, bạn cung cấp hình ảnh và prompt văn bản, cùng đoạn 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 ý, tính năng này chỉ được hỗ trợ trên OpenAI
Temperature là tham số điều khiển độ ngẫu nhiên của kết quả từ mô hình Generative AI. Giá trị nằm trong khoảng từ 0 đến 1, trong đó 0 nghĩa là kết quả xác định, 1 nghĩa là kết quả ngẫu nhiên. Giá trị mặc định là 0.7.
Hãy xem ví dụ về cách temperature hoạt động, bằng cách chạy prompt này hai lần:
Prompt : "Bunny on horse, holding a lollipop, on a foggy meadow where it grows daffodils"
Bây giờ chạy lại prompt đó để thấy rằng chúng ta sẽ không có hai hình ảnh giống hệt nhau:
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 = openai.Image.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
)Hãy thử làm cho kết quả có tính xác định hơn. Từ hai hình ảnh tạo ra, ta thấy hình ảnh đầu có con thỏ, hình ảnh thứ hai có con ngựa, nên hình ảnh khác biệt khá nhiều.
Vì vậy, hãy thay đổi mã và đặt temperature thành 0, như sau:
generation_response = openai.Image.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
)Khi chạy đoạn mã này, bạn sẽ có hai hình ảnh sau:
Ở đây bạn có thể thấy rõ hình ảnh giống nhau hơn nhiều.
Với bản demo, chúng ta đã có thể tạo hình ảnh cho khách hàng. Tuy nhiên, chúng ta cần tạo ra một số giới hạn cho ứng dụng.
Ví dụ, chúng ta không muốn tạo hình ảnh không phù hợp với môi trường làm 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 dùng để kiểm soát kết quả của mô hình Generative AI. Ví dụ, chúng ta có thể dùng metaprompts để kiểm soát kết quả, đảm bảo hình ảnh tạo ra an toàn cho môi trường làm 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 đặt trước prompt chính, dùng để kiểm soát kết quả của mô hình và được nhúng trong ứng dụng để kiểm soát đầu ra. Chúng bao bọc cả prompt đầu vào và metaprompt trong một prompt duy nhất.
Một ví dụ về metaprompt như sau:
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ể dùng metaprompts trong bản demo.
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 tất cả hình ảnh được tạo ra đều tuân theo metaprompt.
Chúng ta đã giới thiệu Edu4All từ đầu bài học. Giờ là lúc để học sinh có thể tạo hình ảnh cho bài tập của mình.
Học sinh sẽ tạo hình ảnh cho bài tập về các công trình kiến trúc, cụ thể công trình nào do học sinh quyết định. Học sinh được khuyến khích sử dụng sự sáng tạo để đặt các công trình này vào những bối cảnh khác nhau.
Dưới đây là một giải pháp có thể:
import openai
import os
import requests
from PIL import Image
import dotenv
# import dotenv
dotenv.load_dotenv()
# Get endpoint and key from environment variables
openai.api_base = "<replace with endpoint>"
openai.api_key = "<replace with api key>"
# Assign the API version (DALL-E is currently supported for the 2023-06-01-preview API version only)
openai.api_version = '2023-06-01-preview'
openai.api_type = 'azure'
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 = openai.Image.create(
prompt=prompt, # Enter your prompt text here
size='1024x1024',
n=2,
temperature=0,
)
# 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)Sau khi hoàn thành bài học này, hãy xem bộ sưu tập Generative AI Learning collection để tiếp tục nâng cao kiến thức về Generative AI!
Hãy đến với 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 low-code
Tuyên bố từ chối 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 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ữ gốc của nó nên được coi là nguồn chính xác và đáng tin cậy. Đối với các thông tin quan trọng, nên sử dụng dịch vụ dịch thuật chuyên nghiệp do con người thực hiện. Chúng tôi không chịu trách nhiệm về bất kỳ sự hiểu lầm hoặc giải thích sai nào phát sinh từ việc sử dụng bản dịch này.





