(args)
| 196 | |
| 197 | |
| 198 | def main(args): |
| 199 | original_ckpt = load_original_checkpoint(args.checkpoint_path) |
| 200 | num_layers = list(set(int(k.split(".", 2)[1]) for k in original_ckpt if "joint_blocks" in k))[-1] + 1 # noqa: C401 |
| 201 | caption_projection_dim = 1536 |
| 202 | |
| 203 | converted_transformer_state_dict = convert_sd3_transformer_checkpoint_to_diffusers( |
| 204 | original_ckpt, num_layers, caption_projection_dim |
| 205 | ) |
| 206 | |
| 207 | with CTX(): |
| 208 | transformer = SD3Transformer2DModel( |
| 209 | sample_size=64, |
| 210 | patch_size=2, |
| 211 | in_channels=16, |
| 212 | joint_attention_dim=4096, |
| 213 | num_layers=num_layers, |
| 214 | caption_projection_dim=caption_projection_dim, |
| 215 | num_attention_heads=24, |
| 216 | pos_embed_max_size=192, |
| 217 | ) |
| 218 | if is_accelerate_available(): |
| 219 | load_model_dict_into_meta(transformer, converted_transformer_state_dict) |
| 220 | else: |
| 221 | transformer.load_state_dict(converted_transformer_state_dict, strict=True) |
| 222 | |
| 223 | print("Saving SD3 Transformer in Diffusers format.") |
| 224 | transformer.to(dtype).save_pretrained(f"{args.output_path}/transformer") |
| 225 | |
| 226 | if is_vae_in_checkpoint(original_ckpt): |
| 227 | with CTX(): |
| 228 | vae = AutoencoderKL.from_config( |
| 229 | "stabilityai/stable-diffusion-xl-base-1.0", |
| 230 | subfolder="vae", |
| 231 | latent_channels=16, |
| 232 | use_post_quant_conv=False, |
| 233 | use_quant_conv=False, |
| 234 | scaling_factor=1.5305, |
| 235 | shift_factor=0.0609, |
| 236 | ) |
| 237 | converted_vae_state_dict = convert_ldm_vae_checkpoint(original_ckpt, vae.config) |
| 238 | if is_accelerate_available(): |
| 239 | load_model_dict_into_meta(vae, converted_vae_state_dict) |
| 240 | else: |
| 241 | vae.load_state_dict(converted_vae_state_dict, strict=True) |
| 242 | |
| 243 | print("Saving SD3 Autoencoder in Diffusers format.") |
| 244 | vae.to(dtype).save_pretrained(f"{args.output_path}/vae") |
| 245 | |
| 246 | |
| 247 | if __name__ == "__main__": |
no test coverage detected