Bí kíp "bẻ lái" Stable Diffusion tạo ảnh chuẩn không cần chỉnh – Newbie cũng "chơi" được! ✨

66ef86a1876f224cd1a5.jpg


Nói thật là Stable Diffusion mạnh "bá cháy" luôn anh em ơi! Không chỉ đơn thuần gõ text là ra ảnh đâu nhé, nó còn làm được đủ thứ trò: biến ảnh thành ảnh khác, đổi mặt, chỉnh sửa từng chi tiết theo ý mình... Nghe xịn sò chưa?

Dùng để làm ảnh minh họa bài viết, quảng cáo sản phẩm, thiết kế nội thất hay phối cảnh đều "ổn áp" hết. Muốn pro hơn thì phải học cách chỉnh tham số, xài Lora, train model bằng ảnh của chính mình, chỉnh tư thế, inpainting... Rồi còn chọn giữa chạy local trên máy của mình hay đẩy lên Google Collab để "mượn" sức mạnh phần cứng (có cả free lẫn trả phí nha).

Để làm được những điều trên, mình cần hiểu sơ qua cách Stable Diffusion hoạt động ra sao, có những thành phần gì quan trọng. Bài này mình sẽ chia sẻ với anh em những điều cơ bản nhất nhé!

**Stable Diffusion là "thần thánh" gì?**

Trước tiên, trong machine learning có nhiều loại mô hình tạo dữ liệu gọi là Generative Model. Trong đó có nhiều mô hình tạo ảnh, và diffusion model là một trong số đó. Có thể dịch là "mô hình khuếch tán" vì nó mô phỏng hành vi khuếch tán của phân tử (giống như khi bạn mở chai nước hoa giữa phòng, người ở góc phòng vẫn ngửi được mùi vậy đó – đó là do các hạt được khuếch tán lan rộng ra).

**Stable Diffusion "chạy" như nào?**

23e7316a30656f578e9a.webp


Dưới đây là sơ đồ cơ bản mô tả cách một model Diffusion hoạt động:

**Checkpoint**: Đây chính là model mà chúng ta dùng, vai trò quan trọng nhất luôn! Một checkpoint có 2 thành phần chính là Text Encoder và Unet – hiểu nôm na là phần chữ và phần ảnh. Muốn tải về nghịch thì vào https://civitai.com/ là có đầy đủ hết nha!

**Prompt**: Đây là câu lệnh dạng chữ mà mình nhập vào để yêu cầu model gen ra tấm hình như mong muốn. Những chữ này sẽ được token hóa thông qua CLIP Encoder để mô hình hiểu được ta đang muốn gì. Mỗi phiên bản model SD sẽ có CLIP khác nhau, từ đó mức độ hiểu câu lệnh và làm đúng ý người dùng cũng khác nhau. Việc viết câu lệnh sao cho model hiểu cũng cần có phương pháp một chút, mình sẽ chia sẻ với anh em ở bài về cách viết Prompt sau nha!

77d64462393b069062f9.png


**Sampler**: Sau khi prompt đã được token hóa, dữ liệu đó sẽ đi qua quá trình UNET để chuyển text thành hình ảnh tương ứng. Các hình ảnh đầu ra của UNET sẽ tiếp tục được gửi lặp lại quá trình n lần (gọi là step) để thêm chi tiết và hoàn thiện. Quá trình lặp lại này gọi là Sampler - phương pháp lấy mẫu. Và có nhiều phương pháp lấy mẫu khác nhau đấy! Anh em dùng Stable Diffusion mà thấy chỗ sampler có các tùy chọn như DPM++ 2M, DPM++ 2S a Karras, Euler... chính là nó đó. Mỗi cái sẽ có cách làm khác nhau và từng trường hợp sẽ có ứng dụng riêng. Cái này mình sẽ chia sẻ trong bài khác chuyên về nó nhé!

**VAE**: Viết tắt của Variational autoencoder. Sau quá trình sampler với n steps diễn ra xong thì quá trình lấy mẫu coi như hoàn tất. Kết quả là một hình ảnh định dạng Latent. Anh em cứ hiểu đại khái là hình mà ta nhìn qua các file JPEG, PNG... là hình trong không gian hình ảnh image space. Ví dụ hình đầu ra của SD 1.5 là 512x512px màu RGB, tương ứng với không gian kích thước 3 x 512 x 512 – cái này máy local không chạy nổi đâu. Và trong model latent diffusion thì giải pháp là nén không gian đó về thành một latent nhỏ hơn 64 lần, chỉ là 3x64x64. Đây chính là cái mà Sampler đã tạo ra đó. VAE sẽ có nhiệm vụ "tăng độ phân giải" để trả cho bạn hình đầu ra bằng cách sử dụng các "model con". Quá trình này sẽ "dựng" các chi tiết trong hình như mắt, mũi, miệng, áo, quần... đã được train sẵn để trả về kết quả cuối cùng là tấm hình anh em muốn.

Xong! Coi như trên đây là 4 bước, 4 thành phần quan trọng nhất mà một model chạy trong Stable Diffusion để trả về hình ảnh mà chúng ta ra lệnh cho nó.

**Những công cụ cơ bản để tăng độ "đúng ý" khi tạo ảnh**

Tuy nhiên, 4 thành phần này vẫn chưa đủ chi tiết để phục vụ nhu cầu đa dạng của chúng ta. Và vì thế, người ta làm thêm các "tùy chọn/công cụ/extension" như bên dưới:

44454feccca76663369d.webp


**Lora**: Có thể hiểu đây là một "model con", nhỏ hơn checkpoint, để bổ sung dữ liệu về TextEncoder và UNET về một nhánh chủ đề hình ảnh đặc thù nào đó, ví dụ như một concept ảnh, chất liệu sản phẩm, Pose mẫu, quần áo...

**Embedding**: Đây cũng là một thành phần như Lora nhưng chỉ bổ sung khái niệm mới vào Text Encoder để hiểu được nhiều từ ngữ đặc biệt trong prompt. Embedding chỉ đụng vào text encoder, không đụng vào UNET.

ea3df60faaeaa9905bb7.webp


**Controlnet**: Sẽ có nhiều bức ảnh anh em muốn bắt model tạo ra nhưng rất khó miêu tả bằng text, ví dụ như bố cục hình ảnh, tư thế pose của mẫu, độ sâu trong không gian nội thất, thứ tự sắp xếp các vật thể trong phòng, biểu cảm của nhân vật anime... Lúc này, chúng ta sẽ dùng các Controlnet để ra lệnh kèm với text thông thường.

Một số nguồn Controlnet tham khảo:
- Controlnet WebUI Automatic1111
- T2I-Adapter
- IP-Adapter
- Control Lora

6595399e271d47f0d8a4.jpg


**Inpainting**: Công cụ này dùng để gen hình từ một tấm hình đã có sẵn, chỉnh sửa các thành phần cụ thể trên ảnh trước đó do AI gen ra, thêm bớt yếu tố vào ảnh... Mặc định trong model Stable Diffusion đã có sẵn Inpainting, tuy nhiên nếu xài các model inpainting và controlnet inpainting riêng thì sẽ chính xác và ngon hơn nhiều!

Rồi, coi như tới đây thì chúng ta đã nắm được hầu hết các thành phần và cách quan trọng để tạo ra ảnh theo đúng ý muốn. Từng cái đó lại có những chi tiết thủ thuật sử dụng để đạt hiệu quả cao nhất, sau đó là phối hợp các công cụ để hình thành nên một workflow tạo ảnh phục vụ nhu cầu của chúng ta.

**Chi tiết hơn về cách hoạt động của Stable Diffusion**

Nguồn: tinhte.vn
 
Back
Top