Gần đây, chúng tôi đã thấy các mô hình AI tạo ra văn bản chi tiết thành video hoặc sử dụng chạy chatbot trên điện thoại của bạn. Giờ đây, OpenAI, công ty đứng sau ChatGPT, đã giới thiệu Shap-E, một mô hình tạo các đối tượng 3D mà bạn có thể mở trong Microsoft Paint 3D hoặc thậm chí chuyển đổi thành tệp STL mà bạn có thể xuất trên một trong những máy in 3D tốt nhất.
Mô hình Shap-E có sẵn miễn phí trên GitHub (mở trong tab mới) và nó chạy cục bộ trên PC của bạn. Khi tất cả các tệp và mô hình được tải xuống, nó không cần phải ping Internet. Và trên hết, nó không yêu cầu khóa API OpenAI nên bạn sẽ không bị tính phí khi sử dụng nó.
Đó là một thách thức lớn thực sự khiến Shap-E chạy được. OpenAI hầu như không cung cấp hướng dẫn nào, chỉ yêu cầu bạn sử dụng lệnh pip Python để cài đặt nó. Tuy nhiên, công ty không đề cập đến các phụ thuộc mà bạn cần để làm cho nó hoạt động và nhiều phiên bản mới nhất của chúng sẽ không hoạt động. Tôi đã dành hơn 8 giờ để chạy ứng dụng này và tôi sẽ chia sẻ những gì hiệu quả với tôi bên dưới.
Cuối cùng khi tôi đã cài đặt Shap-E, tôi nhận thấy rằng cách mặc định để truy cập nó là thông qua Jupyter Notebook, cho phép bạn xem và thực thi mã mẫu theo từng đoạn nhỏ để xem nó làm được những gì. Có ba sổ ghi chép mẫu thể hiện “chuyển văn bản sang 3d” (sử dụng dấu nhắc văn bản), “chuyển hình ảnh sang 3d” (biến hình ảnh 2D thành đối tượng 3D) và “encode_model” lấy mô hình 3D hiện có và sử dụng Blender (mà bạn cần cài đặt) để biến nó thành thứ khác và kết xuất lại nó. Tôi đã thử nghiệm hai cái đầu tiên trong số này vì cái thứ ba (sử dụng Blender với các đối tượng 3D hiện có) nằm ngoài bộ kỹ năng của tôi.
Chuyển văn bản sang 3D của Shap-E trông như thế nào
Giống như rất nhiều mô hình AI mà chúng tôi thử nghiệm hiện nay, Shap-E đầy tiềm năng nhưng sản lượng hiện tại chỉ ở mức trung bình. Tôi đã thử chuyển văn bản thành video với một vài lời nhắc khác nhau. Trong hầu hết các trường hợp, tôi nhận được các đối tượng mà tôi yêu cầu nhưng chúng có độ phân giải thấp và thiếu các chi tiết chính.
Khi tôi sử dụng sổ ghi chép sample_text_to_3d, tôi nhận được hai loại đầu ra: GIF hoạt hình màu hiển thị trong trình duyệt của tôi và các tệp PLY đơn sắc mà tôi có thể mở sau này trong một chương trình như Paint 3D. Các ảnh động GIF luôn trông đẹp hơn rất nhiều so với các tệp PLY.
Lời nhắc mặc định của “một con cá mập” trông khá ổn dưới dạng GIF động, nhưng khi tôi mở PLY trong Paint 3D, nó có vẻ thiếu. Theo mặc định, sổ ghi chép cung cấp cho bạn bốn GIF động có kích thước 64 x 64, nhưng tôi đã thay đổi mã để tăng độ phân giải lên 256 x 256 được xuất dưới dạng một GIF duy nhất (vì cả bốn GIF trông giống nhau).
Khi tôi yêu cầu một thứ mà OpenAI lấy làm một trong những ví dụ của nó, “một chiếc máy bay trông giống như một quả chuối”, tôi đã nhận được một ảnh GIF khá đẹp, đặc biệt là khi tôi tăng độ phân giải lên 256. Tuy nhiên, tệp PLY bị lộ rất nhiều các lỗ trên cánh.
Khi tôi yêu cầu một Minecraft creeper, tôi nhận được một thứ là GIF có màu xanh lục và đen chính xác và một PLY có hình dạng cơ bản của creeper. Tuy nhiên, những người hâm mộ Minecraft thực sự sẽ không hài lòng với điều này và nó có hình dạng quá lộn xộn để in 3D (nếu tôi đã chuyển đổi nó thành STL).
Hình ảnh Shap-E thành đối tượng 3D
Tôi cũng đã thử tập lệnh image-to-3d có thể lấy tệp hình ảnh 2D hiện có và biến nó thành đối tượng tệp 3D PLY. Một hình minh họa mẫu về một chú chó corgi đã trở thành một đối tượng đẹp, có độ phân giải thấp mà nó xuất ra dưới dạng GIF động, xoay có ít chi tiết hơn. Bên dưới, ảnh gốc ở bên trái và ảnh GIF ở bên phải. Bạn có thể thấy rằng đôi mắt dường như bị mất tích.
Bằng cách sửa đổi mã, tôi cũng có thể làm cho nó xuất ra tệp PLY 3D mà tôi có thể mở trong Paint 3D. Đây là những gì nó trông như thế nào.
Tôi cũng đã thử cung cấp tập lệnh chuyển hình ảnh sang 3d một số hình ảnh của riêng mình, bao gồm ảnh chụp ổ SSD, trông có vẻ bị hỏng và một PNG trong suốt của logo Phần cứng của Tom, trông không đẹp hơn nhiều.
Tuy nhiên, có khả năng là nếu tôi có PNG 2D trông giống 3D hơn một chút (theo cách của chó corgi), thì tôi sẽ nhận được kết quả tốt hơn.
Hiệu suất của Shap-E
Cho dù tôi đang xử lý văn bản hay hình ảnh thành 3D, Shap-E đều yêu cầu rất nhiều tài nguyên hệ thống. Trên máy tính để bàn ở nhà của tôi, với GPU RTX 3080 và CPU Ryzen 9 5900X, mất khoảng năm phút để hoàn thành kết xuất. Trên Asus ROG Strix Scar 18 với GPU máy tính xách tay RTX 4090 và Intel Core i9-13980HX, quá trình này mất từ hai đến ba phút.
Tuy nhiên, khi tôi thử chuyển văn bản thành 3D trên máy tính xách tay cũ của mình, với CPU Intel thế hệ thứ 8 U và đồ họa tích hợp, nó chỉ hoàn thành 3% kết xuất sau một giờ. Nói tóm lại, nếu bạn định sử dụng Shap-E, hãy đảm bảo rằng bạn có GPU Nvidia (Shap-E không hỗ trợ các thương hiệu GPU khác. Các tùy chọn là CUDA và CPU.). Nếu không, nó sẽ chỉ mất quá nhiều thời gian.
Tôi nên lưu ý rằng lần đầu tiên bạn chạy bất kỳ tập lệnh nào, nó sẽ cần tải xuống các mô hình có dung lượng từ 2 đến 3 GB và có thể mất vài phút để chuyển.
Cách cài đặt và chạy Shap-E trên PC
OpenAI đã đăng một kho lưu trữ Shap-E lên GitHub, cùng với một số hướng dẫn về cách chạy nó. Tôi đã cố gắng cài đặt và chạy phần mềm trong Windows, sử dụng Miniconda để tạo môi trường Python chuyên dụng. Tuy nhiên, tôi liên tục gặp sự cố, đặc biệt là vì tôi không thể cài đặt Pytorch3D, một thư viện bắt buộc.
Tuy nhiên, khi tôi quyết định sử dụng WSL2 (Hệ thống con của Windows dành cho Linux), tôi đã có thể thiết lập và chạy nó mà không gặp nhiều rắc rối. Vì vậy, các hướng dẫn bên dưới sẽ hoạt động trong Linux gốc hoặc trong WSL2 trong Windows. Tôi đã thử nghiệm chúng trong WSL2.
1. Cài đặt Miniconda hoặc Anaconda trong Linux nếu bạn chưa có. Bạn có thể tìm thấy bản tải xuống và hướng dẫn trên trang Conda (mở trong tab mới).
2. Tạo một môi trường Conda có tên là shape-e đã cài đặt Python 3.9 (các phiên bản Python khác có thể hoạt động).
conda create -n shap-e python=3.9
3. Kích hoạt môi trường shape-e.
conda activate shap-e
4. Cài đặt Pytorch. Nếu bạn có card đồ họa Nvidia, hãy sử dụng lệnh này.
conda install pytorch=1.13.0 torchvision pytorch-cuda=11.6 -c pytorch -c nvidia
Nếu không có thẻ Nvidia, bạn sẽ cần thực hiện cài đặt dựa trên CPU. Quá trình cài đặt diễn ra nhanh chóng nhưng theo kinh nghiệm của tôi, việc xử lý thế hệ 3D thực tế với CPU cực kỳ chậm.
conda install pytorch torchvision torchaudio cpuonly -c pytorch
5. Xây dựng Pytorch. Đây là lĩnh vực mà tôi đã mất hàng giờ đồng hồ để tìm ra một sự kết hợp hiệu quả.
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
Nếu bạn gặp lỗi cuda, hãy thử chạy Sudo apt cài đặt nvidia-cuda-dev và sau đó lặp lại quá trình.
6. Cài đặt Máy tính xách tay Jupyter sử dụng Conda.
conda install -c anaconda jupyter
7. Nhân bản hình e repo.
git clone https://github.com/openai/shap-e
Git sẽ tạo một thư mục shape-e bên dưới thư mục mà bạn đã sao chép nó từ đó.
số 8. Nhập nếp gấp hình chữ nhậtr và chạy cài đặt sử dụng pip.
cd shap-e
pip install -e .
9. Khởi chạy Máy tính xách tay Jupyter.
jupyter notebook
10. Điều hướng đến URL localhost mà phần mềm hiển thị cho bạn. Nó sẽ là http://localhost:8888?token= và một mã thông báo. Bạn sẽ thấy một thư mục gồm các thư mục và tệp.
11. Duyệt đến hình dạng/ví dụ Và nhấp đúp chuột vào sample_text_to_3d.ipynb.
Một sổ ghi chép sẽ mở ra với các phần mã khác nhau.
12. Đánh dấu từng phần Và nhấp vào nút Chạyđợi nó hoàn thành trước khi chuyển sang phần tiếp theo.
Quá trình này sẽ mất một chút thời gian trong lần đầu tiên bạn thực hiện vì nó sẽ tải một số mô hình lớn xuống ổ đĩa cục bộ của bạn. Khi mọi thứ hoàn tất, bạn sẽ thấy bốn mô hình 3D của một con cá mập trong trình duyệt của mình. Cũng sẽ có bốn tệp .ply trong thư mục ví dụ và bạn sẽ có thể mở chúng trong các chương trình hình ảnh 3D như Paint 3D. Bạn cũng có thể chuyển đổi chúng thành tệp STL bằng trình chuyển đổi trực tuyến (mở trong tab mới).
Nếu bạn muốn thay đổi lời nhắc và thử lại. Làm mới trình duyệt của bạn và thay đổi “a shark” thành một thứ khác trong phần lời nhắc. Ngoài ra, nếu bạn thay đổi kích thước từ 64 thành số cao hơn, bạn sẽ có được hình ảnh có độ phân giải cao hơn.
13. Nhấp đúp vào sample_image_to_3d.ipynb trong thư mục ví dụ một lần nữa để bạn có thể thử tập lệnh chuyển hình ảnh thành 3d.
14. Đánh dấu từng phần Và nhấp vào Chạy.
Theo mặc định, bạn sẽ có bốn hình ảnh nhỏ về chó corgi.
Tuy nhiên, tôi khuyên bạn nên thêm đoạn mã sau vào phần sổ ghi chép cuối cùng để nó xuất tệp PLY cũng như GIF động.
from shap_e.util.notebooks import decode_latent_mesh
for i, latent in enumerate(latents):
with open(f'example_mesh_{i}.ply', 'wb') as f:
decode_latent_mesh(xm, latent).tri_mesh().write_ply(f)
15. Sửa đổi vị trí hình ảnh trong phần 3 để thay đổi hình ảnh. Ngoài ra, tôi khuyên bạn nên thay đổi batch_size thành 1 để nó chỉ tạo một hình ảnh. Thay đổi kích thước thành 128 hoặc 256 sẽ cho bạn hình ảnh có độ phân giải cao hơn.
16. Tạo tập lệnh python sau Và lưu nó dưới dạng text-to-3d.py hoặc tên khác. Nó sẽ cho phép bạn tạo các tệp PLY dựa trên lời nhắc văn bản tại dòng lệnh.
import torch
from shap_e.diffusion.sample import sample_latents
from shap_e.diffusion.gaussian_diffusion import diffusion_from_config
from shap_e.models.download import load_model, load_config
from shap_e.util.notebooks import create_pan_cameras, decode_latent_images, gif_widget
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
xm = load_model('transmitter', device=device)
model = load_model('text300M', device=device)
diffusion = diffusion_from_config(load_config('diffusion'))
batch_size = 1
guidance_scale = 15.0
prompt = input("Enter prompt: ")
filename = prompt.replace(" ","_")
latents = sample_latents(
batch_size=batch_size,
model=model,
diffusion=diffusion,
guidance_scale=guidance_scale,
model_kwargs=dict(texts=[prompt] * batch_size),
progress=True,
clip_denoised=True,
use_fp16=True,
use_karras=True,
karras_steps=64,
sigma_min=1e-3,
sigma_max=160,
s_churn=0,
)
render_mode="nerf" # you can change this to 'stf'
size = 64 # this is the size of the renders; higher values take longer to render.
from shap_e.util.notebooks import decode_latent_mesh
for i, latent in enumerate(latents):
with open(f'{filename}_{i}.ply', 'wb') as f:
decode_latent_mesh(xm, latent).tri_mesh().write_ply(f)
17. Chạy python text-to-3d.py Và nhập lời nhắc của bạn khi chương trình yêu cầu.
Điều đó sẽ cung cấp cho bạn đầu ra PLY chứ không phải GIF. Nếu bạn biết Python, bạn có thể sửa đổi tập lệnh để làm được nhiều việc hơn với nó.