Kürzlich haben wir KI-Modelle gesehen, die detaillierte Text-zu-Video-Dateien erstellen oder einen Chatbot auf Ihrem Telefon ausführen. Jetzt hat OpenAI, das Unternehmen hinter ChatGPT, Shap-E vorgestellt, ein Modell, das 3D-Objekte generiert, die Sie in Microsoft Paint 3D öffnen oder sogar in eine STL-Datei konvertieren können, die Sie auf einem der besten 3D-Drucker ausgeben können.
Das Shap-E-Modell ist erhältlich für kostenlos auf GitHub (öffnet in neuem Tab) und es läuft lokal auf Ihrem PC. Sobald alle Dateien und Modelle heruntergeladen sind, muss das Internet nicht mehr angepingt werden. Und das Beste ist, dass kein OpenAI-API-Schlüssel erforderlich ist, sodass Ihnen keine Kosten für die Verwendung in Rechnung gestellt werden.
Es ist eine große Herausforderung, Shap-E tatsächlich zum Laufen zu bringen. OpenAI bietet fast keine Anweisungen, sondern fordert Sie lediglich auf, den Python-Befehl pip zu verwenden, um es zu installieren. Das Unternehmen erwähnt jedoch nicht die Abhängigkeiten, die Sie benötigen, damit es funktioniert, und dass viele der neuesten Versionen davon einfach nicht funktionieren. Ich habe mehr als 8 Stunden damit verbracht, dies zum Laufen zu bringen, und ich werde unten mitteilen, was für mich funktioniert hat.
Als ich schließlich Shap-E installiert hatte, stellte ich fest, dass der Zugriff standardmäßig über Jupyter Notebook erfolgt, mit dem Sie den Beispielcode in kleinen Abschnitten anzeigen und ausführen können, um zu sehen, was er tut. Es gibt drei Beispiel-Notebooks, die „text-to-3d“ (unter Verwendung einer Texteingabeaufforderung), „image-to-3d“ (ein 2D-Bild in ein 3D-Objekt umwandeln) und „encode_model“, das ein vorhandenes 3D-Modell aufnimmt und verwendet, demonstrieren Blender (der installiert sein muss), um ihn in etwas anderes umzuwandeln und neu zu rendern. Ich habe die ersten beiden davon getestet, da die dritte (die Verwendung von Blender mit vorhandenen 3D-Objekten) meine Fähigkeiten überstieg.
So sieht Shap-E Text-to-3D aus
Wie so viele KI-Modelle, die wir heutzutage testen, ist Shap-E voller Potenzial, aber die aktuelle Leistung ist bestenfalls mittelmäßig. Ich habe das Text-zu-Video mit ein paar verschiedenen Eingabeaufforderungen ausprobiert. In den meisten Fällen habe ich die gewünschten Objekte erhalten, aber sie hatten eine niedrige Auflösung und es fehlten wichtige Details.
Als ich das sample_text_to_3d-Notizbuch verwendete, erhielt ich zwei Arten von Ausgaben: farbig animierte GIFs, die in meinem Browser angezeigt wurden, und monochrome PLY-Dateien, die ich später in einem Programm wie Paint 3D öffnen konnte. Die animierten GIFs sahen immer viel besser aus als die PLY-Dateien.
Die Standard-Eingabeaufforderung „ein Hai“ sah als animiertes GIF anständig aus, aber als ich das PLY in Paint 3D öffnete, schien es zu fehlen. Standardmäßig gibt Ihnen das Notebook vier animierte GIFs mit einer Größe von 64 x 64, aber ich habe den Code geändert, um die Auflösung auf 256 x 256 zu erhöhen, die als einzelnes GIF ausgegeben wird (da alle vier GIFs gleich aussehen).
Als ich nach etwas fragte, das OpenAI als eines seiner Beispiele hatte, „ein Flugzeug, das wie eine Banane aussieht“, bekam ich ein ziemlich gutes GIF, besonders als ich die Auflösung auf 256 erhöhte. Die PLY-Datei zeigte jedoch viel von Löchern in den Flügeln.
Als ich nach einem fragte Minecraft Schlingpflanze, ich bekam etwas, ein GIF, das richtig grün und schwarz gefärbt war, und ein PLY, das die Grundform einer Schlingpflanze hatte. Allerdings würden echte Minecraft-Fans damit nicht zufrieden sein und es war eine zu chaotische Form für den 3D-Druck (wenn ich es in eine STL konvertiert hätte).
Shape-E-Bild zu 3D-Objekt
Ich habe auch das Image-to-3D-Skript ausprobiert, das eine vorhandene 2D-Bilddatei in ein 3D-PLY-Dateiobjekt umwandeln kann. Eine Beispielillustration eines Corgi-Hundes wurde zu einem anständigen Objekt mit niedriger Auflösung, das als rotierendes, animiertes GIF mit weniger Details ausgegeben wurde. Unten ist das Originalbild links und das GIF rechts. Sie können sehen, dass die Augen zu fehlen scheinen.
Durch Ändern des Codes konnte ich auch eine PLY 3D-Datei ausgeben, die ich in Paint 3D öffnen konnte. So sah es aus.
Ich habe auch versucht, das Image-to-3D-Skript mit einigen meiner eigenen Bilder zu füttern, darunter ein Foto einer SSD, die kaputt aussah, und ein transparentes PNG des Tom’s Hardware-Logos, das nicht viel besser aussah.
Es ist jedoch wahrscheinlich, dass ich bessere Ergebnisse erzielen würde, wenn ich ein 2D-PNG hätte, das etwas mehr 3D-artig aussieht (wie der Corgi).
Leistung von Shap-E
Egal, ob ich Text oder Bild in 3D verarbeitete, Shap-E benötigte eine Menge Systemressourcen. Auf meinem Home-Desktop mit einer RTX 3080-GPU und einer Ryzen 9 5900X-CPU dauerte es etwa fünf Minuten, um ein Rendering abzuschließen. Auf einem Asus ROG Strix Scar 18 mit einer RTX 4090-Laptop-GPU und einem Intel Core i9-13980HX dauerte es zwei bis drei Minuten.
Als ich jedoch versuchte, Text-to-3D auf meinem alten Laptop mit einer Intel-CPU der 8. Generation der U-Serie und integrierter Grafik zu erstellen, waren nach einer Stunde nur 3 Prozent eines Renderings abgeschlossen. Kurz gesagt, wenn Sie Shap-E verwenden möchten, stellen Sie sicher, dass Sie eine Nvidia-GPU haben (Shap-E unterstützt keine anderen GPU-Marken. Die Optionen sind CUDA und CPU.). Sonst dauert es einfach zu lange.
Ich sollte beachten, dass beim ersten Ausführen eines der Skripts die Modelle heruntergeladen werden müssen, die 2 bis 3 GB groß sind und deren Übertragung mehrere Minuten dauern kann.
Wie man Shap-E auf einem PC installiert und ausführt
OpenAI hat ein Shap-E-Repository veröffentlicht zu GitHub, zusammen mit einigen Anweisungen zur Ausführung. Ich habe versucht, die Software unter Windows zu installieren und auszuführen, indem ich mit Miniconda eine dedizierte Python-Umgebung erstellt habe. Ich stieß jedoch immer wieder auf Probleme, insbesondere weil ich Pytorch3D, eine erforderliche Bibliothek, nicht zur Installation bringen konnte.
Als ich mich jedoch entschied, WSL2 (Windows Subsytem for Linux) zu verwenden, konnte ich es mit wenigen Problemen zum Laufen bringen. Daher funktionieren die folgenden Anweisungen entweder unter nativem Linux oder in WSL2 unter Windows. Ich habe sie in WSL2 getestet.
1. Miniconda installieren oder Anaconda unter Linux, falls Sie es noch nicht haben. Einen Download und eine Anleitung finden Sie auf der Conda-Site (öffnet in neuem Tab).
2. Erstellen Sie eine Conda-Umgebung namens shap-e mit Python 3.9 installiert (andere Versionen von Python funktionieren möglicherweise).
conda create -n shap-e python=3.9
3. Aktivieren Sie die shape-e-Umgebung.
conda activate shap-e
4. Pytorch installieren. Wenn Sie eine Nvidia-Grafikkarte haben, verwenden Sie diesen Befehl.
conda install pytorch=1.13.0 torchvision pytorch-cuda=11.6 -c pytorch -c nvidia
Wenn Sie keine Nvidia-Karte haben, müssen Sie eine CPU-basierte Installation durchführen. Die Installation ist schnell, aber die Verarbeitung der eigentlichen 3D-Generierung mit der CPU war meiner Erfahrung nach extrem langsam.
conda install pytorch torchvision torchaudio cpuonly -c pytorch
5. Pytorch bauen. Dies ist der Bereich, in dem ich Stunden um Stunden gebraucht habe, um eine Kombination zu finden, die funktioniert.
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
Wenn Sie einen cuda-Fehler erhalten, versuchen Sie es auszuführen sudo apt install nvidia-cuda-dev und dann den Vorgang wiederholen.
6. Installieren Sie Jupyter Notebook mit Conda.
conda install -c anaconda jupyter
7. Klonen Sie das Shape-e Repo.
git clone https://github.com/openai/shap-e
Git erstellt einen shape-e-Ordner unterhalb des Ordners, aus dem Sie ihn geklont haben.
8. Geben Sie die Form-e-Falte einr und Führen Sie die Installation aus mit Pip.
cd shap-e
pip install -e .
9. Starten Sie ein Jupyter-Notebook.
jupyter notebook
10. Navigieren Sie zur localhost-URL, die Ihnen die Software anzeigt. Es wird http://localhost:8888?token= und ein Token sein. Sie sehen ein Verzeichnis mit Ordnern und Dateien.
11. Navigieren Sie zu shape-e/examples Und doppelklicken Sie auf sample_text_to_3d.ipynb.
Es öffnet sich ein Notizbuch mit verschiedenen Codeabschnitten.
12. Markieren Sie jeden Abschnitt Und Klicken Sie auf die Schaltfläche Ausführenwarten Sie, bis es abgeschlossen ist, bevor Sie mit dem nächsten Abschnitt fortfahren.
Dieser Vorgang wird beim ersten Durchlaufen eine Weile dauern, da mehrere große Modelle auf Ihr lokales Laufwerk heruntergeladen werden. Wenn alles fertig ist, sollten Sie vier 3D-Modelle eines Hais in Ihrem Browser sehen. Es gibt auch vier .ply-Dateien im Beispielordner, und Sie können diese in 3D-Bildbearbeitungsprogrammen wie Paint 3D öffnen. Sie können sie auch mit einer in STL-Dateien konvertieren Online-Konverter (öffnet in neuem Tab).
Wenn Sie die Eingabeaufforderung ändern und erneut versuchen möchten. Aktualisieren Sie Ihren Browser und ändern Sie „einen Hai“ im Eingabeaufforderungsabschnitt in etwas anderes. Auch wenn Sie die Größe von 64 auf eine höhere Zahl ändern, erhalten Sie ein Bild mit höherer Auflösung.
13. Doppelklicken Sie auf sample_image_to_3d.ipynb im Beispielordner erneut, damit Sie das Image-to-3D-Skript ausprobieren können.
14. Markieren Sie jeden Abschnitt Und Klicken Sie auf Ausführen.
Am Ende erhalten Sie standardmäßig vier kleine Bilder von Corgis.
Ich empfehle jedoch, den folgenden Code zum letzten Notebook-Abschnitt hinzuzufügen, damit sowohl PLY-Dateien als auch animierte GIFs ausgegeben werden.
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. Ändern Sie den Bildspeicherort in Abschnitt 3, um das Bild zu ändern. Außerdem empfehle ich, die batch_size auf 1 zu ändern, damit nur ein Bild erstellt wird. Wenn Sie die Größe auf 128 oder 256 ändern, erhalten Sie ein Bild mit höherer Auflösung.
16. Erstellen Sie das folgende Python-Skript Und Speichern Sie es als text-to-3d.py oder ein anderer Name. Es ermöglicht Ihnen, PLY-Dateien basierend auf Texteingabeaufforderungen in der Befehlszeile zu generieren.
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. Laufen python text-to-3d.py Und Geben Sie Ihre Eingabeaufforderung ein wenn das Programm danach fragt.
Dadurch erhalten Sie eine PLY-Ausgabe, aber kein GIF. Wenn Sie sich mit Python auskennen, können Sie das Skript ändern, um mehr damit zu tun.