o
    ei$                     @   s&   d dl mZ G dd deZdgZdS )   )PreTrainedConfigc                1       s   e Zd ZdZdZ															
											d+dee dB dee dB dee dB dededededededededede	dede	d ed!ed"ed#ed$ed%e
dB d&ed'ed(ef0 fd)d*Z  ZS ),EfficientLoFTRConfigad  
    This is the configuration class to store the configuration of a [`EfficientLoFTRFromKeypointMatching`].
    It is used to instantiate a EfficientLoFTR model according to the specified arguments, defining the model
    architecture. Instantiating a configuration with the defaults will yield a similar configuration to that of the
    EfficientLoFTR [zju-community/efficientloftr](https://huggingface.co/zju-community/efficientloftr) architecture.

    Configuration objects inherit from [`PreTrainedConfig`] and can be used to control the model outputs. Read the
    documentation from [`PreTrainedConfig`] for more information.

    Args:
        stage_num_blocks (`List`, *optional*, defaults to [1, 2, 4, 14]):
            The number of blocks in each stages
        out_features (`List`, *optional*, defaults to [64, 64, 128, 256]):
            The number of channels in each stage
        stage_stride (`List`, *optional*, defaults to [2, 1, 2, 2]):
            The stride used in each stage
        hidden_size (`int`, *optional*, defaults to 256):
            The dimension of the descriptors.
        activation_function (`str`, *optional*, defaults to `"relu"`):
            The activation function used in the backbone
        q_aggregation_kernel_size (`int`, *optional*, defaults to 4):
            The kernel size of the aggregation of query states in the fusion network
        kv_aggregation_kernel_size (`int`, *optional*, defaults to 4):
            The kernel size of the aggregation of key and value states in the fusion network
        q_aggregation_stride (`int`, *optional*, defaults to 4):
            The stride of the aggregation of query states in the fusion network
        kv_aggregation_stride (`int`, *optional*, defaults to 4):
            The stride of the aggregation of key and value states in the fusion network
        num_attention_layers (`int`, *optional*, defaults to 4):
            Number of attention layers in the LocalFeatureTransformer
        num_attention_heads (`int`, *optional*, defaults to 8):
            The number of heads in the GNN layers.
        attention_dropout (`float`, *optional*, defaults to 0.0):
            The dropout ratio for the attention probabilities.
        attention_bias (`bool`, *optional*, defaults to `False`):
            Whether to use a bias in the query, key, value and output projection layers during attention.
        mlp_activation_function (`str`, *optional*, defaults to `"leaky_relu"`):
            Activation function used in the attention mlp layer.
        coarse_matching_skip_softmax (`bool`, *optional*, defaults to `False`):
            Whether to skip softmax or not at the coarse matching step.
        coarse_matching_threshold (`float`, *optional*, defaults to 0.2):
            The threshold for the minimum score required for a match.
        coarse_matching_temperature (`float`, *optional*, defaults to 0.1):
            The temperature to apply to the coarse similarity matrix
        coarse_matching_border_removal (`int`, *optional*, defaults to 2):
            The size of the border to remove during coarse matching
        fine_kernel_size (`int`, *optional*, defaults to 8):
            Kernel size used for the fine feature matching
        batch_norm_eps (`float`, *optional*, defaults to 1e-05):
            The epsilon used by the batch normalization layers
        rope_parameters (`RopeParameters`, *optional*):
            Dictionary containing the configuration parameters for the RoPE embeddings. The dictionary should contain
            a value for `rope_theta` and optionally parameters used for scaling in case you want to use RoPE
            with longer `max_position_embeddings`.
        fine_matching_slice_dim (`int`, *optional*, defaults to 8):
            The size of the slice used to divide the fine features for the first and second fine matching stages.
        fine_matching_regress_temperature (`float`, *optional*, defaults to 10.0):
            The temperature to apply to the fine similarity matrix
        initializer_range (`float`, *optional*, defaults to 0.02):
            The standard deviation of the truncated_normal_initializer for initializing all weight matrices.

    Examples:
        ```python
        >>> from transformers import EfficientLoFTRConfig, EfficientLoFTRForKeypointMatching

        >>> # Initializing a EfficientLoFTR configuration
        >>> configuration = EfficientLoFTRConfig()

        >>> # Initializing a model from the EfficientLoFTR configuration
        >>> model = EfficientLoFTRForKeypointMatching(configuration)

        >>> # Accessing the model configuration
        >>> configuration = model.config
        ```
    efficientloftrN   relu              F
leaky_relu皙?皙?   h㈵>      $@{Gz?stage_num_blocksout_featuresstage_stridehidden_sizeactivation_functionq_aggregation_kernel_sizekv_aggregation_kernel_sizeq_aggregation_stridekv_aggregation_stridenum_attention_layersnum_attention_headsattention_dropoutattention_biasmlp_activation_functioncoarse_matching_skip_softmaxcoarse_matching_thresholdcoarse_matching_temperaturecoarse_matching_border_removalfine_kernel_sizebatch_norm_epsrope_parametersfine_matching_slice_dim!fine_matching_regress_temperatureinitializer_rangec                    s  |d ur|ng d _ |d ur|ng d _|d ur|ng d _dg jd d   _dd t j j D  _ fddt j D  _ fd	dtt	 j D  _
tt jd d  _| _ j jd krztd
 j d jd  | _| _| _| _|	 _|
 _| _| _| _ jd  _| _| _| _| _| _| _| _ | _!| _"| _#| _$| _%|&dd t' j(di | d S )N)   r   r      )r   r)   r   r   )@   r+      r   r)   c                 S   s$   g | ]\}}|gd g|d    qS )r)    ).0stride
num_blocksr.   r.   }/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/transformers/models/efficientloftr/configuration_efficientloftr.py
<listcomp>   s    z1EfficientLoFTRConfig.__init__.<locals>.<listcomp>c                    s    g | ]\}} j | g| qS r.   )r   )r/   	stage_idxr1   selfr.   r2   r3      s    c                    s*   g | ]} j | g j| d d  qS )Nr-   )stage_in_channelsstage_block_out_channels)r/   r4   r5   r.   r2   r3      s    zMhidden_size should be equal to the last value in out_features. hidden_size = z, out_features = r   partial_rotary_factorg      @r.   ))r   r   r   r7   zipstage_block_stride	enumerater8   rangelenstage_block_in_channelslistreversedfine_fusion_dimsr   
ValueErrorr   r   r   r   r   r   r   r   r   intermediate_sizer   r   r    r!   r"   r#   r$   r&   r'   num_key_value_headsr(   r%   
setdefaultsuper__init__)r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   kwargs	__class__r5   r2   rH   a   sV   

zEfficientLoFTRConfig.__init__)NNNr   r   r   r   r   r   r   r   r	   Fr
   Fr   r   r   r   r   Nr   r   r   )__name__
__module____qualname____doc__
model_typer@   intstrfloatbooldictrH   __classcell__r.   r.   rJ   r2   r      s    L


	
r   N)configuration_utilsr   r   __all__r.   r.   r.   r2   <module>   s    
#