
Actualizo regularmente esta base de código. Envíe un problema si tiene alguna pregunta.
En nuestro documento, proponemos los mapas de atribución de atención de difusión (DAAM), un enfoque cruzado basado en la atención para interpretar la difusión estable. Consulte nuestra demostración: https://huggingface.co/spaces/tetrisd/diffusion-attentive- attribution-maps. Vea nuestra documentación, alojada por GitHub Pages, y nuestro cuaderno Colab, actualizado para V0.1.0.
Primero, instale Pytorch para su plataforma. Luego, instale DAAM con pip install daam , a menos que desee una versión editable de la biblioteca, en cuyo caso git clone https://github.com/castorini/daam && pip install -e daam . Finalmente, inicie sesión usando huggingface-cli login para obtener muchos modelos de difusión estables: necesitará obtener un token en Huggingface.co.
Simplemente ejecute daam-demo en una carcasa y navegue a http: // localhost: 8080. La misma demostración que la de Huggingface Spaces aparecerá.
Daam viene con un guión de generación simple para personas que desean probar rápidamente. Intenta correr
$ mkdir -p daam-test && cd daam-test
$ daam " A dog running across the field. "
$ ls
a.heat_map.png field.heat_map.png generation.pt output.png seed.txt
dog.heat_map.png running.heat_map.png prompt.txt Su directorio de trabajo actual ahora contendrá la imagen generada como output.png y un mapa DAAM para cada palabra, así como algunos datos auxiliares. Puede ver más opciones para daam ejecutando daam -h . Para usar la difusión estable XL como backend, ejecute daam --model xl-base-1.0 "Dog jumping" .
Importar y usar DAAM de la siguiente manera:
from daam import trace , set_seed
from diffusers import DiffusionPipeline
from matplotlib import pyplot as plt
import torch
model_id = 'stabilityai/stable-diffusion-xl-base-1.0'
device = 'cuda'
pipe = DiffusionPipeline . from_pretrained ( model_id , use_auth_token = True , torch_dtype = torch . float16 , use_safetensors = True , variant = 'fp16' )
pipe = pipe . to ( device )
prompt = 'A dog runs across the field'
gen = set_seed ( 0 ) # for reproducibility
with torch . no_grad ():
with trace ( pipe ) as tc :
out = pipe ( prompt , num_inference_steps = 50 , generator = gen )
heat_map = tc . compute_global_heat_map ()
heat_map = heat_map . compute_word_heat_map ( 'dog' )
heat_map . plot_overlay ( out . images [ 0 ])
plt . show ()También puede serializar y deserializar los mapas DAAM con bastante facilidad:
from daam import GenerationExperiment , trace
with trace ( pipe ) as tc :
pipe ( 'A dog and a cat' )
exp = tc . to_experiment ( 'experiment-dir' )
exp . save () # experiment-dir now contains all the data and heat maps
exp = GenerationExperiment . load ( 'experiment-dir' ) # load the experiment Continuaremos agregando documentos. Mientras tanto, consulte las clases de GenerationExperiment , GlobalHeatMap y DiffusionHeatMapHooker , así como los scripts de ejemplo daam/run/*.py . Puede descargar el conjunto de datos Coco-Gen del documento en http://ralphtang.com/coco-gen.tar.gz. Si hacer clic en el enlace no funciona en su navegador, copie y péguelo en una nueva pestaña, o use una utilidad CLI como wget .
DAAM-I2I, una extensión de DAAM a la atribución de imagen a imagen.
El video de Furkan al comenzar fácilmente con Daam.
El video de 1Littlecoder para una demostración de código y un cuaderno de colab de una versión anterior de DAAM.
@inproceedings{tang2023daam,
title = "What the {DAAM}: Interpreting Stable Diffusion Using Cross Attention",
author = "Tang, Raphael and
Liu, Linqing and
Pandey, Akshat and
Jiang, Zhiying and
Yang, Gefei and
Kumar, Karun and
Stenetorp, Pontus and
Lin, Jimmy and
Ture, Ferhan",
booktitle = "Proceedings of the 61st Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)",
year = "2023",
url = "https://aclanthology.org/2023.acl-long.310",
}