
Eu atualizo regularmente esta base de código. Envie um problema se tiver alguma dúvida.
Em nosso artigo, propomos mapas de atribuição atenciosa por difusão (DAAM), uma abordagem cruzada baseada em atenção para interpretar a difusão estável. Confira nossa demonstração: https://huggingface.co/spaces/tetrisd/diffusion-attive-attribution-maps. Consulte nossa documentação, hospedada por páginas do Github, e nosso notebook Colab, atualizado para v0.1.0.
Primeiro, instale o Pytorch para sua plataforma. Em seguida, instale o DAAM com pip install daam , a menos que você queira uma versão editável da biblioteca; nesse caso, o git clone https://github.com/castorini/daam && pip install -e daam . Por fim, login usando huggingface-cli login para obter muitos modelos de difusão estável-você precisará obter um token no huggingface.co.
Simplesmente execute daam-demo em uma concha e navegue para http: // localhost: 8080. A mesma demonstração que a Hugging Space Spaces aparecerá.
Daam vem com um script de geração simples para pessoas que desejam experimentar rapidamente. Tente 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 Seu diretório de trabalho atual agora conterá a imagem gerada como output.png e um mapa daam para cada palavra, bem como alguns dados auxiliares. Você pode ver mais opções para daam executando daam -h . Para usar a difusão estável XL como back-end, execute daam --model xl-base-1.0 "Dog jumping" .
Importar e usar Daam da seguinte maneira:
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 ()Você também pode serializar e desserializar os mapas daam facilmente:
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 adicionando documentos. Enquanto isso, consulte as classes GenerationExperiment , GlobalHeatMap e DiffusionHeatMapHooker , bem como os scripts daam/run/*.py Você pode baixar o conjunto de dados Coco-Gen do artigo em http://ralphtang.com/coco-gen.tar.gz. Se clicar no link não funcionar no seu navegador, copie e cole -o em uma nova guia ou use um utilitário da CLI, como wget .
Daam-i2i, uma extensão de daam para atribuição de imagem a imagem.
O vídeo de Furkan sobre o início de Daam.
O vídeo do 1Littlecoder para uma demonstração de código e um notebook colab de uma versão mais antiga do 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",
}