Este repositório contém a base de código para modelos de consistência, implementados usando PyTorch para conduzir experimentos em grande escala em ImageNet-64, LSUN Bedroom-256 e LSUN Cat-256. Baseamos nosso repositório em openai/guided-diffusion, que foi inicialmente lançado sob a licença do MIT. Nossas modificações permitiram suporte para destilação de consistência, treinamento de consistência, bem como vários algoritmos de amostragem e edição discutidos no artigo.
O repositório para experimentos CIFAR-10 está em JAX e pode ser encontrado em openai/consistency_models_cifar10.
Lançamos pontos de verificação para os principais modelos do artigo. Antes de usar esses modelos, revise o cartão do modelo correspondente para compreender o uso pretendido e as limitações desses modelos.
Aqui estão os links de download para cada ponto de verificação do modelo:
EDM no ImageNet-64: edm_imagenet64_ema.pt
CD no ImageNet-64 com métrica l2: cd_imagenet64_l2.pt
CD no ImageNet-64 com métrica LPIPS: cd_imagenet64_lpips.pt
CT no ImageNet-64: ct_imagenet64.pt
EDM no LSUN Quarto-256: edm_bedroom256_ema.pt
CD no LSUN Bedroom-256 com métrica l2: cd_bedroom256_l2.pt
CD no LSUN Bedroom-256 com métrica LPIPS: cd_bedroom256_lpips.pt
CT no LSUN Quarto-256: ct_bedroom256.pt
EDM no LSUN Cat-256: edm_cat256_ema.pt
CD em LSUN Cat-256 com métrica l2: cd_cat256_l2.pt
CD em LSUN Cat-256 com métrica LPIPS: cd_cat256_lpips.pt
CT na LSUN Cat-256: ct_cat256.pt
Para instalar todos os pacotes nesta base de código junto com suas dependências, execute
pip instalar -e.
Para instalar com Docker, execute os seguintes comandos:
cd docker && make build && make run
Fornecemos exemplos de treinamento EDM, destilação de consistência, treinamento de consistência, geração de etapa única e geração de várias etapas em scripts/launch.sh.
Para comparar diferentes modelos generativos, usamos FID, Precision, Recall e Inception Score. Todas essas métricas podem ser calculadas usando lotes de amostras armazenadas em arquivos .npz
(numpy). Pode-se avaliar amostras com cm/evaluations/evaluator.py da mesma forma descrita em openai/guided-diffusion, com lotes de conjuntos de dados de referência fornecidos nele.
Modelos de consistência são suportados em ? difusores por meio da classe ConsistencyModelPipeline
. Abaixo fornecemos um exemplo:
importar tocha de difusores importar ConsistencyModelPipelinedevice = "cuda"# Carregar o ponto de verificação cd_imagenet64_l2.model_id_or_path = "openai/diffusers-cd_imagenet64_l2"pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)pipe.to(device)# Onestep Samplingimage = pipe(num_inference_steps=1).images[0]image.save("consistency_model_onestep_sample.png")# Amostragem em uma etapa, geração de imagem condicional de classe# Etiqueta de classe ImageNet-64 145 corresponde a king penguinsclass_id = 145class_id = torch.tensor(class_id, dtype=torch.long)image = pipe(num_inference_steps=1, class_labels=class_id).images[0]image.save("consistency_model_onestep_sample_penguin.png")# Amostragem em várias etapas, geração de imagem condicional de classe# Timesteps podem ser especificados explicitamente; os intervalos de tempo específicos abaixo são do repositório original do Github.# https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L77image = pipe(timesteps=[22, 0], class_labels=class_id) .images[0]image.save("consistency_model_multistep_sample_penguin.png")
Você pode acelerar ainda mais o processo de inferência usando torch.compile()
em pipe.unet
(suportado apenas no PyTorch 2.0). Para mais detalhes, verifique a documentação oficial. Este apoio foi contribuído para ? difusores por dg845 e ayushtues.
Se você achar este método e/ou código útil, considere citar
@artigo{song2023consistency, title={Modelos de consistência}, autor={Song, Yang e Dhariwal, Prafulla e Chen, Mark e Sutskever, Ilya}, diário={arXiv preprint arXiv:2303.01469}, ano={2023}, }