https://github.com/kohya-ss/sd-scripts/blob/main/docs/gen_img_README-ja.mdhttps://github.com/kohya-ss/sd-scripts/blob/main/docs/gen_img_README-ja.md1.图像生成
ckpt = "/home/image_team/image_team_docker_home/lgd/e_commerce_sd/stable-diffusion-webui/models/Stable-diffusion/DreamShaper_8_pruned.safetensors"
output = "/home/image_team/image_team_docker_home/lgd/e_commerce_sd/outputs/sd_scripts_output/"
python gen_img_diffusers.py --ckpt {ckpt} --outdir {output} --fp16 --interactive
指定版本:
--ckpt:在选项中指定模型(sd checkpoint或sd文件夹)。
--v2:使用sd 2.0,1.x版本无需指定。
--v_parameterization:如果使用的模型使用 v 参数化(768-v-ema.ckpt),和v2一起使用。
--vae:指定要使的VAE。
图像生成和输出:
--interactive:以交互模式运行。
--prompt:指定提示符。
--from_file:指定包含prompt的文件,每行写一个提示。
--W:指定图像的宽度,默认512。
--H:指定图像的高度,默认512。
--step:指定采样步数,默认50。
--scale:指定classifier free guidance scale,默认7.5。
--sampler:指定采样器,默认ddim,可以指定Diffusers提供的ddim、pndm、dpmsolver、dpmsolver+++、lms、euler、euler_a(后三个也可以用k_lms、k_euler、k_euler_a指定)。
--outdir:图像输出地址。
--images_per_prompt:指定每次提示生成的图片数,默认是1。
--clip_skip:指定要使用clip末尾的哪一层,省略则使用最后一层。
--max_embeddings_multiples:指定clip输入长度与默认值75的倍数,未指定,则默认75。若是3,则是225.
--negative_scale:指定位编码比例。
调整内存和加速:
--batch_size:批量大小,默认是1,大批量会消耗更多内存,但会生成更快的结果。
--vae_batch_size:指定VAE批量大小,默认和bs一样,VAE会消耗更多内存,去噪后步长到100%时,会耗尽内存。
--xformers:可以选择指定 xformers 的使用(如果不使用 xformers,则将其省略)。
--fp16:可选择以 fp16(单精度)执行推理。RTX 30 系列 GPU。
--bf16:可以选择执行 bf16 (bfloat16) 推理。
使用附加网络:
--network_module:指定要使用的网络,对于lora,---network_module networks.lora,多个lora,--network_module networks.lora networks.lora
--network_weights:指定要使用的网络权重文件,单个lora,--network_weights model.safetensors,对于多个lora,--network_weights model1.safetensors model2.safetensors model3.safetensors
--network_mul:指定要附加的网络权重的比例,默认是1。单个lora,---network_mul 0.8,多个lora,--network_mul 0.4 0.5 0.7
--network_merge:将附加权重和原始权重进行预先合并。
2.文生图
使用textual inversion和lora:
python gen_img_diffusers.py --ckpt model.safetensors
--scale 8 --steps 48 --outdir txt2img --xformers
--W 512 --H 768 --fp16 --sampler k_euler_a
--textual_inversion_embeddings goodembed.safetensors negprompt.pt
--network_module networks.lora networks.lora
--network_weights model1.safetensors model2.safetensors
--network_mul 0.4 0.8
--clip_skip 2 --max_embeddings_multiples 1
--batch_size 8 --images_per_prompt 1 --interactive
相同指示一次生成64张,批量大小为4的图片:
python gen_img_diffusers.py --ckpt model.ckpt --outdir outputs
--xformers --fp16 --W 512 --H 704 --scale 12.5 --sampler k_euler_a
--steps 32 --batch_size 4 --images_per_prompt 64
--prompt "beautiful flowers --n monochrome"
3.图生图
python gen_img_diffusers.py --ckpt trinart_characters_it4_v1_vae_merged.ckpt
--outdir outputs --xformers --fp16 --scale 12.5 --sampler k_euler --steps 32
--image_path template.png --strength 0.8
--prompt "1girl, cowboy shot, brown hair, pony tail, brown eyes,
sailor school uniform, outdoors
--n lowres, bad anatomy, bad hands, error, missing fingers, cropped,
worst quality, low quality, normal quality, jpeg artifacts, (blurry),
hair ornament, glasses"
--batch_size 8 --images_per_prompt 32
--image_path:指定img2img图片,若指定文件夹,则以此使用该文件夹中图像
--strength:指定img2img强度,默认0.8.
3.inpaint
--mask_image:指定mask图像。
gen_img_diffusers.py
text_encoder, vae, unet = model_util.load_models_from_stable_diffusion_checkpoint(args.v2, args.ckpt)
- sd_scripts/library/model_util.py->load_models_from_stable_diffusion_checkpoint
- _, state_dict = load_checkpoint_with_text_encoder_conversion(ckpt_path, device)
- # Convert the UNet2DConditionModel model.
- unet_config = create_unet_diffusers_config(v2, unet_use_linear_projection_in_v2)
{'sample_size': 64, 'in_channels': 4, 'out_channels': 4, 'down_block_types': ('CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'CrossAttnDownBlock2D', 'DownBlock2D'), 'up_block_types': ('UpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D', 'CrossAttnUpBlock2D'), 'block_out_channels': (320, 640, 1280, 1280), 'layers_per_block': 2, 'cross_attention_dim': 768, 'attention_head_dim': 8}
- converted_unet_checkpoint = convert_ldm_unet_checkpoint(v2, state_dict, unet_config)
- unet = UNet2DConditionModel(**unet_config).to(device)
- info = unet.load_state_dict(converted_unet_checkpoint)
- # Convert the VAE model.
- vae_config = create_vae_diffusers_config()
{'sample_size': 256, 'in_channels': 3, 'out_channels': 3, 'down_block_types': ('DownEncoderBlock2D', 'DownEncoderBlock2D', 'DownEncoderBlock2D', 'DownEncoderBlock2D'), 'up_block_types': ('UpDecoderBlock2D', 'UpDecoderBlock2D', 'UpDecoderBlock2D', 'UpDecoderBlock2D'), 'block_out_channels': (128, 256, 512, 512), 'latent_channels': 4, 'layers_per_block': 2}
- converted_vae_checkpoint = convert_ldm_vae_checkpoint(state_dict, vae_config)
- vae = AutoencoderKL(**vae_config).to(device)
- info = vae.load_state_dict(converted_vae_checkpoint)
- text_model = CLIPTextModel._from_config(cfg)
- info = text_model.load_state_dict(converted_text_encoder_checkpoint)
replace_unet_modules(unet, mem_eff, args.xformers, args.sdpa)
replace_vae_modules(vae, mem_eff, args.xformers, args.sdpa)
tokenizer = train_util.load_tokenizer(args)
- tokenizer = CLIPTokenizer.from_pretrained(original_path)
scheduler_module = diffusers.schedulers.scheduling_ddpm
scheduler = scheduler_cls(
num_train_timesteps=SCHEDULER_TIMESTEPS,
beta_start=SCHEDULER_LINEAR_START,
beta_end=SCHEDULER_LINEAR_END,
beta_schedule=SCHEDLER_SCHEDULE,
**sched_init_args,
)