Introdução geral
A Sana é uma estrutura eficiente de geração de imagens de alta resolução desenvolvida no NVIDIA Labs que gera imagens com resolução de até 4096 × 4096 em segundos. A Sana usa um transformador de difusão linear e uma tecnologia de codificação automática de compactação profunda para melhorar drasticamente a velocidade e a qualidade da geração de imagens, reduzindo a necessidade de recursos computacionais. A estrutura suporta a execução em GPUs comuns de laptops para a criação de conteúdo de baixo custo.
Lista de funções
- Geração de imagens de alta resoluçãoSuporte à geração de imagens com resolução de até 4096 × 4096.
- conversor de difusão linearR: Aumento da eficiência da geração de imagens de alta resolução usando um mecanismo de atenção linear.
- Autocodificador de compressão profundaCompressão de imagens: comprime as imagens em até 32 vezes, reduzindo o número de possíveis marcadores e melhorando a eficiência do treinamento e da geração.
- Conversão de texto em imagemAlinhamento aprimorado de imagem a texto por meio de codificador de texto somente decodificador.
- Treinamento e amostragem eficientesO Flow-DPM-Solver é usado para reduzir as etapas de amostragem e acelerar a convergência.
- Implementação de baixo custoSuporte para execução em GPUs de laptop de 16 GB e geração de imagens com resolução de 1024 x 1024 em menos de 1 segundo.
Usando a Ajuda
Processo de instalação
- Certifique-se de que a versão do Python seja >= 3.10.0, recomendando-se o Anaconda ou o Miniconda.
- Instale a versão do PyTorch >= 2.0.1+cu12.1.
- Clonagem do depósito da Sana:
git clone https://github.com/NVlabs/Sana.git cd Sana
- Execute o script de configuração do ambiente:
. /environment_setup.sh sana
ou conforme
environment_setup.sh
Instale cada componente passo a passo, conforme descrito em
Uso
Requisitos de hardware
- O modelo 0.6B requer 9 GB de VRAM e o modelo 1.6B requer 12 GB de VRAM. A versão quantificada exigirá menos de 8 GB de memória de vídeo para inferência.
Início rápido
- Inicie a demonstração on-line oficial usando o Gradio:
DEMO_PORT=15432 \ python app/app_sana.py \ --config=configs/sana_config/1024ms/Sana_1600M_img1024.yaml \ ---model_path=hf://Efficient-Large-Model/Sana_1600M_1024px/checkpoints/Sana_1600M_1024px.pth
- Execute o código de inferência para gerar uma imagem:
importar torch from app.sana_pipeline import SanaPipeline from torchvision.utils import save_image device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") generator = torch.Generator(device=device).manual_seed(42) sana = SanaPipeline("configs/sana_config/1024ms/Sana_1600M_img1024.yaml") sana.from_pretrained("hf://Efficient-Large-Model/Sana_1600M_1024px/checkpoints/Sana_1600M_1024px.pth") prompt = 'um gato cyberpunk com uma placa de neon que diz "Sana"' image = sana(prompt=prompt, height=1024, width=1024, guidance_scale=5.0, pag_guidance_scale=2.0, num_inference_steps=18, generator= generator) save_image(image, 'output/sana.png', nrow=1, normalise=True, value_range=(-1, 1))
Modelos de treinamento
- Prepare o conjunto de dados no seguinte formato:
asset/example_data AAA.txt AAA.png ├── BCC.txt ├─── BCC.png └── CCC.txt
- Iniciar o treinamento:
bash train_scripts/train.sh \ configs/sana_config/512ms/sana_600M_img512.yaml \ --data.data_dir="asset/example_data" \ --data.type=SanaImgDataset \ ---model.multi_scale=false \ \ ---train.train_batch_size=32