o
    *jV                     @   s   d dl Z d dlZd dlmZ 			ddejjdefddZ		ddejjdefdd	Zdejfd
dZ	ddejjdefddZ
dS )    Ncpumodel
local_pathc                 C   s   t | |||dS )N)	sub_level)load_pretrained_dict)r   
state_dictr   Zmap_locationloggerr    r	   o/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/cv/image_probing_model/utils.pyload_pretrained	   s   r   r   c           
         s,  dg}d|v r|d }d|v r|d }|D ]\  fdd|  D }qrCdr/nd tfdd|  D }t| ||d}| j|d	d
}|j}|j}g }|rg|dd| d |ru|dd| d d|}t|dkr|r|	| dS ddl
}	|	| dS dS )a   
    Load parameters to model with
    1. Sub name by revise_keys For DataParallelModel or DistributeParallelModel.
    2. Load 'state_dict' again if possible by key 'state_dict' or 'model_state'.
    3. Take sub level keys from source, e.g. load 'backbone' part from a classifier into a backbone model.
    4. Auto remove invalid parameters from source.
    5. Log or warning if unexpected key exists or key misses.

    Args:
        model (torch.nn.Module):
        state_dict (dict): dict of parameters
        logger (logging.Logger, None):
        sub_level (str, optional): If not None, parameters with key startswith sub_level will remove the prefix
            to fit actual model keys. This action happens if user want to load sub module parameters
            into a sub module model.
    )z	^module\. r   Zmodel_statec                    s    i | ]\}}t  ||qS r	   )resub).0kv)prr	   r
   
<dictcomp>.   s     z(load_pretrained_dict.<locals>.<dictcomp>.c                    s(   i | ]\}}|  r|d  |qS N)
startswith)r   keyvalue)r   sub_level_lenr	   r
   r   3   s
    )r   F)strictz%unexpected key in source state_dict: z, 
z"missing key in source state_dict: r   N)itemsendswithlen_auto_drop_invalidZload_state_dictunexpected_keysmissing_keysappendjoinwarningwarningswarn)
r   r   r   r   Zrevise_keysZload_statusr!   r"   Zerr_msgsr&   r	   )r   r   r   r   r
   r      sB   


r   c                 C   s   dd }|  | dS )z6
    Convert applicable model parameters to fp16.
    c                 S   s   t | tjtjtjfr | jj | j_| jd ur | jj | j_t | tj	rGg dd dD dddD ]}t
| |}|d urF|j |_q5dD ]}t| |r_t
| |}|d ur_|j |_qIdD ]}t| |rxt
| |}|d urx|j |_qbd S )	Nc                 S   s   g | ]}| d qS )Z_proj_weightr	   )r   sr	   r	   r
   
<listcomp>[   s    zEconvert_weights.<locals>._convert_weights_to_fp16.<locals>.<listcomp>)inqr   r   Zin_proj_biasZbias_kZbias_v)Ztext_projectionZproj)Zprompt_embeddings)
isinstancennZConv1dZConv2dZLinearweightdataZhalfZbiasZMultiheadAttentiongetattrhasattr)layerattrZtensornamer	   r	   r
   _convert_weights_to_fp16S   s>   





z1convert_weights.<locals>._convert_weights_to_fp16N)apply)r   r5   r	   r	   r
   convert_weightsN   s   r7   c           
      C   s   |  }g }|   D ]A\}}||v rM|| }|j|jkr3|| d|j d|j  || q|j|jkrM|| d|j d|j  || qt|dkrmdd| }|rd|	| |S ddl
}	|	| |S )z
    Strip unmatched parameters in state_dict, e.g. shape not matched, type not matched.

    Args:
        model (torch.nn.Module):
        state_dict (dict):
        logger (logging.Logger, None):

    Returns:
        A new state dict.
    z: invalid shape, dst z	 vs. src z: invalid dtype, dst r   zignore keys from source: 
r   N)copyr   r   shaper#   popZdtyper   r$   r%   r&   r'   )
r   r   r   Zret_dictZinvalid_msgsr   r   	new_valueZwarning_msgr&   r	   r	   r
   r    q   s0   


r    )r   NN)NNr   )r   ZtorchZtorch.nnr-   Modulestrr   dictr   r7   r    r	   r	   r	   r
   <module>   s    

<#