CoolFace
Modelpublic

RuiTerrty/RemoteSensingChangeDetection-RSCD.HA2F

sourceHugging Faceupdated 6mo agoView on Hugging Face
0likes
block.cpython-39.pyc61 linesDownload Raw Back to __pycache__
1a

28��g�%�@s�UddlZddlZddlmZmZmZmZmZddlZddl	Z	ddl	m3Z4mZddlm
Z
mZddlmZddlmZddlmZe�d	�Zej�d5�duZz:er�ddlmZmZmZdZe�d
�ne�d�e �Wn e y�dZe�d�Yn0Gdd�de6j!�Z"d#eeegefe#ed�dd�Z$d$dd�Z%d%dd�Z&iZ'eeefe(d<d&dd�Z)d'eeeeegefe#ed�dd �Z*Gd!d"�d"e"�Z+dS)(�N)�Callable�List�Any�Tuple�Dict)�nn�Tensor�)�	Attention�MemEffAttention)�DropPath)�7LayerScale)�MlpZdinov2�XFORMERS_DISABLED)�fmha�scaled_index_add�index_select_catTzxFormers is available (Block)zxFormers is disabled (Block)Fz!xFormers is not available (Block)cs�eZdZddddddddejejeefeee	e8e9e10e	e	e	edejfedejfedejfedejfdd��fdd	�
Z
eed11�dd�Z�ZS)
�Blockg@FT�N.)�dim�	num_heads�	mlp_ratio�qkv_bias�	proj_bias�ffn_bias�drop�	attn_drop�	drop_path�	act_layer�12norm_layer�13attn_class�	ffn_layer�returncs�t���||�|_|
||||||d�|_|	r:t||	d�nt��|_|14dkrTt|15�nt��|_	||�|_16t||�}||||||d�|_|	r�t||	d�nt��|_
|17dkr�t|18�nt��|_|19|_dS)N)rrrrZ	proj_drop)�init_valuesr)�in_features�hidden_featuresrr�bias)�super�__init__�norm1�attnr
r�Identity�ls1r�20drop_path1�norm2�int�mlp�ls2Z21drop_path2�sample_drop_ratio)�selfrrrrrrrrr#rrrr r!Zmlp_hidden_dim��	__class__��BC:\Users\82607\Desktop\code\ChangeViT-master\model\layers\block.pyr(,s02223�24�zBlock.__init__��xr"cs�ttd��fdd�}ttd��fdd�}�jrZ�jdkrZt||�jd�}t||�jd�}nN�jr��jdkr�|��||��}|��||��}n|||�}|||�}|S)	Nr8cs������|���S�N�r,r*r)�r9�r3r6r7�attn_residual_funcZsz)Block.forward.<locals>.attn_residual_funccs������|���Sr:�r1r0r.r<r=r6r7�ffn_residual_func]sz(Block.forward.<locals>.ffn_residual_funcg�������?)�
residual_funcr2r)r�trainingr2�"drop_add_residual_stochastic_depthr-)r3r9r>r@r6r=r7�forwardYs&��z
Block.forward)�__name__�25__module__�__qualname__r�GELU�	LayerNormr26rr/�float�boolr�Moduler(rrD�
__classcell__r6r6r4r7r+s:��-rr)r9rAr2r"c
Cs�|j\}}}tt|d|�d�}tj||jd�d|�}||}||�}	|�d�}27|	�d�}	||}tj|28d||	j|j	d�|d�}|�29|�S)Nr	��devicer��dtype��alpha)�shape�maxr/�torch�randpermrO�flatten�	index_add�torQ�view_as)
r9rAr2�b�n�d�sample_subset_size�brangeZx_subset�residual�x_flat�residual_scale_factor�x_plus_residualr6r6r7rCus3031rCcCsJ|j\}}}tt|d|�d�}tj||jd�d|�}||}||fS)Nr	rN)rTrUr/rVrWrO)r9r2r\r]r^r_r`rcr6r6r7�get_branges_scales�s32recCs\|dur<|�d�}|�d�}tj|d||j|jd�|d�}nt|||j|jd�||d�}|S)Nr	rrPrR)�scalingrS)rXrVrYrZrQr)r9r`rarc�scaling_vectorrbrdr6r6r7�add_residual�s3334 �rh�attn_bias_cachecCs�|durdd�|D�ndd�|D�}tdd�t||�D��}|t��vr�g}t||�D]&\}}t|�D]}|�|jd�qfqVtj�	|�}||_35|t|<|dur�tdd�|D�|��dd	|d36jd	�}	n tdd�|D��}37t
j|38dd�}	t||	fS)
zc39    this will perform the index select, cat the tensors, and provide the attn_bias from cache40    NcSsg|]}|jd�qS�r�rT)�.0r\r6r6r7�41<listcomp>��z)get_attn_bias_and_cat.<locals>.<listcomp>cSsg|]}|jd�qSrjrk�rlr9r6r6r7rm�rncss |]\}}||jdfVqdS)r	Nrk)rlr\r9r6r6r7�	<genexpr>�rnz(get_attn_bias_and_cat.<locals>.<genexpr>r	cSsg|]}|�d��qS�r	)rXror6r6r7rm�rn�����rcss*|]"}|�ddg|jdd���VqdS)r	rr�N)�reshaperTror6r6r7rp�rn)r)�tuple�zipri�keys�range�appendrTr�BlockDiagonalMask�from_seqlens�_batch_sizesr�viewrV�cat)�x_list�branges�batch_sizesZ42all_shapes�seqlensr\r9�_�	attn_biasZcat_tensors�tensors_bs1r6r6r7�get_attn_bias_and_cat�s$*r�)rrAr2r"c	s��fdd�|D�}dd�|D�}dd�|D�}t||�\}}|�|||d��}	g}43t|||	|�D](\}}}
}|44�t|||
||��|��q`|45S)Ncsg|]}t|�d��qS)�r2)reror�r6r7rm�rnz;drop_add_residual_stochastic_depth_list.<locals>.<listcomp>cSsg|]}|d�qSrjr6�rl�sr6r6r7rm�rncSsg|]}|d�qSrqr6r�r6r6r7rm�rn�r�)r��splitrvryrhr[)rrAr2rgZbranges_scalesr�Zresidual_scale_factorsr�Zx_catZ
residual_list�outputsr9r`rarcr6r�r7�'drop_add_residual_stochastic_depth_list�sr�cs4eZdZeeeed�dd�Z�fdd�Z�ZS)�NestedTensorBlock)rr"cs�t�jt�sJ��jr��jdkr�dttd��fdd�
}d
ttd��fdd�
}t||�jt�jt�rj�jj	ndd�}t||�jt�jt�r��j46j	ndd�}|Sdttd��fd	d�
}dttd��fd47d�
}t|�\}}||||d�}|||�}|�|�SdS)zL48        x_list contains a list of tensors to nest together and run49        rNr8cs�j��|�|d�S�Nr�)r*r)�r9r�r=r6r7r>�sz<NestedTensorBlock.forward_nested.<locals>.attn_residual_funccs����|��Sr:)r0r.r�r=r6r7r@�sz;NestedTensorBlock.forward_nested.<locals>.ffn_residual_func)rAr2rgcs���j��|�|d��Sr�r;r�r=r6r7r>�scs������|���Sr:r?r�r=r6r7r@�sr�)N)N)N)N)
�50isinstancer*rrBr2rr�r,r
�gammar1r�r�)r3rr>r@r�r9r6r=r7�forward_nested�s.��z NestedTensorBlock.forward_nestedcs>t|t�rt��|�St|t�r6ts,td��|�|�St�dS)Nz-xFormers is required for using nested tensors)r�rr'rD�list�XFORMERS_AVAILABLE�AssertionErrorr�)r3Zx_or_x_listr4r6r7rD�s515253zNestedTensorBlock.forward)rErFrGrrr�rDrMr6r6r4r7r��s(r�)r)r)N)N)rN),�logging�os�typingrrrrr�warningsrVrr�	attentionr54rrrZlayer_scaler
r0r�	getLogger�logger�environ�get�XFORMERS_ENABLED�xformers.opsrrrr��warn�ImportErrorrLrrJrCrerhri�__annotations__r�r�r�r6r6r6r7�<module>55sT565758M��596061��