Skip to content

Problem when erasing multi-concepts #26

Description

@Ferry-Li

In cfr_lora_training.py:

for i in range(train_dataset._concept_num): # the number of concept/lora
        attn_controller = AttnController()
        if i != 0:
            unet.set_default_attn_processor()
        for name, m in unet.named_modules():
            if name.endswith('attn2') or name.endswith('attn1'):
                cross_attention_dim = None if name.endswith("attn1") else unet.config.cross_attention_dim
                if name.startswith("mid_block"):
                    hidden_size = unet.config.block_out_channels[-1]
                elif name.startswith("up_blocks"):
                    block_id = int(name[len("up_blocks.")])
                    hidden_size = list(reversed(unet.config.block_out_channels))[block_id]
                elif name.startswith("down_blocks"):
                    block_id = int(name[len("down_blocks.")])
                    hidden_size = unet.config.block_out_channels[block_id]
                m.set_processor(LoRAAttnProcessor(
                    hidden_size=hidden_size, 
                    cross_attention_dim=cross_attention_dim, 
                    rank=args.rank, 
                    attn_controller=attn_controller, 
                    module_name=name, 
                    preserve_prior=args.with_prior_preservation,
                ))
        ### set lora
        lora_attn_procs = {}
        for key, value in zip(unet.attn_processors.keys(), unet.attn_processors.values()):
            if key.endswith("attn2.processor"):
                lora_attn_procs[f'{key}.to_k_lora'] = value.to_k_lora
                lora_attn_procs[f'{key}.to_v_lora'] = value.to_v_lora
                # lora_attn_procs[f'{key}.to_q_lora'] = value.to_q_lora
                # lora_attn_procs[f'{key}.to_out_lora'] = value.to_out_lora
        # unet.set_attn_processor(lora_attn_procs)
        lora_layers = AttnProcsLayers(lora_attn_procs)

it will report AttributeError: 'UNet2DConditionModel' object has no attribute 'attn_processors'. Did you mean: 'set_attn_processor'? when i > 0 at the line for key, value in zip(unet.attn_processors.keys(), unet.attn_processors.values()):.

I have checked my diffusers==0.22.0. Do you have any ideas about this error?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions