Récemment, nous avons vu des modèles d’IA qui produisent du texte en vidéo détaillé ou utilisent un chatbot sur votre téléphone. Maintenant, OpenAI, la société derrière ChatGPT, a introduit Shap-E, un modèle qui génère des objets 3D que vous pouvez ouvrir dans Microsoft Paint 3D ou même convertir en un fichier STL que vous pouvez sortir sur l’une des meilleures imprimantes 3D.
Le modèle Shap-E est disponible gratuitement sur GitHub (s’ouvre dans un nouvel onglet) et il s’exécute localement sur votre PC. Une fois que tous les fichiers et modèles sont téléchargés, il n’est pas nécessaire de faire un ping sur Internet. Et le meilleur de tous, il ne nécessite pas de clé API OpenAI, vous ne serez donc pas facturé pour son utilisation.
C’est un énorme défi de faire fonctionner Shap-E. OpenAI ne fournit presque aucune instruction, vous indiquant simplement d’utiliser la commande Python pip pour l’installer. Cependant, la société omet de mentionner les dépendances dont vous avez besoin pour le faire fonctionner et que bon nombre des dernières versions de celles-ci ne fonctionneront tout simplement pas. J’ai passé plus de 8 heures à le faire fonctionner et je partagerai ci-dessous ce qui a fonctionné pour moi.
Une fois que j’ai finalement installé Shap-E, j’ai trouvé que le moyen par défaut d’y accéder est via Jupyter Notebook, qui vous permet de visualiser et d’exécuter l’exemple de code en petits morceaux pour voir ce qu’il fait. Il existe trois exemples de cahiers qui illustrent « text-to-3d » (en utilisant une invite de texte), « image-to-3d » (transformer une image 2D en un objet 3D) et « encode_model » qui prend un modèle 3D existant et utilise Blender (que vous devez installer) pour le transformer en quelque chose d’autre et le restituer. J’ai testé les deux premiers d’entre eux car le troisième (en utilisant Blender avec des objets 3D existants) dépassait mes compétences.
À quoi ressemble Shap-E Text-to-3D
Comme tant de modèles d’IA que nous testons ces jours-ci, Shap-E est plein de potentiel mais la sortie actuelle est au mieux moyenne. J’ai essayé le texte en vidéo avec quelques invites différentes. Dans la plupart des cas, j’ai reçu les objets que j’avais demandés, mais ils étaient en basse résolution et manquaient de détails clés.
Lorsque j’ai utilisé le notebook sample_text_to_3d, j’ai obtenu deux types de sortie : des GIF animés en couleur qui s’affichaient dans mon navigateur et des fichiers PLY monochromes que je pouvais ouvrir plus tard dans un programme comme Paint 3D. Les GIF animés étaient toujours bien meilleurs que les fichiers PLY.
L’invite par défaut de « un requin » avait l’air décente en tant que GIF animé, mais lorsque j’ai ouvert le PLY dans Paint 3D, cela semblait faire défaut. Par défaut, le bloc-notes vous donne quatre GIF animés de 64 x 64, mais j’ai modifié le code pour augmenter la résolution à 256 x 256 en un seul GIF (puisque les quatre GIF se ressemblent).
Quand j’ai demandé quelque chose qu’OpenAI avait comme exemple, « un avion qui ressemble à une banane », j’ai obtenu un assez bon GIF, en particulier lorsque j’ai augmenté la résolution à 256. Le fichier PLY, cependant, a beaucoup exposé de trous dans les ailes.
Quand j’ai demandé un Minecraft plante grimpante, j’ai obtenu quelque chose qui était un GIF correctement coloré en vert et noir et un PLY qui avait la forme de base d’une plante grimpante. Cependant, les vrais fans de Minecraft ne seraient pas satisfaits de cela et la forme était trop compliquée pour l’impression 3D (si je l’avais convertie en STL).
Image Shap-E en objet 3D
J’ai également essayé le script image-to-3d qui peut prendre un fichier image 2D existant et le transformer en un objet fichier 3D PLY. Un exemple d’illustration d’un chien corgi est devenu un objet décent à basse résolution qu’il a produit sous la forme d’un GIF animé et rotatif qui avait moins de détails. Ci-dessous, l’image originale est à gauche et le GIF est à droite. Vous pouvez voir que les yeux semblent manquer.
En modifiant le code, j’ai également pu obtenir un fichier PLY 3D que je pouvais ouvrir dans Paint 3D. Voilà à quoi ça ressemblait.
J’ai également essayé d’alimenter le script d’image en 3D avec certaines de mes propres images, y compris une photo d’un SSD, qui a l’air cassé et un PNG transparent du logo Tom’s Hardware, qui n’a pas l’air beaucoup mieux.
Cependant, il est probable que si j’avais un PNG 2D qui avait l’air un peu plus 3D (comme le fait le corgi), j’obtiendrais de meilleurs résultats.
Performances de Shap-E
Que je traite du texte ou des images en 3D, Shap-E nécessitait une tonne de ressources système. Sur mon ordinateur personnel, avec un GPU RTX 3080 et un processeur Ryzen 9 5900X, il a fallu environ cinq minutes pour effectuer un rendu. Sur un Asus ROG Strix Scar 18 avec un GPU pour ordinateur portable RTX 4090 et un Intel Core i9-13980HX, cela a pris deux à trois minutes.
Cependant, lorsque j’ai essayé de faire du texte en 3D sur mon ancien ordinateur portable, avec un processeur Intel 8e génération U et des graphiques intégrés, il n’avait terminé que 3% d’un rendu après une heure. En bref, si vous allez utiliser Shap-E, assurez-vous d’avoir un GPU Nvidia (Shap-E ne prend pas en charge d’autres marques de GPU. Les options sont CUDA et CPU.). Sinon, cela prendra trop de temps.
Je dois noter que la première fois que vous exécutez l’un des scripts, il faudra télécharger les modèles, qui font 2 à 3 Go et peuvent prendre plusieurs minutes à transférer.
Comment installer et exécuter Shap-E sur un PC
OpenAI a publié un référentiel Shap-E sur GitHub, ainsi que des instructions sur la façon de l’exécuter. J’ai tenté d’installer et d’exécuter le logiciel sous Windows, en utilisant Miniconda pour créer un environnement Python dédié. Cependant, j’ai continué à rencontrer des problèmes, en particulier parce que je ne pouvais pas installer Pytorch3D, une bibliothèque requise.
Cependant, lorsque j’ai décidé d’utiliser WSL2 (Windows Subsytem for Linux), j’ai pu le faire fonctionner sans problème. Ainsi, les instructions ci-dessous fonctionneront soit en Linux natif, soit en WSL2 sous Windows. Je les ai testés dans WSL2.
1. Installer Miniconda ou Anaconda sous Linux si vous ne l’avez pas déjà. Vous pouvez trouver un téléchargement et des instructions sur le site Conda (s’ouvre dans un nouvel onglet).
2. Créer un environnement Conda appelé shape-e avec Python 3.9 installé (d’autres versions de Python peuvent fonctionner).
conda create -n shap-e python=3.9
3. Activer l’environnement shape-e.
conda activate shap-e
4. Installer Pytorch. Si vous avez une carte graphique Nvidia, utilisez cette commande.
conda install pytorch=1.13.0 torchvision pytorch-cuda=11.6 -c pytorch -c nvidia
Si vous n’avez pas de carte Nvidia, vous devrez effectuer une installation basée sur le processeur. L’installation est rapide mais le traitement de la génération 3D réelle avec le processeur a été extrêmement lent d’après mon expérience.
conda install pytorch torchvision torchaudio cpuonly -c pytorch
5. Construisez Pytorche. C’est le domaine où il m’a fallu des heures et des heures pour trouver une combinaison qui fonctionnait.
pip install "git+https://github.com/facebookresearch/pytorch3d.git"
Si vous obtenez une erreur cuda, essayez d’exécuter sudo apt installer nvidia-cuda-dev puis en répétant le processus.
6. Installer le bloc-notes Jupyter à l’aide de Conda.
conda install -c anaconda jupyter
7. Cloner la forme dépôt.
git clone https://github.com/openai/shap-e
Git créera un dossier shape-e sous celui à partir duquel vous l’avez cloné.
8. Entrez dans le dossier de la former et lancer l’installation en utilisant pip.
cd shap-e
pip install -e .
9. Lancer un bloc-notes Jupyter.
jupyter notebook
dix. Accédez à l’URL localhost que le logiciel vous montre. Ce sera http://localhost:8888?token= et un jeton. Vous verrez un répertoire de dossiers et de fichiers.
11. Naviguez jusqu’à forme/exemples et double-cliquer sur sample_text_to_3d.ipynb.
Un cahier s’ouvrira avec différentes sections de code.
12. Mettez en surbrillance chaque section et cliquez sur le bouton Exécuteren attendant qu’il soit terminé avant de passer à la section suivante.
Ce processus prendra un certain temps la première fois que vous le parcourrez, car il téléchargera plusieurs modèles volumineux sur votre disque local. Quand tout est fait, vous devriez voir quatre modèles 3D d’un requin dans votre navigateur. Il y aura également quatre fichiers .ply dans le dossier des exemples et vous pourrez les ouvrir dans des programmes d’imagerie 3D tels que Paint 3D. Vous pouvez également les convertir en fichiers STL à l’aide d’un convertisseur en ligne (s’ouvre dans un nouvel onglet).
Si vous souhaitez modifier l’invite et réessayez. Actualisez votre navigateur et remplacez « un requin » par autre chose dans la section d’invite. De plus, si vous modifiez la taille de 64 à un nombre supérieur, vous obtenez une image de résolution supérieure.
13. Double-cliquez sur sample_image_to_3d.ipynb dans le dossier des exemples à nouveau afin que vous puissiez essayer le script image-to-3d.
14. Mettez en surbrillance chaque section et cliquez sur Exécuter.
Vous vous retrouverez, par défaut, avec quatre petites images de corgis.
Cependant, je recommande d’ajouter le code suivant à la dernière section du bloc-notes afin qu’il produise des fichiers PLY ainsi que des GIF animés.
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. Modifier l’emplacement de l’image dans la section 3 pour changer l’image. De plus, je recommande de changer le batch_size à 1 pour qu’il ne fasse qu’une seule image. Changer la taille en 128 ou 256 vous donnera une image de plus haute résolution.
16. Créez le script Python suivant et enregistrez-le sous text-to-3d.py ou un autre nom. Il vous permettra de générer des fichiers PLY basés sur des invites de texte sur la ligne de commande.
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. Courir python text-to-3d.py et entrez votre invite lorsque le programme le demande.
Cela vous donnera une sortie PLY, mais pas un GIF. Si vous connaissez Python, vous pouvez modifier le script pour en faire plus.