Gần đây, NVIDIA đã ra mắt một mô hình đột phá có tên LLaMA-Mesh, có khả năng tạo lưới 3D từ mô tả văn bản thuần túy.
Mô hình cũng hoạt động theo chiều ngược lại: với một lưới 3D đầu vào, nó có thể nhận diện đối tượng.
Đây là một bước tiến quan trọng của học máy, vì hiểu không gian 3D là bước then chốt hướng tới AGI. LLaMA-Mesh cũng là công cụ hữu ích cho các chuyên gia và người đam mê thường xuyên làm việc với phần mềm như Blender, giúp quá trình tạo và sử dụng lưới 3D nhanh hơn.
Trong hướng dẫn ngắn này, tôi sẽ giải thích các khả năng của mô hình và chạy vài ví dụ để giúp bạn hiểu tiềm năng cũng như các giới hạn của nó.
LLaMa-Mesh là gì?
LLaMA-Mesh là một mô hình sáng tạo do NVIDIA phát triển, mở rộng khả năng của các mô hình ngôn ngữ lớn (LLM) sang miền 3D.
Khác với mọi mô hình trước đó, LLaMA-Mesh hợp nhất văn bản và 3D, cho phép người dùng tạo lưới 3D thông qua các prompt ngôn ngữ tự nhiên đơn giản.
Bên dưới, mô hình là phiên bản LLaMa-3.1-8B-Instruct được tinh chỉnh. Mô hình hoạt động bằng cách mã hóa dữ liệu lưới 3D theo định dạng văn bản, cụ thể là tiêu chuẩn tệp OBJ, mô tả các đỉnh và mặt dưới dạng văn bản thuần.
Cách truy cập LLaMa-Mesh
Có ba cách để bạn sử dụng mô hình:
Bạn có thể chạy mô hình cục bộ qua Hugging Face—kho lưu trữ có sẵn tại đây.
Nếu bạn thành thạo Blender và muốn dùng mô hình ngay trong đó, nó có sẵn dưới dạng addon cho Blender.
Tác giả cũng đã dựng một bản demo trực tuyến trên nền tảng Hugging Face mà tôi sẽ dùng để tạo các lưới thử nghiệm cho hướng dẫn này.
Giao diện WebApp demo trông như sau:
Bản demo trực tuyến hỗ trợ tối đa 4096 token, trong khi mô hình đầy đủ hỗ trợ 8K. Vì vậy, chúng ta cần chạy mô hình cục bộ để trải nghiệm đầy đủ khả năng của nó.
Tiếp theo, tôi sẽ tạo ba ví dụ với độ khó tăng dần để kiểm thử giới hạn của mô hình. Tôi sẽ chạy các ví dụ trên cả phiên bản 4K và 8K token để xem sự khác biệt.
Cách thiết lập LLaMa-Mesh để dùng cục bộ hoặc trên đám mây
Trong hướng dẫn này, tôi sẽ minh họa cách chạy mô hình bằng runtime GPU A100 của Google Colab. Nếu bạn có đủ tài nguyên tính toán tại chỗ, cùng đoạn mã có thể điều chỉnh để chạy trên phần cứng cá nhân. Kho lưu trữ Hugging Face có sẵn tại đây.
Để bắt đầu, chúng ta cần import các thư viện cần thiết và tải mô hình cùng tokenizer:
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path ="Zhengyi/LLaMA-Mesh"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map="auto").cuda()Được hỗ trợ bởi
Chúng ta cũng cần thiết lập pad_token:
if tokenizer.pad_token_id isNone:
tokenizer.pad_token_id = tokenizer.eos_token_idĐược hỗ trợ bởi
Cuối cùng, chúng ta cần tokenize prompt và đưa vào mô hình để suy luận (tất cả đều là quy trình chuẩn của Huggingface, áp dụng được cho hầu như mọi mô hình khác):
prompt ="Create a 3D model of an original designer chair."
inputs = tokenizer(prompt, return_tensors="pt", padding=True)
input_ids = inputs.input_ids.cuda()
output = model.generate(
input_ids,
attention_mask=inputs['attention_mask'],# Provide the attention_mask
max_length=8000,)Được hỗ trợ bởi
Tác giả không nêu rõ các siêu tham số dùng trong bản demo web app, nên để công bằng, tôi sẽ dùng các giá trị mặc định cho phần so sánh.
Ví dụ với LLaMa-Mesh
Giờ tôi sẽ đi qua ba ví dụ có độ khó tăng dần và so sánh đầu ra từ ứng dụng demo với kết quả tôi chạy mô hình trên Colab.
Ví dụ 1: Ghế
Chúng ta bắt đầu với thứ gì đó đơn giản nhưng sáng tạo—một chiếc ghế thiết kế. Đây là prompt (tôi thêm yêu cầu tạo lưới theo định dạng OBJ ở cuối vì mô hình chạy cục bộ đôi khi từ chối tạo nếu không có yêu cầu này):
Create a 3D model of an original designer chair in OBJ format.Được hỗ trợ bởi
Đây là đối tượng được tạo trên bản demo trực tuyến:
Đây chắc chắn là một chiếc ghế ngầu và lạ, dù trông giống ghế của đạo diễn phim hơn là ghế thiết kế.
Giờ hãy thử chạy prompt cục bộ và trực quan hóa kết quả. Đây là những gì chúng ta nhận được:
Trực quan hóa lưới 3D của một chiếc ghế
Lưới với ngữ cảnh lớn hơn trông chi tiết hơn. Tuy nhiên, theo tôi, chiếc ghế này giống ghế băng sofa hơn.
Ví dụ 2: Xuyến (Torus)
Tiếp theo, hãy thử một đối tượng hình học: xuyến (bánh donut 3D). Prompt cho ví dụ này là:
Từ các thử nghiệm trên, có thể thấy rằng mặc dù LLaMA-Mesh (cả bản trực tuyến và cục bộ) rất giỏi với các thiết kế sáng tạo và đơn giản, nó gặp hạn chế với các hình học chính xác và những hình dạng toán học cực kỳ phức tạp. Khi mô hình phát triển, thật đáng mong đợi xem các khả năng này sẽ được mở rộng ra sao.
Kết luận
Trong hướng dẫn này, chúng ta đã khám phá mô hình Nvidia LLaMa-Mesh mới và thực hiện vài ví dụ trên nền tảng demo của họ. Dù mô hình còn ở giai đoạn đầu, nó vẫn cho thấy tiềm năng lớn cho các chuyên gia và người đam mê cần giải pháp nhanh, trực quan để tạo lưới 3D.
Khi khung làm việc phát triển, các bản cập nhật tương lai có thể mang đến khả năng mở rộng, như xử lý hình học phức tạp hơn hoặc tương thích với máy in 3D.
Tôi là Dimitri Didmanidze, một nhà khoa học dữ liệu hiện đang theo học Thạc sĩ Toán học với trọng tâm là Học máy. Hành trình học thuật của tôi còn bao gồm nghiên cứu về khả năng của các mô hình dựa trên transformer và giảng dạy ở bậc đại học, giúp tôi hiểu sâu hơn các khái niệm lý thuyết phức tạp. Tôi cũng từng làm việc trong ngành ngân hàng, nơi tôi áp dụng những nguyên lý này để giải quyết các thách thức dữ liệu trong thực tế.
Thử nghiệm với Llama 3 để thực hiện suy luận trên các mô hình đã được huấn luyện sẵn, tinh chỉnh chúng trên các tập dữ liệu tùy chỉnh và tối ưu hóa hiệu suất.
Gần đây, NVIDIA đã ra mắt một mô hình đột phá có tên LLaMA-Mesh, có khả năng tạo lưới 3D từ mô tả văn bản thuần túy.
Mô hình cũng hoạt động theo chiều ngược lại: với một lưới 3D đầu vào, nó có thể nhận diện đối tượng.
Đây là một bước tiến quan trọng của học máy, vì hiểu không gian 3D là bước then chốt hướng tới AGI. LLaMA-Mesh cũng là công cụ hữu ích cho các chuyên gia và người đam mê thường xuyên làm việc với phần mềm như Blender, giúp quá trình tạo và sử dụng lưới 3D nhanh hơn.
Trong hướng dẫn ngắn này, tôi sẽ giải thích các khả năng của mô hình và chạy vài ví dụ để giúp bạn hiểu tiềm năng cũng như các giới hạn của nó.
LLaMa-Mesh là gì?
LLaMA-Mesh là một mô hình sáng tạo do NVIDIA phát triển, mở rộng khả năng của các mô hình ngôn ngữ lớn (LLM) sang miền 3D.
Khác với mọi mô hình trước đó, LLaMA-Mesh hợp nhất văn bản và 3D, cho phép người dùng tạo lưới 3D thông qua các prompt ngôn ngữ tự nhiên đơn giản.
Bên dưới, mô hình là phiên bản LLaMa-3.1-8B-Instruct được tinh chỉnh. Mô hình hoạt động bằng cách mã hóa dữ liệu lưới 3D theo định dạng văn bản, cụ thể là tiêu chuẩn tệp OBJ, mô tả các đỉnh và mặt dưới dạng văn bản thuần.
Cách truy cập LLaMa-Mesh
Có ba cách để bạn sử dụng mô hình:
Giao diện WebApp demo trông như sau:
Bản demo trực tuyến hỗ trợ tối đa 4096 token, trong khi mô hình đầy đủ hỗ trợ 8K. Vì vậy, chúng ta cần chạy mô hình cục bộ để trải nghiệm đầy đủ khả năng của nó.
Tiếp theo, tôi sẽ tạo ba ví dụ với độ khó tăng dần để kiểm thử giới hạn của mô hình. Tôi sẽ chạy các ví dụ trên cả phiên bản 4K và 8K token để xem sự khác biệt.
Cách thiết lập LLaMa-Mesh để dùng cục bộ hoặc trên đám mây
Trong hướng dẫn này, tôi sẽ minh họa cách chạy mô hình bằng runtime GPU A100 của Google Colab. Nếu bạn có đủ tài nguyên tính toán tại chỗ, cùng đoạn mã có thể điều chỉnh để chạy trên phần cứng cá nhân. Kho lưu trữ Hugging Face có sẵn tại đây.
Để bắt đầu, chúng ta cần import các thư viện cần thiết và tải mô hình cùng tokenizer:
Chúng ta cũng cần thiết lập
pad_token:Cuối cùng, chúng ta cần tokenize prompt và đưa vào mô hình để suy luận (tất cả đều là quy trình chuẩn của Huggingface, áp dụng được cho hầu như mọi mô hình khác):
Tác giả không nêu rõ các siêu tham số dùng trong bản demo web app, nên để công bằng, tôi sẽ dùng các giá trị mặc định cho phần so sánh.
Ví dụ với LLaMa-Mesh
Giờ tôi sẽ đi qua ba ví dụ có độ khó tăng dần và so sánh đầu ra từ ứng dụng demo với kết quả tôi chạy mô hình trên Colab.
Ví dụ 1: Ghế
Chúng ta bắt đầu với thứ gì đó đơn giản nhưng sáng tạo—một chiếc ghế thiết kế. Đây là prompt (tôi thêm yêu cầu tạo lưới theo định dạng OBJ ở cuối vì mô hình chạy cục bộ đôi khi từ chối tạo nếu không có yêu cầu này):
Đây là đối tượng được tạo trên bản demo trực tuyến:
Đây chắc chắn là một chiếc ghế ngầu và lạ, dù trông giống ghế của đạo diễn phim hơn là ghế thiết kế.
Giờ hãy thử chạy prompt cục bộ và trực quan hóa kết quả. Đây là những gì chúng ta nhận được:
Trực quan hóa lưới 3D của một chiếc ghế
Lưới với ngữ cảnh lớn hơn trông chi tiết hơn. Tuy nhiên, theo tôi, chiếc ghế này giống ghế băng sofa hơn.
Ví dụ 2: Xuyến (Torus)
Tiếp theo, hãy thử một đối tượng hình học: xuyến (bánh donut 3D). Prompt cho ví dụ này là:
Đây là lưới do mô hình 4096 token tạo ra:
Xuyến do mô hình tạo
Còn đây là trực quan hóa lưới do mô hình chạy trên Colab tạo ra:
Xuyến do mô hình tạo
Như bạn thấy, lưới này có nhiều đa giác hơn. Tuy vậy, nó vẫn không có lỗ ở giữa. Một hình xuyến đúng phải trông như sau:
Nguồn: Wikipedia
Ví dụ 3: Chai Klein
Cuối cùng, hãy đẩy giới hạn với một chai Klein—một cấu trúc 3D phức tạp. Prompt cho ví dụ này sẽ là:
Mô hình trực tuyến liên tục tạo lưới vô tận với đầu vào này, cho đến khi tự hết thời gian và báo lỗi.
Chạy prompt cục bộ với cửa sổ ngữ cảnh lớn hơn thì khắc phục được sự cố, tuy nhiên lưới thu được trông chẳng giống chai Klein:
Chai Klein do mô hình tạo
Đây là hình dạng chai Klein dành cho những ai quan tâm:
Nguồn: Wikipedia
Từ các thử nghiệm trên, có thể thấy rằng mặc dù LLaMA-Mesh (cả bản trực tuyến và cục bộ) rất giỏi với các thiết kế sáng tạo và đơn giản, nó gặp hạn chế với các hình học chính xác và những hình dạng toán học cực kỳ phức tạp. Khi mô hình phát triển, thật đáng mong đợi xem các khả năng này sẽ được mở rộng ra sao.
Kết luận
Trong hướng dẫn này, chúng ta đã khám phá mô hình Nvidia LLaMa-Mesh mới và thực hiện vài ví dụ trên nền tảng demo của họ. Dù mô hình còn ở giai đoạn đầu, nó vẫn cho thấy tiềm năng lớn cho các chuyên gia và người đam mê cần giải pháp nhanh, trực quan để tạo lưới 3D.
Khi khung làm việc phát triển, các bản cập nhật tương lai có thể mang đến khả năng mở rộng, như xử lý hình học phức tạp hơn hoặc tương thích với máy in 3D.