AI đang là một trong những từ khóa, xu hướng, và công nghệ hot nhất trong những năm gần đây. Là một người làm việc trong ngành phần mềm, tôi không thể đứng ngoài xu hướng đó. Người ta nói AI sẽ sớm thay thế con người trong khá nhiều lĩnh vực, thậm chí còn có thể lập trình, đe dọa trực tiếp tới việc làm của hàng triệu developer trên thế giới.
Một mặt, tôi cũng cảm thấy lo lắng nếu tiên đoán trên sẽ thành hiện thực, nhưng mặt khác, tôi cũng rất hào hứng trong việc ứng dụng những tiến bộ của công nghệ AI vào đời sống cũng như công việc hàng ngày của mình. Hiện nay, công cụ chính mà tôi đang dùng mỗi ngày là ChatGPT. Không thể phủ nhận với việc sử dụng ChatGPT, năng suất công việc của tôi đã được nâng lên đáng kể. Dĩ nhiên, tôi không thể đưa cả 1 task to bự và bảo ChatGPT làm từ A tới Z được, nếu vậy thì chắc là công ty đã sa thải tôi lâu rồi. Nhưng khi tôi chia nhỏ công việc và đặt ra những câu hỏi hợp lý, ChatGPT thật sự khiến tôi kinh ngạc.
Về mặt lập trình, những đoạn code mà ChatGPT đưa về 50% các trường hợp có thể là không chạy được, tuy nhiên, đường hướng mà ChatGPT đưa ra là khá chuẩn xác. Chỉ cần kết hợp với một chút tìm kiếm từ Google, tôi đã có thể giải quyết những blocker khó nhằn chỉ trong nửa tiếng, trong khi những blocker như vậy trước đây có thể chiếm tới nửa ngày làm việc.
Natalie Portman trong trang phục người nhện |
Ngoài ra tôi còn nhờ ChatGPT debug những đoạn code lỗi, chỉnh sửa những đoạn văn mà tôi đã viết ra để câu cú được mượt mà hơn. Nói không ngoa, ChatGPT học từ con người, và tôi cũng học được rất nhiều từ ChatGPT.
Tuy nhiên, chủ đề chính của bài viết hôm nay không phải về ChatGPT mà là về Stable Diffusion (SD), một công cụ cho phép tạo ra hình ảnh từ văn bản. Bạn chỉ cần đưa ra mô tả kết hợp với model mong muốn, công cụ này sẽ giúp tạo ra những hình vẽ rất đẹp và nhanh chóng. Trí tưởng tượng chính là giới hạn duy nhất của bạn. Điều tuyệt vời hơn cả là SD hoàn toàn miễn phí, tuy nhiên SD sẽ sử dụng tài nguyên từ máy tính của bạn để tạo ra hình ảnh. Vậy nên, tốc độ xử lý hoàn toàn phụ thuộc vào phần cứng máy tính của bạn. Chiếc máy tính core i3 mà tôi đang dùng mất tới 8 phút để cho ra 1 tấm hình 512 x 512, trong khi với một chiếc Macbook Apple M1 chỉ mất có 2 phút.
Emma Watson trong trang phục lai giữa điệp viên và phù thủy |
Bài viết này sẽ không hướng dẫn các bạn cách cài đặt cụ thể SD, bởi đã có rất nhiều những hướng dẫn đầy đủ và chi tiết trên YouTube. Nhưng dù vậy, việc cài đặt SD cũng có thể gây khó khăn cho người mới, nhất là những không rành về công nghệ do bạn sẽ phải cần cài Python và Git trên máy tính của mình. Ngay cả khi bạn đã thông thạo những kỹ năng trên, thì máy tính của bạn cũng cần phải có card màn hình, nếu không SD sẽ không chạy được. Vẫn có cách để chạy SD bằng CPU, nhưng dĩ nhiên tốc độ sẽ rất chậm.
Có quá nhiều thứ dễ khiến chúng ta nản lòng, nhưng không sao, tôi sẽ giúp bạn tiếp cận với SD một cách đơn giản nhất. Dĩ nhiên, đây chỉ là cách dùng rất rất cơ bản, nhưng cũng đủ để bạn có chút kinh nghiệm với SD trước khi tiến những bước xa hơn.
Alexandra Daddario trong trang phục thủy thủ và phù thủy |
Ở đây, chúng ta chỉ cần kết nối Internet và tận dụng sức mạnh GPU cloud của Google Colab, nhờ vậy, phần cứng máy tính không còn là vấn đề. Sau đó bạn chỉ cần chạy lần lượt 4 đoạn code Python mà tôi sẽ giới thiệu bên dưới là xong. Dĩ nhiên, với cách làm này bạn sẽ không có Web UI để sử dụng nhưng vẫn khá ổn để tạo hình ảnh "mì ăn liền" và tiết kiệm thời gian. Nếu muốn full Web UI, mời bạn tham khảo link sau.
Kate Upton trong trang phục quân đội |
Sử dụng Colab là hoàn toàn miễn phí. Tuy nhiên, vào những lúc cao điểm, tài nguyên GPU sẽ không còn, bạn sẽ phải chờ hoặc trả tiền để sử dụng dịch vụ (pay as you go). Thực tế sử dụng thì tôi không phải gặp phải tình huống này nhiều, mặc dù vẫn có.
Đầu tiên, các bạn vào Google Colab (link có thể search từ Google) rồi tạo một file mới. Như trong hình bên dưới các bạn có thể thấy có 4 đoạn code, bạn chỉ cần đưa chuột vào biểu tượng [ ] trước mỗi khối lệnh và bấm vào nút Play để thực thi đoạn code.
%pip install --quiet --upgrade diffusers transformers scipy mediapy accelerate
from diffusers import PNDMScheduler, DDIMScheduler, LMSDiscreteScheduler
scheduler = PNDMScheduler(beta_start=0.00085, beta_end=0.012, beta_schedule="scaled_linear", skip_prk_steps=True)
Chạy 2 đoạn code đầu tiên để tải về và import các thư viện cần thiết |
import mediapy as media
import torch
from torch import autocast
from diffusers import StableDiffusionPipeline
# model_id = "CompVis/stable-diffusion-v1-4"
model_id = "Lykon/DreamShaper"
# model_id = "Linaqruf/anything-v3.0"
# model_id = "SG161222/Realistic_Vision_V4.0"
# model_id = "stablediffusionapi/toonyou"
device = "cuda"
safety_checker = None
pipe = StableDiffusionPipeline.from_pretrained(model_id, safety_checker=safety_checker)
pipe = pipe.to(device)
Đoạn code thứ 3 giúp tải về và set up các pretrained model. Ở đây tôi dùng Dream Shaper, một model có style nửa thật nửa vẽ. Bạn có thể dùng các thư viện khác nếu muốn. |
Ở đoạn code cuối cùng, các bạn cần lưu ý như sau:
- Biến "prompt" cho phép bạn nhập vào các mô tả mong muốn, hình ảnh sẽ được tạo ra dựa trên các mô tả này.
- Biến "neg_prompt" là các chi tiết mà bạn không muốn xuất hiện trong tấm ảnh của mình.
- "width" và "height" là kích thước chiều rộng và chiều dài của tấm ảnh.
- "num_images" là số lượng ảnh được tạo ra.
prompt="chubby megan fox,looking at the camera,pretty face,modelshoot style,full body shot,high detail,sharp focus,professional majestic oil painting by Ed Binklkey,Atey Ghailan,Studio Ghibli,by Jeremy Mann,Greg Manchess,Antonio Moro,"
neg_prompt="ugly,tattoos,bad anatomy,extra limbs,weird hands,too many fingers,poorly drawn face,weird face,out of frame,canvas frame,cross eyes,mutation,mutated,"
width=512
height=768
num_images=3
prompts = [ prompt ] * num_images
neg_prompts = [ neg_prompt ] * num_images
with autocast("cuda"):
images = pipe(prompt=prompts, negative_prompt=neg_prompts, guidance_scale=6, num_inference_steps=50, width=width, height=height).images
media.show_images(images)
images[0].save("output.jpg")
Với sức mạnh xử lý của cloud GPU thì chỉ mất khoảng vài chục giây để tạo ảnh ở kích thước 512 x 768. Dĩ nhiên, không phải tấm hình nào cũng dùng được ngay. Bạn sẽ thấy có tấm bị lỗi mặt, lỗi ngón tay, lỗi tư thế v.v... Lúc này bạn có thể xem lại câu lệnh mình đã nhập vào hoặc chỉ đơn giản là tạo lại những tấm hình khác. Lưu ý: nếu gặp lỗi "CUDA run out of memory" thì hãy chọn Runtime > Restart để khởi động lại GPU.
Megan Fox trong trang phục văn phòng |
Trên đây chỉ là cách sử dụng SD ở mức rất cơ bản. Với phiên bản WebUI, bạn có thể cài thêm các plugin để tạo hình ảnh từ hình ảnh, tạo hình ảnh từ pose của nhân vật... Cách sử dụng là cực kỳ phong phú. Tận dụng SD đúng cách có thể giúp bạn tối ưu chi phí thiết kế, quảng cáo, bản quyền, giúp nhanh chóng tạo ra hình ảnh mong muốn mà không cần phải tốn quá nhiều thời gian và tiền bạc. Hy vọng bài viết này đã giúp bạn có được những trải nghiệm ban đầu với AI nói chung và Stable Diffusion nói riêng. Chúc các bạn thành công!