
Je met à jour régulièrement cette base de code. Veuillez soumettre un problème si vous avez des questions.
Dans notre article, nous proposons des cartes d'attribution attentive à diffusion (DAAM), une approche basée sur l'attention pour interpréter la diffusion stable. Consultez notre démo: https://huggingface.co/spaces/tetrisd/diffusion-attentive-attribution-maps. Consultez notre documentation, hébergée par GitHub Pages, et notre cahier Colab, mis à jour pour V0.1.0.
Tout d'abord, installez Pytorch pour votre plate-forme. Ensuite, installez DAAM avec pip install daam , sauf si vous voulez une version modifiable de la bibliothèque, auquel cas git clone https://github.com/castorini/daam && pip install -e daam . Enfin, connectez-vous à l'aide huggingface-cli login pour obtenir de nombreux modèles de diffusion stables - vous devrez obtenir un jeton sur HuggingFace.co.
Exécutez simplement daam-demo dans un shell et accédez à http: // localhost: 8080. La même démo que celle sur les espaces HuggingFace apparaîtra.
Daam est livré avec un simple script de génération pour les personnes qui veulent l'essayer rapidement. Essayez de courir
$ 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 Votre répertoire de travail actuel contiendra désormais l'image générée sous forme output.png et une carte DAAM pour chaque mot, ainsi que certaines données auxiliaires. Vous pouvez voir plus d'options pour daam en exécutant daam -h . Pour utiliser la diffusion stable XL comme backend, exécutez daam --model xl-base-1.0 "Dog jumping" .
Importer et utiliser DAAM comme suit:
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 ()Vous pouvez également sérialiser et désérialiser les cartes DAAM assez facilement:
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 Nous continuerons à ajouter des documents. En attendant, consultez les classes GenerationExperiment , GlobalHeatMap et DiffusionHeatMapHooker , ainsi que les scripts daam/run/*.py . Vous pouvez télécharger l'ensemble de données Coco-Gen à partir du journal à http://ralphtang.com/coco-ge.tar.gz. Si cliquer sur le lien ne fonctionne pas sur votre navigateur, copiez-le et collez-le dans un nouvel onglet ou utilisez un utilitaire CLI tel que wget .
DAAM-I2I, une extension de DAAM à l'attribution de l'image à l'image.
La vidéo de Furkan sur le début de Daam.
Vidéo de 1LittleCcoder pour une démonstration de code et cahier Colab d'une ancienne version 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",
}