

As imagens são compactadas para velocidade de carregamento.
Ctrlora: uma estrutura extensível e eficiente para geração de imagem controlável
Yifeng Xu 1,2 , Zhenliang He 1 , Shiguang Shan 1,2 , Xilin Chen 1,2
1 Laboratório -chave de segurança da IA, Instituto de Tecnologia de Computação, CAS, China
2 Academia de Ciências da Universidade de Chinesa, China

Primeiro, treinamos uma rede de controle base, juntamente com os Loras específicos da condição nas condições básicas com um conjunto de dados em larga escala. Em seguida, nossa rede de controle base pode ser adaptada com eficiência a novas condições por novos loras com apenas 1.000 imagens e menos de 1 hora em uma única GPU .
![]() |
|---|
![]() |
|---|
![]() |
|---|
![]() |
|---|
Clone este repo:
git clone --depth 1 https://github.com/xyfJASON/ctrlora.git
cd ctrloraCrie e ativar um novo ambiente do CONDA:
conda create -n ctrlora python=3.10
conda activate ctrloraInstale Pytorch e outras dependências:
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117
pip install -r requirements.txt Fornecemos nossos modelos pré -rastreados aqui. Coloque o controle base ( ctrlora_sd15_basecn700k.ckpt ) em ./ckpts/ctrlora-basecn e os loras em ./ckpts/ctrlora-loras . A Convenção de Nomeação dos Loras é ctrlora_sd15_<basecn>_<condition>.ckpt para condições básicas e ctrlora_sd15_<basecn>_<condition>_<images>_<steps>.ckpt para novas condições.
Você também precisa baixar os modelos baseados em SD1.5 e colocá-los em ./ckpts/sd15 . Modelos usados em nosso trabalho:
v1-5-pruned.ckpt ): oficial / espelhopython app/gradio_ctrlora.pyRequer pelo menos 9 GB/21 GB de RAM para gerar um lote de uma/quatro imagens de 512x512.



Com base no nosso ControlNet Base, você pode treinar uma LORA para sua condição personalizada com apenas 1.000 imagens e menos de 1 hora em uma única GPU (20 GB).
Primeiro, faça o download da difusão estável v1.5 ( v1-5-pruned.ckpt ) em ./ckpts/sd15 e a base controlnetNet ( ctrlora_sd15_basecn700k.ckpt ) em ./ckpts/ctrlora-basecn , conforme descrito acima.
Segundo, coloque seus dados personalizados em ./data/<custom_data_name> com a seguinte estrutura:
data
└── custom_data_name
├── prompt.json
├── source
│ ├── 0000.jpg
│ ├── 0001.jpg
│ └── ...
└── target
├── 0000.jpg
├── 0001.jpg
└── ...
source contém imagens de condição, como bordas de Canny, mapas de segmentação, imagens de profundidade, etc.target contém imagens de verdadeira-verdade correspondente às imagens de condição.prompt.json deve seguir o formato como {"source": "source/0000.jpg", "target": "target/0000.jpg", "prompt": "The quick brown fox jumps over the lazy dog."} .Terceiro, execute o seguinte comando para treinar a Lora para sua condição personalizada:
python scripts/train_ctrlora_finetune.py
--dataroot ./data/ < custom_data_name >
--config ./configs/ctrlora_finetune_sd15_rank128.yaml
--sd_ckpt ./ckpts/sd15/v1-5-pruned.ckpt
--cn_ckpt ./ckpts/ctrlora-basecn/ctrlora_sd15_basecn700k.ckpt
[--name NAME]
[--max_steps MAX_STEPS]--dataroot : caminho para os dados personalizados.--name : nome do experimento. O diretório de registro será ./runs/name . Padrão: hora atual.--max_steps : Número máximo de etapas de treinamento. Padrão: 100000 .Após o treinamento, extraia os pesos da Lora com o seguinte comando:
python scripts/tool_extract_weights.py -t lora --ckpt CHECKPOINT --save_path SAVE_PATH--ckpt : caminho para o ponto de verificação produzido pelo treinamento acima.--save_path : caminho para salvar os pesos da Lora extraídos. Finalmente, coloque o Lora extraído em ./ckpts/ctrlora-loras e use-o na demonstração do Gradio.
Consulte as instruções aqui para obter mais detalhes de treinamento, ajuste fino e avaliação.
Este projeto é construído sobre difusão estável, controlnet e unicontrol. Obrigado pelo seu ótimo trabalho!
Se você achar esse projeto útil, considere citar:
@article { xu2024ctrlora ,
title = { CtrLoRA: An Extensible and Efficient Framework for Controllable Image Generation } ,
author = { Xu, Yifeng and He, Zhenliang and Shan, Shiguang and Chen, Xilin } ,
journal = { arXiv preprint arXiv:2410.09400 } ,
year = { 2024 }
}