Baru-baru ini, kami telah melihat model AI yang menghasilkan teks-ke-video mendetail atau menggunakan chatbot di ponsel Anda. Sekarang, OpenAI, perusahaan di balik ChatGPT, telah memperkenalkan Shap-E, model yang menghasilkan objek 3D yang dapat Anda buka di Microsoft Paint 3D atau bahkan diubah menjadi file STL yang dapat Anda hasilkan di salah satu printer 3D terbaik.
Model Shap-E tersedia untuk gratis di GitHub (terbuka di tab baru) dan berjalan secara lokal di PC Anda. Setelah semua file dan model diunduh, tidak perlu melakukan ping ke Internet. Dan yang terbaik, itu tidak memerlukan kunci API OpenAI sehingga Anda tidak akan dikenakan biaya untuk menggunakannya.
Ini adalah tantangan besar untuk benar-benar menjalankan Shap-E. OpenAI hampir tidak memberikan instruksi, hanya memberi tahu Anda untuk menggunakan perintah pip Python untuk menginstalnya. Namun, perusahaan gagal menyebutkan dependensi yang Anda perlukan untuk membuatnya berfungsi dan banyak dari versi terbarunya tidak berfungsi. Saya menghabiskan lebih dari 8 jam untuk menjalankan ini dan saya akan membagikan apa yang berhasil untuk saya di bawah ini.
Setelah saya akhirnya menginstal Shap-E, saya menemukan bahwa cara default untuk mengaksesnya adalah melalui Notebook Jupyter, yang memungkinkan Anda melihat dan mengeksekusi kode sampel dalam potongan kecil untuk melihat fungsinya. Ada tiga contoh notebook yang mendemonstrasikan “text-to-3d” (menggunakan prompt teks), “image-to-3d” (mengubah gambar 2D menjadi objek 3D) dan “encode_model” yang mengambil model 3D yang ada dan menggunakan Blender (yang perlu Anda instal) untuk mengubahnya menjadi sesuatu yang lain dan merender ulang. Saya menguji dua yang pertama karena yang ketiga (menggunakan Blender dengan objek 3D yang ada) berada di luar keahlian saya.
Bagaimana Tampilan Shap-E Text-to-3D
Seperti banyak model AI yang kami uji akhir-akhir ini, Shap-E penuh dengan potensi tetapi keluaran saat ini sangat bagus. Saya mencoba teks-ke-video dengan beberapa petunjuk berbeda. Dalam kebanyakan kasus, saya mendapatkan objek yang saya minta, tetapi objek tersebut beresolusi rendah dan kehilangan detail penting.
Saat saya menggunakan notebook sample_text_to_3d, saya mendapatkan dua jenis keluaran: GIF animasi berwarna yang ditampilkan di browser saya dan file PLY monokrom yang dapat saya buka nanti di program seperti Paint 3D. GIF animasi selalu terlihat jauh lebih baik daripada file PLY.
Permintaan default “hiu”, tampak layak sebagai GIF animasi, tetapi saat saya membuka PLY di Paint 3D, sepertinya kurang. Secara default, notebook memberi Anda empat GIF animasi berukuran 64 x 64, tetapi saya mengubah kode untuk meningkatkan resolusi menjadi 256 x 256 yang dihasilkan sebagai satu GIF (karena keempat GIF terlihat sama).
Ketika saya meminta sesuatu yang OpenAI miliki sebagai salah satu contohnya, “pesawat yang terlihat seperti pisang”, saya mendapatkan GIF yang cukup bagus, terutama ketika saya meningkatkan resolusinya menjadi 256. File PLY, bagaimanapun, banyak terpapar dari lubang di sayap.
Ketika saya meminta a Minecraft creeper, saya mendapatkan GIF yang diwarnai dengan benar hijau dan hitam dan PLY yang berbentuk dasar creeper. Namun, penggemar Minecraft sejati tidak akan puas dengan ini dan bentuknya terlalu berantakan untuk dicetak 3D (jika saya mengubahnya menjadi STL).
Gambar Bentuk-E ke Objek 3D
Saya juga mencoba skrip image-to-3d yang dapat mengambil file gambar 2D yang ada dan mengubahnya menjadi objek file 3D PLY. Contoh ilustrasi anjing corgi menjadi objek beresolusi rendah yang layak yang dihasilkannya sebagai GIF animasi berputar yang kurang detail. Di bawah, gambar asli di sebelah kiri dan GIF di sebelah kanan. Anda dapat melihat bahwa matanya sepertinya hilang.
Dengan memodifikasi kode, saya juga bisa membuatnya mengeluarkan file PLY 3D yang bisa saya buka di Paint 3D. Ini adalah apa yang tampak seperti.
Saya juga mencoba memberi makan skrip gambar-ke-3d beberapa gambar saya sendiri, termasuk foto SSD, yang terlihat rusak dan PNG transparan dari logo Perangkat Keras Tom, yang tidak terlihat jauh lebih baik.
Namun, kemungkinan jika saya memiliki PNG 2D yang terlihat sedikit lebih 3D (seperti corgi), saya akan mendapatkan hasil yang lebih baik.
Kinerja Bentuk-E
Apakah saya melakukan pemrosesan teks atau gambar ke 3D, Shap-E membutuhkan banyak sekali sumber daya sistem. Di desktop rumah saya, dengan GPU RTX 3080 dan CPU Ryzen 9 5900X, butuh waktu sekitar lima menit untuk menyelesaikan render. Pada Asus ROG Strix Scar 18 dengan GPU laptop RTX 4090 dan Intel Core i9-13980HX, butuh dua hingga tiga menit.
Namun, ketika saya mencoba melakukan text-to-3D di laptop lama saya, dengan CPU Intel 8th Gen U series dan grafik terintegrasi, itu hanya menyelesaikan 3 persen render setelah satu jam. Singkatnya, jika Anda akan menggunakan Shap-E, pastikan Anda memiliki GPU Nvidia (Shap-E tidak mendukung GPU merek lain. Opsinya adalah CUDA dan CPU.). Kalau tidak, itu hanya akan memakan waktu terlalu lama.
Saya harus mencatat bahwa pertama kali Anda menjalankan salah satu skrip, Anda perlu mengunduh modelnya, yang berukuran 2 hingga 3 GB dan dapat memakan waktu beberapa menit untuk mentransfernya.
Cara Memasang dan Menjalankan Shap-E di PC
OpenAI telah memposting repositori Shap-E ke GitHub, bersama dengan beberapa petunjuk tentang cara menjalankannya. Saya mencoba menginstal dan menjalankan perangkat lunak di Windows, menggunakan Miniconda untuk membuat lingkungan Python khusus. Namun, saya terus mengalami masalah, terutama karena saya tidak dapat menginstal Pytorch3D, pustaka yang diperlukan.
Namun, ketika saya memutuskan untuk menggunakan WSL2 (Subsistem Windows untuk Linux), saya dapat mengaktifkan dan menjalankannya dengan sedikit gangguan. Jadi instruksi di bawah ini akan berfungsi baik di Linux asli atau di WSL2 di bawah Windows. Saya mengujinya di WSL2.
1. Instal Miniconda atau Anaconda di Linux jika Anda belum memilikinya. Anda dapat menemukan unduhan dan instruksi di Situs konda (terbuka di tab baru).
2. Buat lingkungan Conda yang disebut shape-e dengan Python 3.9 terinstal (versi lain dari Python mungkin berfungsi).
conda create -n shap-e python=3.9
3. Aktifkan lingkungan shape-e.
conda activate shap-e
4. Instal Pytorch. Jika Anda memiliki kartu grafis Nvidia, Gunakan perintah ini.
conda install pytorch=1.13.0 torchvision pytorch-cuda=11.6 -c pytorch -c nvidia
Jika Anda tidak memiliki kartu Nvidia, Anda harus melakukan penginstalan berbasis CPU. Penginstalannya cepat tetapi memproses generasi 3D yang sebenarnya dengan CPU sangat lambat menurut pengalaman saya.
conda install pytorch torchvision torchaudio cpuonly -c pytorch
5. Bangun Pytorch. Ini adalah area di mana saya membutuhkan waktu berjam-jam untuk menemukan kombinasi yang berhasil.
pip install "git+
Jika Anda mendapatkan kesalahan cuda, coba jalankan sudo apt install nvidia-cuda-dev dan kemudian mengulangi prosesnya.
6. Instal Notebook Jupyter menggunakan Konda.
conda install -c anaconda jupyter
7. Klon bentuk-e repo.
git clone https://github.com/openai/shap-e
Git akan membuat folder shape-e di bawah folder tempat Anda mengkloningnya.
8. Masukkan lipatan bentukr dan jalankan penginstalan menggunakan pip.
cd shap-e
pip install -e .
9. Luncurkan Notebook Jupyter.
jupyter notebook
10. Arahkan ke URL localhost yang ditunjukkan perangkat lunak kepada Anda. Itu akan menjadi dan token. Anda akan melihat direktori folder dan file.
11. Telusuri ke shape-e/examples Dan klik dua kali pada sample_text_to_3d.ipynb.
Buku catatan akan terbuka dengan bagian kode yang berbeda.
12. Sorot setiap bagian Dan klik tombol Jalankanmenunggu hingga selesai sebelum melanjutkan ke bagian berikutnya.
Proses ini akan memakan waktu cukup lama saat pertama kali Anda melewatinya, karena ini akan mengunduh beberapa model besar ke drive lokal Anda. Setelah semuanya selesai, Anda akan melihat empat model hiu 3D di browser Anda. Juga akan ada empat file .ply di folder contoh dan Anda akan dapat membukanya di program pencitraan 3D seperti Paint 3D. Anda juga dapat mengonversinya menjadi file STL menggunakan file konverter daring (terbuka di tab baru).
Jika Anda ingin mengubah prompt dan coba lagi. Refresh browser Anda dan ubah “hiu” menjadi sesuatu yang lain di bagian prompt. Selain itu, jika Anda mengubah ukuran dari 64 ke angka yang lebih tinggi, Anda mendapatkan gambar beresolusi lebih tinggi.
13. Klik dua kali pada sample_image_to_3d.ipynb di folder contoh lagi sehingga Anda dapat mencoba skrip image-to-3d.
14. Sorot setiap bagian Dan klik Jalankan.
Secara default, Anda akan mendapatkan empat gambar kecil corgi.
Namun, saya sarankan untuk menambahkan kode berikut ke bagian buku catatan terakhir sehingga akan menampilkan file PLY serta GIF animasi.
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. Ubah lokasi gambar di bagian 3 untuk mengubah gambar. Juga, saya sarankan untuk mengubah batch_size menjadi 1 sehingga hanya membuat satu gambar. Mengubah ukuran menjadi 128 atau 256 akan memberi Anda gambar beresolusi lebih tinggi.
16. Buat skrip python berikut Dan simpan sebagai text-to-3d.py atau nama lain. Ini akan memungkinkan Anda untuk menghasilkan file PLY berdasarkan petunjuk teks di baris perintah.
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. Berlari python teks-ke-3d.py Dan masukkan permintaan Anda ketika program memintanya.
Itu akan memberi Anda keluaran PLY, tetapi bukan GIF. Jika Anda mengetahui Python, Anda dapat memodifikasi skrip untuk berbuat lebih banyak dengannya.