1 điểm bởi GN⁺ 2 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • underdrawing là phương pháp trước hết tạo ra một ảnh bản phác nền bằng công cụ quyết định, trong đó đã đặt sẵn vị trí của chữ và số, rồi để mô hình tạo ảnh phủ phong cách hình ảnh lên trên nhằm tăng độ chính xác
  • Trong bài toán sắp xếp 50 phiến đá bước chân theo hình xoắn ốc và gắn số từ 1 đến 50, Gemini 3 ProChatGPT Images 2 không thể ổn định giữ đúng số và thứ tự nếu không có underdrawing
  • Với cùng bài toán đó, Gemini 3.0 Pro khi dùng kèm underdrawing đã tạo ra kết quả đúng về số thứ tự, số lượng nút, thứ tự và hình dạng xoắn ốc
  • Có thể triển khai bằng cách dùng các công cụ như SVG/HTML để đặt số và chữ vào vị trí, hướng mong muốn rồi xuất thành ảnh, sau đó đưa ảnh đó cùng prompt văn bản vào mô hình ảnh đa phương thức
  • Cách này không phải lúc nào cũng hoàn hảo, nhưng với việc tạo ảnh nơi bố cục chữ và số là quan trọng, nó cho phép tách riêng phần bố trí quyết định và khả năng thể hiện hình ảnh của mô hình sinh

Bối cảnh cốt lõi và cách triển khai

  • Đây là một mẫu rút ra trong quá trình tạo hình ảnh bàn chơi phiêu lưu 100 bước, được tóm gọn là “cho sẵn đường nét rồi để nó tô lên trên”
  • Lớp quyết định

    • SVG/HTML tuy khô khan về mặt thị giác nhưng rất mạnh ở bố trí toán học và độ chính xác
    • Chỉ cần đặt số và chữ theo đúng vị trí, hướng mong muốn rồi xuất thành ảnh có chứa các pixel đó
    • Có thể dùng bất kỳ công cụ nào như SVG, Python, Mermaid
  • Lớp sinh

    • Mô hình tạo ảnh cho ra kết quả trực quan rất tốt nhưng độ tin cậy với toán học và văn bản lại thấp
    • Với mô hình ảnh đa phương thức có thể nhận ảnh và văn bản rồi xuất ảnh như Gemini 3.0 Pro, ta đưa đồng thời ảnh underdrawing và prompt văn bản vào
    • Prompt ví dụ ở bước 1 yêu cầu tạo SVG với 50 phiến đá bước chân xếp thành xoắn ốc vào trong theo chiều ngược kim đồng hồ, và đánh số liên tiếp từ 1 đến 50 trên từng phiến đá
    • Prompt ví dụ ở bước 2 yêu cầu chuyển ảnh đó thành một diorama claymation phong cách ảnh chụp, góc thấp, hơi nghiêng, với sô-cô-la thủ công và kẹo được đặt thành đường xoắn ốc
  • Tự động hóa và giới hạn

    • Có thể để Claude Code hoặc Codex thực hiện thay từng bước
    • Kết quả tốt nhưng không phải lúc nào cũng hoàn hảo, và ngay cả ở thành phẩm cuối cùng thì “71” cũng không xuất hiện

1 bình luận

 
Ý kiến trên Hacker News
  • Thật đáng mừng khi ngày càng hiểu sâu hơn về những việc LLM vốn làm tốt và những việc làm không tốt; không có nghĩa là bất khả thi, nhưng do giới hạn nền tảng nên xác suất thành công thấp
    Điều này khá giống với cách để con người quyết định kiến trúc phần mềm rồi giao phần hiện thực hàm cho LLM, hoặc thay vì bắt nó tự phân tích dữ liệu thì để nó viết truy vấn SQL
    Sẽ rất tốt nếu có một hệ thống phân loại tác vụ và nghiên cứu rõ ràng hơn về việc loại công việc nào phù hợp với LLM và loại nào không; trực giác thì đang dần hình thành, nhưng tôi vẫn thấy nhiều người thường xuyên vấp ở chỗ này

    • Cách làm “con người quyết định kiến trúc, còn LLM viết hàm” từng là cách dùng công cụ hỗ trợ lập trình bằng LLM mà những người dùng đầu tiên thường khuyến nghị cho đến không lâu trước đây
      Theo kiểu để nó tạo dàn ý trước, rồi hiện thực từng hàm riêng lẻ; trên HN cũng từng có vài bài blog minh họa cách tiếp cận này bằng thuật ngữ mượn từ công việc làm hoạt hình
    • Cụm từ giới hạn nền tảng thường xuyên xuất hiện khi nói về LLM, nhưng đến giờ vẫn chưa có một chứng minh chặt chẽ nào rằng những giới hạn như vậy thực sự tồn tại
      Chỉ mới 2 năm trước, các tác vụ như đếm ký tự hay xử lý âm vị từng bị cho là không thể vì “giới hạn nền tảng”, nhưng giờ trong nhiều trường hợp chúng đã không còn là vấn đề lớn ngay cả khi không dùng công cụ
  • Mỗi lần đọc prompt tạo ảnh, tôi đều thấy những chi tiết rất cụ thể mà mô hình rõ ràng đã bỏ qua
    Ở đây nữa, chocolate/kẹo trong hai ảnh cuối hoàn toàn không có cảm giác thủ công kiểu nghệ nhân, mà trông quá vô trùng như hàng sản xuất đại trà, góc nhìn cũng không chính xác
    Nếu mô hình bỏ qua phần lớn nội dung thì tại sao lại phải viết prompt dài dòng như vậy?

    • Tôi thích ví dụ kiểu yêu cầu “ánh sáng studio” rồi nó nhét đầy thiết bị chiếu sáng studio vào ngay trong ảnh
    • Đám kẹo thực ra không cố trông giống đồ thủ công kiểu nghệ nhân, mà đang cố khớp với các hình ảnh trong dữ liệu huấn luyện được công ty quảng bá và gắn nhãn là artisanal
      Những từ như rustic, homemade, amateur có thể còn khớp với cách gắn thẻ hơn
    • Mỗi lần tôi dùng tạo ảnh vài lần, nó cũng cứ liên tục thất bại đúng ở những chỗ như vậy
      Ban đầu tôi nghĩ là do kỹ năng viết prompt của mình kém, nhưng một khi để ý và bắt đầu nhìn những chỗ lệch này thì thấy chúng xuất hiện khá thường xuyên
    • Tôi cho rằng phần lớn các prompt chi tiết là do AI tạo ra
    • Tôi tò mò không biết mất bao lâu để nghĩ ra hết đống này
      Nếu muốn một hình như ảnh cuối, với các “nút” nhỏ xếp theo hình xoắn ốc, thì dù trông chẳng giống kẹo cho lắm, tôi nghĩ ngay cả người không giỏi Blender lắm cũng có thể làm xong trong một buổi chiều
  • Tôi đã tìm ra một kỹ thuật đơn giản để có được văn bản và con số ổn định trong ảnh do AI tạo
    Tôi khá ngạc nhiên vì các mô hình ảnh chưa tự làm theo cách này, và thấy nó hữu ích nên muốn chia sẻ

    • Ở một khía cạnh nào đó, nó khá giống dùng ControlNet
      Tôi đã dùng cùng kỹ thuật này một thời gian, chỉ khác là dùng SVG làm ảnh nền, và nó hoạt động tốt
    • Rất ấn tượng, đơn giản và ổn định
      Có vẻ các phòng nghiên cứu tạo ảnh sẽ sớm tiếp nhận nó
    • Tôi nghĩ đây là một dạng chuỗi suy nghĩ (chain of thought), khá giống https://arxiv.org/abs/2201.11903
      Thay vì để người dùng bắt mô hình tự giải theo kiểu 0-shot, cấu trúc này giúp mô hình giải theo kiểu 1-shot hoặc k-shot
      Tôi đã thử các kỹ thuật tương tự với hiệu quả rất tốt; lĩnh vực này còn quá mới và thay đổi quá nhanh nên cảm giác vẫn thiếu một hệ thuật ngữ chung, vì vậy bài blog và các ví dụ này rất hữu ích
      Dù vậy, cũng có khả năng hiện tượng này đã được quan sát và hiểu theo tên gọi khác trong các cộng đồng nhỏ hơn
    • Tóm lại là trước tiên tạo đường viền đúng bằng SVG, sau đó gửi hình đó cùng prompt văn bản vào Gemini 3.0 Pro để nó render ra ảnh có số và chữ chính xác
  • Đây chỉ là img2img với ảnh đầu tiên có cấu trúc đúng được tạo bằng code

    • Đúng vậy, chính xác là cách đó
      Nếu đã dùng mô hình sinh từ thời kỳ đầu của Stable Diffusion thì đây là một kỹ thuật khá phổ biến và hữu ích: dùng phác thảo (SVG, vẽ tay, v.v.) như một ControlNet tạm thời để dẫn hướng đầu ra của mô hình sinh
      Trước đây tôi cũng dùng cách tương tự khi bố trí phối cảnh kiến trúc
      Nếu muốn đặt sofa, ghế hay đồ nội thất khác ở vị trí cụ thể, bạn có thể tạo một cảnh đơn giản với các “set piece” chính được đặt đại khái bằng công cụ như Poser, rồi từ đó sinh depth map và đưa vào mô hình sinh thời đó như SDXL để dẫn hướng bố cục vật thể
    • Nói chung đúng như tác giả mô tả, chỉ là thêm một chút ngữ cảnh cho người mới bắt đầu
    • Đúng, nhưng khi tạo đoạn code đó thì bạn có thể dùng một mô hình sinh code khác
  • Mẹo này đúng là kiểu “à, sao mình không nghĩ ra nhỉ”
    Tôi mừng vì giờ có thêm một thứ để thử lần sau khi ảnh tạo ra không đạt kỳ vọng

    • Các ứng dụng Stable Diffusion ban đầu vốn đã có image-to-image rồi
      Chỉ là hiệu năng khi đó chưa tốt như bây giờ, nên tôi không rõ vì sao chuyện này lại được xem là mới
  • Phản biện tiêu chuẩn là thế này: nếu LLM thực sự thông minh, tại sao nó không tự nhận ra rằng quy trình 2 bước này cho kết quả tốt hơn?

    • Ở mức cơ bản, mô hình ảnh chỉ đơn thuần là nhận token văn bản làm đầu vào rồi xuất token hình ảnh
      Để lập chiến lược, xem lại kết quả rồi thử lại thì cần một quy trình kiểu agent ở phía trên
      Có vẻ Nano Banana và gpt-image-2 đã có nhúng một ít thứ đó, nhưng điều này cũng giống khác biệt giữa việc để mô hình tự viết code một phát xong luôn và để một agent harness có công cụ xử lý
      Ngay cả agent rất cơ bản cũng có thể tạo ra code tốt hơn ChatGPT đơn lẻ
    • Vì LLM nhìn chung được hardcode để chỉnh sửa nhẹ prompt kiểu “tạo ảnh” rồi chuyển cho một mô hình riêng biệt
    • Không biết thì là không biết thôi
    • Vì thực ra nó không thông minh
    • Vì chẳng ai yêu cầu nó làm thế
  • Kiểu làm này đã có từ lâu rồi, khá giống việc dùng depth map hay line art để kiểm soát silhouette

  • Tôi thích cảm giác ở phần kết là “nó hoạt động, nhưng thật ra cũng không hẳn vậy”
    Đúng kiểu cơn sốt LLM/AI tạo sinh: bỏ ra một đống công sức phức tạp chỉ để làm đúng một ví dụ cực hẹp, trông như gần được nhưng rốt cuộc vẫn không làm chuẩn hẳn, và toàn bộ bài viết đã cho thấy đúng điều đó

    • Chỉ cần hoạt động được phần nào thôi cũng đã hữu ích
      Con người rất dễ kiểm tra xem số có đúng không, và nếu sai thì chỉ cần tạo lại ảnh
      Dù sao vẫn dễ hơn vài bậc độ lớn so với việc tự làm ảnh từ đầu mà không có mô hình
  • Với bài toán quen thuộc là “SVG một con bồ nông đi xe đạp”, tôi nghĩ có thể thử cách tiếp cận ngược lại
    Nếu bắt mô hình xuất thẳng SVG thì đương nhiên chất lượng có khả năng kém
    Nhưng tạo ảnh thì lại rất dễ ra hình ảnh chân thực đẹp mắt, nên có thể tạo ảnh trước rồi để mô hình truy theo nó thành SVG; đây có thể là một cách hay để có được SVG bồ nông-đi-xe-đạp tử tế
    Suy cho cùng, ngay cả con người cũng hiếm khi chỉ nhập số vào Notepad để tạo tác phẩm SVG; cốt lõi vẫn là nhìn nó dưới dạng hình ảnh và suy nghĩ về nó

  • Cách này cũng có vẻ giống với cách con người làm để đạt độ chính xác
    Nếu bảo một họa sĩ vẽ ngay trong một lần, không chỉnh sửa hay phác thảo, một mảng đá lớn xếp thành vòng tròn và còn phải đánh số theo thứ tự, thì việc xảy ra lỗi bố trí cũng chẳng có gì lạ