CoolFace
Modelpublic

InPeerReview/RemoteSensingChangeDetection-RSCD.HA2F

sourceHugging Faceupdated 10mo agoView on Hugging Face
2likes
encoder.cpython-39.pyc109 linesDownload Raw Back to __pycache__
1a

20hJ;�@s�ddlmZddlZddlZddlmZmZmZmZddl	Z	ddl3mZddlZ	ddl
mZddlmZddlmZmZmZmZmZddlmZdeejejd�dd
�ZGdd�dej�ZGdd�dej�Zdejed�dd�Z Gdd�dej�Z!dS)�)�partialN)�Sequence�Tuple�Union�Callable)�
trunc_normal_)�	rearrange)�Mlp�4PatchEmbed�SwiGLUFFNFused�MemEffAttention�NestedTensorBlock)�resnet18�TF)�fn�module�returncCsf|s|r|||d�|��D]0\}}|r6d�||f�n|}t||||dd�q|rb|rb|||d�|S)N�r�name�.T)rrr�depth_first�include_root)�named_children�join�named_apply)rrrrr�5child_nameZchild_module�r�=C:\Users\82607\Desktop\code\ChangeViT-master\model\encoder.pyrsrc@seZdZdd�ZdS)�6BlockChunkcCs|D]}||�}q|S�Nr)�self�x�brrr�forward%s7zBlockChunk.forwardN)�__name__�8__module__�__qualname__r#rrrrr$srcs�eZdZdddddddddddd	d9eejedddd	d
f�fdd�	Zdd�Zdd�Z	d"dd�Z10dd�Zd#dd�Zd$dd�Z
d%dd�Zd&ejeeefeeeeejeejfd�d d!�Z�ZS)'�DinoVisionTransformer����i�g@TgFN�mlprg�������?cst���ttjdd���|_|_||_�	|_||_	||_11||_||_||||�d�|_
|j
j}t�t�d|���|_|dks�J�|r�t�t�d|���nd|_|dur�|g|�ndd	�t�d||�D���d12kr�td�t�nD�dks��d
k�rtd�t�n$�dk�r$td�dd�}|�nt�����������	�13�fdd	�t|�D�}|dk�r�d|_g}||}td||�D]*}|�t��g|||||���q|t�dd	�|D��|_nd|_t�|�|_���|_t��|_ t�t�d���|_!|�"�dS)a�14        Args:15            img_size (int, tuple): input image size16            patch_size (int, tuple): patch size17            in_chans (int): number of input channels18            embed_dim (int): embedding dimension19            depth (int): depth of transformer20            num_heads (int): number of attention heads21            mlp_ratio (int): ratio of mlp hidden dim to embedding dim22            qkv_bias (bool): enable bias for qkv if True23            proj_bias (bool): enable bias for proj in attn if True24            ffn_bias (bool): enable bias for ffn if True25            drop_path_rate (float): stochastic depth rate26            drop_path_uniform (bool): apply uniform drop rate across blocks27            weight_init (str): weight init scheme28            init_values (float): layer-scale init values29            embed_layer (nn.Module): patch embedding layer30            act_layer (nn.Module): MLP activation layer31            block_fn (nn.Module): transformer block class32            ffn_layer (str): "mlp", "swiglu", "swiglufused" or "identity"33            block_chunks: (int) split block sequence into block_chunks units for FSDP wrap34            num_register_tokens: (int) number of extra cls tokens (so-called "registers")35            interpolate_antialias: (str) flag to apply anti-aliasing when interpolating positional embeddings36            interpolate_offset: (float) work-around offset to apply when interpolating positional embeddings37        �����ư>)�eps)�img_size�38patch_size�in_chans�	embed_dim�rNTcSsg|]}|���qSr)�item)�.0r!rrr�39<listcomp>t�z2DinoVisionTransformer.__init__.<locals>.<listcomp>r,zusing MLP layer as FFNZswiglufusedZswigluzusing SwiGLU layer as FFN�identityzusing Identity layer as FFNc_st��Sr)�nn�Identity)�args�kwargsrrr�fsz)DinoVisionTransformer.__init__.<locals>.fcs.g|]&}���	���40��|����d��qS))�dim�	num_heads�	mlp_ratio�qkv_bias�	proj_bias�ffn_biasZ	drop_path�41norm_layer�	act_layer�	ffn_layer�init_valuesr)r5�i�rE�block_fnZdprr2rCrFrGr@rDr?rBrArrr6�s��cSsg|]}t|��qSr)r)r5�prrrr6�r7F)#�super�__init__rr9�	LayerNorm�num_featuresr2Zn_blocksr?r0�num_register_tokens�interpolate_antialias�interpolate_offset�patch_embed�num_patches�	Parameter�torch�zeros�	pos_embed�register_tokens�linspace�printr	r�NotImplementedError�range�chunked_blocks�appendr:�42ModuleList�blocks�norm�head�43mask_token�init_weights)r r/r0r1r2�depthr?r@rArCrBZdrop_path_rateZdrop_path_uniformrGZembed_layerrErJrFZblock_chunksrPrQrRrTr=Zblocks_listr^�	chunksizerH��	__class__rIrrM,sZ144�45 �46(4748zDinoVisionTransformer.__init__cCs8t|jdd�|jdur*tjj|jdd�tt|�dS)N�{�G�z�?��stdr-)rrXrYr9�init�normal_r�init_weights_vit_timm�r rrrre�s49z"DinoVisionTransformer.init_weightscCs$|j}|jdd}|jjd}||kr6||kr6|jS|j��}|jd}||j}	||j}50|	|j|51|j}	}52t�|�}t|	�|t|53�|}}
tj	j54|�dt|�t|�|��
dddd�||
fd|jd�}t|	�|jdks�J�t|55�|jdk�sJ�|�
dddd��dd|�}|�|�S)	Nr3�����rr*��bicubic)�scale_factor�mode�	antialias�����)�dtype�shaperX�floatr0rR�math�sqrtr9�56functional�interpolate�reshape�int�permuterQ�view�to)r r!�w�hZprevious_dtypeZnpatch�NZpatch_pos_embedr>�w0Zh0Zsqrt_N�sxZsyrrr�interpolate_pos_encoding�s,5758596061"�z.DinoVisionTransformer.interpolate_pos_encodingcCs�|j\}}}}|�|�}|durDt�|�d�|j�|j��d�|�}||�|||�}|j	dur�tj62|dd�dd�f|j	�|jddd�|dd�dd�ffdd�}|S)Nrqrr3�r>)ryrSrV�where�	unsqueezerdr�rxr�rY�cat�expand)r r!�masks�B�ncr�r�rrr�prepare_tokens_with_masks�s63$64��	z/DinoVisionTransformer.prepare_tokens_with_masksc		s��fdd�t||�D�}�jD]}||�}q|}g}t||�D]`\}}��|�}|�|dd�df|dd�d�jd�f|dd��jdd�f||d��q>|S)Ncsg|]\}}��||��qSr)r�)r5r!r�rprrr6�r7z?DinoVisionTransformer.forward_features_list.<locals>.<listcomp>rr3)Zx_norm_clstokenZx_norm_regtokensZx_norm_patchtokensZ	x_prenormr�)�ziprarbr_rP)	r Zx_listZ65masks_listr!�blkZall_x�outputr��x_normrrpr�forward_features_list�s 666768��	z+DinoVisionTransformer.forward_features_listcCsDt|t�r|�||�S|�||�}|jD]}||�}q(|�|�}|Sr)�69isinstance�listr�r�rarb)r r!r�r�r�rrrr#�s70717273zDinoVisionTransformer.forwardr3cCs�|�|�}gt|j�}}t|t�r2t|||�n|}t|j�D]"\}}||�}||vr@|�|�q@t|�t|�ks�Jdt|��dt|��d���|S)N�only � / �
 blocks found)r��lenrar�r�r]�	enumerater_)r r!�nr��total_block_len�blocks_to_takerHr�rrr�$_get_intermediate_layers_not_chunked�s74.z:DinoVisionTransformer._get_intermediate_layers_not_chunkedc	Cs�|�|�}gdt|jd�}}}t|t�r<t|||�n|}|jD]8}||d�D]&}||�}||vrt|�|�|d7}qVqFt|�t|�ks�Jdt|��dt|��d���|S)Nrrqr3r�r�r�)r�r�rar�r�r]r_)	r r!r�r�rHr�r�Zblock_chunkr�rrr� _get_intermediate_layers_chunkeds757677.z6DinoVisionTransformer._get_intermediate_layers_chunked)r!r�r�return_class_tokenrc	s��jr��||�}n��||�}|r6�fdd�|D�}dd�|D�}�fdd�|D�}|r�|j\�}������fdd�|D�}|r�tt||��St|�S)Ncsg|]}��|��qSr)rb�r5�outrprrr6&r7zADinoVisionTransformer.get_intermediate_layers.<locals>.<listcomp>cSsg|]}|dd�df�qS)Nrrr�rrrr6'r7cs&g|]}|dd�d�jd�f�qS)Nr3)rPr�rprrr6(r7cs8g|]0}|����j��jd��dddd����qS)rqrr*r3rr)rr0r��78contiguousr��r�r�r r�rrr6+s�)r^r�r�ry�tupler�)	r r!r�rr�rb�outputsZclass_tokens�_rr�r�get_intermediate_layerss�z-DinoVisionTransformer.get_intermediate_layers)N)N)r3)r3)r3FFT)r$r%r&r79r9�GELU�BlockrMrer�r�r�r#r�r�rV�Tensorrr�r�boolrr��
__classcell__rrrhrr'+sP�}80818283�84�r'rcCs6t|tj�r2t|jdd�|jdur2tj�|j�dS)zCViT weight initialization, original timm impl (for reproducibility)rjrkN)r�r9�Linearr�weight�biasrm�zeros_rrrrro4s85rocs.eZdZd�fdd�	Zdd�Zdd�Z�ZS)	�Encoder�smallcs*t���|dkr:tddddddtttd�d	d86�|_d}n<|dkrjtddd
dddtttd�d	d87�|_d}ndsvJd��|dkr�tj|dd�dntj|dd�}dD]88}||=q�|jj	|dd�}t89d�|j|j
��t90d�||��tdd�|_tjdd�|_t�tjdd
dd�t�d
�tjdd��|_dS) N�tiny�r)��r+��)Z91attn_classr)r/r0r2rfr?r@rJrPz-checkpoint/deit_tiny_patch16_224-a1311bcf.pthr�i�z%checkpoint/dinov2_vits14_pretrain.pthFz!Encoder: check the vit model type�cpu)�map_location�model)rXzpatch_embed.proj.weight)�strictz% missing_keys:{},92 unexpected_keys:{}z$model_type: {},93 checkpoint_path: {}T)Z94pretrainedg{�G�z�?)rKi�r3)�kernel_size)�inplace)rLrMr'rr�r�vitrV�load�load_state_dictr[�format�missing_keys�unexpected_keysr�resnetr9�Dropout�drop�95Sequential�Conv2d�BatchNorm2d�ReLU�fusion_conv)r �96model_type�path�97state_dict�k�msgrhrrrM=sT9899�100101�102��103�zEncoder.__init__cCsf|j�|�}|j�|�}|j�|�}|�|j�|��}|j�|�}|j�|�}|j�|�}||||gSr)	r�Zconv1Zbn1�relur�Zlayer1Zlayer2Zlayer3Zlayer4)r r!�x2Zx3Zx4Zx5rrr�detail_captureoszEncoder.detail_capturec	Cs�|�|�}|�|�}t|dddd�}t|dddd�}|�|�}|�|�}|�tj|d|gdd��}|�tj|d|gdd��}|dd�|g|dd�|gfS)Nzb (h w) c -> b c h wr))r�r�rqr3r�)r�rr�r�rVr�)	r r!�yZv_xZv_yZc_xZc_yZ	fused_v_xZ	fused_v_yrrrr#{s104105106107zEncoder.forward)r�)r$r%r&rMr�r#r�rrrhrr�<s2r�)rTF)r)"�	functoolsrr{�logging�typingrrrrrV�torch.nnr9Ztorch.utils.checkpointZ
torch.nn.initrZeinopsrZmodel.layersr	r108rrr
r�Zmodel.resnetr�Modulerr`rr'�strror�rrrr�<module>109s"