Son zamanlarda, ayrıntılı metinden videoya üreten veya telefonunuzda bir sohbet botu çalıştıran AI modellerini gördük. Şimdi, ChatGPT’nin arkasındaki şirket olan OpenAI, Microsoft Paint 3D’de açabileceğiniz veya hatta en iyi 3B yazıcılardan birinde çıkarabileceğiniz bir STL dosyasına dönüştürebileceğiniz 3B nesneler oluşturan bir model olan Shap-E’yi tanıttı.
Shap-E modeli aşağıdakiler için mevcuttur: GitHub’da ücretsiz (yeni sekmede açılır) ve bilgisayarınızda yerel olarak çalışır. Tüm dosyalar ve modeller indirildikten sonra, İnternet’e ping atması gerekmez. Ve hepsinden iyisi, bir OpenAI API anahtarı gerektirmediği için onu kullanmak için ücret ödemezsiniz.
Shap-E’yi çalıştırmak gerçekten büyük bir zorluk. OpenAI, neredeyse hiçbir talimat sağlamaz, sadece yüklemek için Python pip komutunu kullanmanızı söyler. Ancak şirket, çalışmasını sağlamak için ihtiyaç duyduğunuz bağımlılıklardan ve bunların en son sürümlerinin çoğunun çalışmadığından bahsetmekte başarısız oluyor. Bunu çalıştırmak için 8 saatten fazla zaman harcadım ve aşağıda benim için neyin işe yaradığını paylaşacağım.
Sonunda Shap-E’yi yükledikten sonra, ona erişmenin varsayılan yolunun, ne yaptığını görmek için örnek kodu küçük parçalar halinde görüntülemenizi ve yürütmenizi sağlayan Jupyter Notebook aracılığıyla olduğunu buldum. “text-to-3d” (metin istemini kullanarak), “image-to-3d” (2B görüntüyü 3B nesneye dönüştürme) ve mevcut bir 3B modeli alıp kullanan “encode_model”i gösteren üç örnek not defteri vardır. Başka bir şeye dönüştürmek ve yeniden işlemek için Blender (yüklemeniz gerekir). Bunlardan ilk ikisini üçüncüsü (mevcut 3B nesnelerle Blender kullanarak) beceri setimi aştığı için test ettim.
Shap-E Metinden 3B’ye Nasıl Görünüyor?
Bugünlerde test ettiğimiz pek çok AI modeli gibi, Shap-E de potansiyelle dolu ancak mevcut çıktı en iyi ihtimalle böyle. Metinden videoya birkaç farklı istemle denedim. Çoğu durumda, istediğim nesneleri aldım ama bunlar düşük çözünürlüklüydü ve önemli ayrıntılar eksikti.
sample_text_to_3d not defterini kullandığımda iki tür çıktı elde ettim: tarayıcımda görüntülenen renkli animasyonlu GIF’ler ve daha sonra Paint 3D gibi bir programda açabileceğim tek renkli PLY dosyaları. Animasyonlu GIF’ler her zaman PLY dosyalarından çok daha iyi görünüyordu.
“Bir köpekbalığı” varsayılan istemi, animasyonlu bir GIF olarak iyi görünüyordu, ancak PLY’yi Paint 3D’de açtığımda, eksik görünüyordu. Varsayılan olarak, not defteri size 64 x 64 boyutunda dört animasyonlu GIF verir, ancak kodu, çözünürlüğü tek bir GIF olarak çıkan 256 x 256 olarak değiştirdim (dört GIF’in tümü aynı göründüğü için).
OpenAI’nin örneklerinden biri olan “muza benzeyen bir uçak” gibi bir şey sorduğumda, özellikle çözünürlüğü 256’ya yükselttiğimde oldukça iyi bir GIF aldım. kanatlardaki deliklerden.
sorduğumda bir minecraft sarmaşık, doğru şekilde yeşil ve siyah renklendirilmiş bir GIF ve temel sarmaşık şeklinde bir PLY aldım. Bununla birlikte, gerçek Minecraft hayranları bundan memnun olmayacaktı ve 3D baskı için çok dağınık bir şekildi (eğer onu bir STL’ye dönüştürmüş olsaydım).
Shap-E Görüntüsünden 3B Nesneye
Ayrıca mevcut bir 2D görüntü dosyasını alıp onu bir 3D PLY dosya nesnesine dönüştürebilen image-to-3d betiğini de denedim. Bir corgi köpeğinin örnek bir çizimi, düzgün, düşük çözünürlüklü bir nesne haline geldi ve daha az ayrıntı içeren, dönen, animasyonlu bir GIF çıktısı aldı. Aşağıda, orijinal görüntü solda ve GIF sağda. Gözlerin eksik göründüğünü görebilirsiniz.
Kodu değiştirerek, Paint 3D’de açabileceğim bir PLY 3D dosyası çıktısı da alabildim. İşte böyle görünüyordu.
Görüntüden 3B komut dosyasına, bozuk görünen bir SSD’nin fotoğrafı ve çok daha iyi görünmeyen Tom’s Hardware logosunun şeffaf bir PNG’si de dahil olmak üzere kendi görüntülerimden bazılarını beslemeyi denedim.
Bununla birlikte, biraz daha 3B görünümlü (corgi’nin yaptığı gibi) bir 2B PNG’m olsaydı, muhtemelen daha iyi sonuçlar alırdım.
Shap-E’nin performansı
3D işlemeye metin veya görüntü yapıyor olsam da, Shap-E bir ton sistem kaynağı gerektiriyordu. RTX 3080 GPU ve Ryzen 9 5900X CPU ile ev masaüstümde, bir işlemeyi tamamlamak yaklaşık beş dakika sürdü. RTX 4090 dizüstü bilgisayar GPU’suna ve Intel Core i9-13980HX’e sahip bir Asus ROG Strix Scar 18’de iki ila üç dakika sürdü.
Ancak, Intel 8. Nesil U serisi CPU’ya ve tümleşik grafiklere sahip eski dizüstü bilgisayarımda metinden 3B’ye dönüştürmeyi denediğimde, bir saat sonra işlemenin yalnızca yüzde 3’ünü bitirmişti. Kısacası Shap-E kullanacaksanız Nvidia GPU’nuz olduğundan emin olun (Shap-E diğer marka GPU’ları desteklemez. Seçenekler CUDA ve CPU’dur.). Aksi takdirde, sadece çok uzun sürecek.
Betiklerden herhangi birini ilk kez çalıştırdığınızda, 2 ila 3 GB’lık modelleri indirmesi gerekeceğini ve aktarımın birkaç dakika sürebileceğini not etmeliyim.
Shap-E’yi Bilgisayara Kurma ve Çalıştırma
OpenAI bir Shap-E deposu yayınladı GitHub’anasıl çalıştırılacağına ilişkin bazı talimatlarla birlikte. Özel bir Python ortamı oluşturmak için Miniconda’yı kullanarak yazılımı Windows’ta yüklemeyi ve çalıştırmayı denedim. Ancak, özellikle gerekli bir kitaplık olan Pytorch3D’yi yükleyemediğim için sorunlarla karşılaşmaya devam ettim.
Ancak, WSL2’yi (Linux için Windows Alt Sistemi) kullanmaya karar verdiğimde birkaç güçlükle onu kurup çalıştırabildim. Bu nedenle, aşağıdaki talimatlar yerel Linux’ta veya Windows altında WSL2’de çalışacaktır. Onları WSL2’de test ettim.
1. Miniconda’yı yükleyin veya zaten sahip değilseniz, Linux’ta Anaconda. Bir indirme ve talimatları şu adreste bulabilirsiniz: Conda sitesi (yeni sekmede açılır).
2. Shap-e adlı bir Conda ortamı oluşturun Python 3.9 yüklü (Python’un diğer sürümleri çalışabilir).
conda create -n shap-e python=3.9
3. Shape-e ortamını etkinleştirin.
conda activate shap-e
4. Pytorch’u yükleyin. Bir Nvidia grafik kartınız varsa, bu komutu kullanın.
conda install pytorch=1.13.0 torchvision pytorch-cuda=11.6 -c pytorch -c nvidia
Nvidia kartınız yoksa, CPU tabanlı bir kurulum yapmanız gerekir. Kurulum hızlı ama CPU ile gerçek 3B oluşturmayı işlemek benim deneyimime göre son derece yavaştı.
conda install pytorch torchvision torchaudio cpuonly -c pytorch
5. Pytorch’u oluşturun. Bu, işe yarayan bir kombinasyon bulmamın saatlerce sürdüğü alandır.
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
Bir cuda hatası alırsanız, çalıştırmayı deneyin sudo apt nvidia-cuda-dev’i kurun ve ardından işlemi tekrarlamak.
6. Jupyter Notebook’u Kurun Conda’yı kullanarak.
conda install -c anaconda jupyter
7. şekil-e’yi klonla repo
git clone https://github.com/openai/shap-e
Git, klonladığınız klasörün altında bir şekil-e klasörü oluşturacaktır.
8. Şekil-e klasörüne girinr ve kurulumu çalıştır pip kullanarak.
cd shap-e
pip install -e .
9. Bir Jupyter Notebook Başlatın.
jupyter notebook
10. Yazılımın size gösterdiği localhost URL’sine gidin. http://localhost:8888?token= ve bir belirteç olacaktır. Bir klasör ve dosya dizini göreceksiniz.
11. şekil-e/örneklere göz atın Ve üzerine çift tıklayın sample_text_to_3d.ipynb.
Farklı kod bölümleriyle bir not defteri açılacaktır.
12. Her bölümü vurgulayın Ve Çalıştır düğmesine tıklayınbir sonraki bölüme geçmeden önce tamamlanmasını bekliyor.
Bu işlemi ilk yaptığınızda biraz zaman alacaktır, çünkü birkaç büyük modeli yerel sürücünüze indirecektir. Her şey bittiğinde, tarayıcınızda bir köpekbalığının dört 3B modelini görmelisiniz. Örnekler klasöründe ayrıca dört adet .ply dosyası olacak ve bunları Paint 3D gibi 3B görüntüleme programlarında açabileceksiniz. Bunları ayrıca bir kullanarak STL dosyalarına dönüştürebilirsiniz. çevrimiçi dönüştürücü (yeni sekmede açılır).
İstemi değiştirmek ve tekrar denemek istiyorsanız. Tarayıcınızı yenileyin ve bilgi istemi bölümünde “köpekbalığı” ifadesini başka bir şeyle değiştirin. Ayrıca, boyutu 64’ten daha yüksek bir sayıya değiştirirseniz, daha yüksek çözünürlüklü bir görüntü elde edersiniz.
13. sample_image_to_3d.ipynb dosyasına çift tıklayın image-to-3d komut dosyasını deneyebilmeniz için örnekler klasörüne yeniden yerleştirin.
14. Her bölümü vurgulayın Ve çalıştıra tıkla.
Sonunda, varsayılan olarak, dört küçük corgis görüntüsü elde edeceksiniz.
Ancak, animasyonlu GIF’lerin yanı sıra PLY dosyalarının çıktısını alabilmesi için aşağıdaki kodu son not defteri bölümüne eklemenizi öneririm.
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. Görüntü konumunu değiştirin görüntüyü değiştirmek için 3. bölümde Ayrıca, toplu iş boyutunu 1 olarak değiştirmenizi öneririm, böylece yalnızca bir görüntü oluşturur. Boyutu 128 veya 256 olarak değiştirmek size daha yüksek çözünürlüklü bir görüntü verecektir.
16. Aşağıdaki python betiğini oluşturun Ve text-to-3d.py olarak kaydedin veya başka bir isim. Komut satırındaki metin istemlerine dayalı olarak PLY dosyaları oluşturmanıza olanak tanır.
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. Koşmak python text-to-3d.py Ve isteminizi girin program istediğinde
Bu size bir PLY çıktısı verir, ancak bir GIF vermez. Python’u biliyorsanız, onunla daha fazlasını yapmak için betiği değiştirebilirsiniz.