Código de referencia
ImageBind : GitHub - facebookresearch/ImageBind: ImageBind One Embedding Space para vincularlos a todos
ImageBind + stable-diffusion-2-1-unclip:GitHub - Zeqiang-Lai/Anything2Image: Genere imágenes desde cualquier cosa con ImageBind y Stable Diffusion
El recientemente popular ImageBind aprende un único espacio de representación compartido utilizando datos de emparejamiento de imágenes de múltiples tipos (profundidad, texto, mapa de calor, audio, IMU). ImageBind no requiere conjuntos de datos donde todas las modalidades aparecen al mismo tiempo. Utiliza las propiedades de enlace de las imágenes. Siempre que la incrustación de cada modal esté alineada con la incrustación de la imagen, todas las modalidades se pueden alinear rápidamente.
Pero a juzgar por el código de código abierto de ImageBind, el autor solo abrió la parte codificada (mapeando datos de diferentes modalidades en el espacio de incrustación alineado) y no pudo implementar directamente funciones como text2img y audio2img. Para lograr las funciones anteriores, los grandes combinaron el " espacio latente unificado " provisto por ImageBind con el decodificador en difusión estable. Si está interesado, puede buscar Anything2Image o BindDiffusion en Github . Aquí me refiero al código de ImageBind y Anything2Image, y reproduzco el audio+img a img, texto a img y otras funciones.La biblioteca dependiente de la operación del código puede referirse a ImageBind (pip install -r requirements.txt), más difusores (pip instalar difusores).
ejemplo de código
import torch
from diffusers import StableUnCLIPImg2ImgPipeline
import sys
sys.path.append("..")
from models import data
from models import imagebind_model
from models.imagebind_model import ModalityType
model = imagebind_model.imagebind_huge(pretrained=True).to("cuda").eval()
pipe = StableUnCLIPImg2ImgPipeline.from_pretrained("stabilityai/stable-diffusion-2-1-unclip", torch_dtype=torch.float16).to("cuda")
with torch.no_grad():
## image
image_path = ["/kaxier01/projects/GPT/ImageBind/assets/image/bird.png"]
embeddings = model.forward({ModalityType.VISION: data.load_and_transform_vision_data(image_path, "cuda")}, normalize=False)
img_embeddings = embeddings[ModalityType.VISION]
## audio
audio_path = ["/kaxier01/projects/GPT/ImageBind/assets/wav/wave.wav"]
embeddings = model.forward({ModalityType.AUDIO: data.load_and_transform_audio_data(audio_path, "cuda")}, normalize=True)
audio_embeddings = embeddings[ModalityType.AUDIO]
embeddings = (img_embeddings + audio_embeddings) / 2
images = pipe(image_embeds=embeddings.half()).images
images[0].save("/kaxier01/projects/GPT/ImageBind/results/bird_wave_audioimg2img.png")
Problemas encontrados y soluciones
El problema encontrado en esta área es principalmente el problema del tiempo de espera de descarga del modelo, la solución es la siguiente:
método uno:
Vaya al sitio web oficial ( Hugging Face – The AI community building the future. ) para buscar el modelo y descargarlo (lo mejor es descargar todos los archivos), como
Después de la descarga, simplemente especifique la ruta del modelo en el código, como
# 模型路径: "/kaxier01/projects/GPT/ImageBind/checkpoints/stable-diffusion-2-1-unclip"
pipe = StableUnCLIPImg2ImgPipeline.from_pretrained("/kaxier01/projects/GPT/ImageBind/checkpoints/stable-diffusion-2-1-unclip", torch_dtype=torch.float16).to("cuda")
Método dos:
descargar git-lfs
apt-get update
apt-get install git-lfs
git lfs install
Después de descargar e instalar, puede usar este comando para descargar el modelo, como
git lfs clone https://huggingface.co/stabilityai/stable-diffusion-2-1-unclip
Visualización de resultados
térmica2img
aporte
producción
audio+img2img
aporte
Voz (wave.wav) + imagen
producción
texto2img
aporte
'a photo of an astronaut riding a horse on mars'