CoolFace
Modelpublic

TTXian/RemoteSensingChangeDetection-RSCD.HA2F

sourceHugging Faceupdated 7d agoView on Hugging Face
0likes
decoder.cpython-39.pyc98 linesDownload Raw Back to __pycache__
1a

2g�:h�*�@s�ddlZddlmZddlmmZddlmZddlm	Z	de3ed�dd�ZGd	d4�d5ej
�ZGdd�dej
�ZGd
d�dej
�ZGdd�dej
�ZGdd�dej
�ZGdd�dej
�ZGdd�dej
�ZGdd�dej
�ZGdd�dej
�ZdS)�N)�	rearrange)�weight_init�F)�	drop_prob�trainingcCsd|dks|s|Sd|}|jdfd|jd}|tj||j|jd�}|��|�|�|}|S)Nr�r)r)�dtype�device)�shape�ndim�torch�randrr	�floor_�div)�xrr�	keep_probr6�
random_tensor�output�r�6C:\Users\82607\Desktop\code\ChangeViT\model\decoder.py�	drop_path	srcs&eZdZd�fdd�	Zdd�Z�ZS)�DropPathNcstt|���||_dS�N)�superr�__init__r)�selfr��	__class__rrrszDropPath.__init__cCst||j|j�Sr)rrr�rrrrr�forwardszDropPath.forward)N��__name__�7__module__�__qualname__rr�
__classcell__rrrrrsrcs0eZdZddejdf�fdd�	Zdd�Z�ZS)�MlpNrcsNt���|p|}|p|}t�||�|_|�|_t�||�|_t�|�|_dSr)	rr�nn�Linear�fc1�act�fc2�Dropout�drop)r�in_features�hidden_features�out_features�	act_layerr,rrrrs8zMlp.__init__cCs6|�|�}|�|�}|�|�}|�|�}|�|�}|Sr)r(r)r,r*rrrrr's910111213zMlp.forward)r!r"r#r&�GELUrrr$rrrrr%s	r%cs&eZdZd�fdd�	Zdd�Z�ZS)	�CrossAttention�Frcstt���||_||}|d|_tj|||d�|_tj||d|d�|_t�|�|_	t�||�|_14t�|�|_dS)Ng࿩�bias�)rr�	num_heads�scaler&r'�q�kvr+�	attn_drop�proj�	proj_drop)r�dim1�dim2r7�qkv_biasr;r=�head_dimrrrr2s1516zCrossAttention.__init__cCs�|j\}}}|j\}}}|�|��|||j||j��dddd�}	|�|��||d|j||j��ddddd�}17|18d|19d}}|	|�dd�|j}
|
jdd�}
|�	|
�}
|
|�dd��|||�}|�20|�}|�|�}|S)	Nrr6r��������������dim)r21r9�reshaper7�permuter:�	transposer8�softmaxr;r<r=)rr�y�B1ZN1�C1�B2�N2�C2r9r:�k�v�attnrrrr?s*.222324zCrossAttention.forward)r3Frrr rrrrr21s
r2cs8eZdZdddddejejf�fdd�	Zdd�Z�ZS)�Block�@Frcszt���|25|�|_|26|�|_t||||||d�|_|dkrDt|�nt��|_	|27|�|_28t||�}t|||	|d�|_
dS)N)r7r@r;r=r)r-r.r0r,)rr�norm1�norm2r2rTrr&�Identityr�norm3�intr%�mlp)rr>r?r7�	mlp_ratior@r,r;rr0�29norm_layer�mlp_hidden_dimrrrrVs30313233zBlock.__init__c	Cs@||�|�|�|�|�|���}||�|�|�|���}|Sr)rrTrWrXr\rZ)rrrLrrrras"z
Block.forward)	r!r"r#r&r1�	LayerNormrrr$rrrrrUUs34�rUcs$eZdZ�fdd�Zdd�Z�ZS)�ContentAwareAggregationc35szt���t�tj||dd�t�|�tjdd��|_t�tj||dd|d�t�|�tjdd�tj||dd�t���|_	dS)Nr)�kernel_sizeT)�inplacerB)rb�padding�groups)36rrr&�37Sequential�Conv2d�BatchNorm2d�ReLU�project�Sigmoid�attn_gen)rZlow_dimZhigh_dimrrrris3839�40�z ContentAwareAggregation.__init__cCsDtj||jdd�ddd�}|�|�}|�||�}|||}|S)Nr6�bilinearF��size�mode�
align_corners)�F�interpolater41rjrl)rZlow_featZ	high_featrT�outrrrrys4243zContentAwareAggregation.forwardr rrrrrahsrac44sJeZdZdgd�ddddddejejf45�fdd�	Zd	d46�Zdd�Z�Z	S)
�FeatureInjector�)�@��r3rVFrcs�t���t||d|||||||	|4748|_t||d|||||||	|4950|_t||d|||||||	|5152|_tj|d|ddd�|_t	||�|_53t|�dS)Nrrr6rBFr4)rrrU�c2_c5�c3_c5�c4_c5r&rg�fusera�caar)rr>r?r7r]r@r,r;rr0r^rrrr�s54   zFeatureInjector.__init__cCs�|jdd�\}}t|d�}t|d�}t|d�}t|d�}|�||�}t|d||d�}|�||�}t|d||d�}|�||�}	t|	d||d�}	|�tj|||	gdd��}55|56S)Nr6zb c h w -> b (h w) czb (h w) c -> b c h w)�h�wrrF)r57rrzr{r|r}r�cat)r�c2�c3�c4�c5�H�WZ_c2Z_c3Z_c4Z_c5rrr�base_forward�s58596061zFeatureInjector.base_forwardcCs`|�|d|d|d|d�}|�|d|d|d|d�}|�||�}|�||�}||fS)Nrrr6rB)r�r~)r�fx�fyZ_c5xZ_c5yrrrr�s62  zFeatureInjector.forward)63r!r"r#r&rir`rr�rr$rrrrru�s6465�
rucs&eZdZd�fdd�	Zdd�Z�ZS)�ChannelAttentionModule�c66sltt|���t�d�|_t�d�|_t�tj	|||ddd�t�67�tj	|||ddd��|_t��|_
dS)NrFr4)rr�rr&�AdaptiveAvgPool2d�avg_pool�AdaptiveMaxPool2d�max_poolrfrgri�68shared_MLPrk�sigmoid)r�in_channels�ratiorrrr�s�zChannelAttentionModule.__init__cCs.|�|�|��}|�|�|��}|�||�Sr)r�r�r�r�)rrZavgoutZmaxoutrrrr�szChannelAttentionModule.forward)r�r rrrrr��sr�cs,eZdZ�fdd�Zdd�Zdd�Z�ZS)�FGFMc	sptt|���tj||ddd�|_tj|dddddd�|_t�tjdddddd�t���|_	t69|dd	�|_dS)70NrFr4r6rCrB�rdr5r�)r�)rr�rr&rg�down�	flow_makerfrkZ	flow_gater��ca)rr��out_channelsrrrr�s�z
FGFM.__init__c
Cs�|\}}|��\}}}}	t�||gggg��|��|j�}71t�dd|��dd��d|�}t�dd|��|d�}	t�	|	�72d�|�73d�fd�}|�|ddd��|��|j�}||�dddd�|74}tj
||dd	�}|S)75Ng�g�?rErr6rrBT)rq)ror�tensor�type_as�tor	�linspace�view�repeatr��	unsqueezerIrr�grid_sample)
r�input�flowro�out_h�out_w�n�crr��norm�gridrrrr�	flow_warp�s"zFGFM.flow_warpcCs�|}|��dd�\}}||f}|�|�}tj||ddd�}|�t�||gd��}	|	dd�dd�dd�dd�f|	dd�dd�dd�dd�f}76}|j||77|d�}|j|||d�}
||
}|�|�}|||
d|}|S)Nr6rmTrnr)ro)	ror�rrrsr�rr�r�r�)rZlowres_featureZhighres_featureZ	h_featurerr�roZ	l_featureZl_feature_upr�Zflow_lZflow_hZl_feature_warpZh_feature_warpZfeature_catZ78flow_gatesZfuse_featurerrrr�s79B80zFGFM.forward)r!r"r#rr�rr$rrrrr��s81r�cs8eZdZgd�ddf�fdd�	Zdd�Zdd	�Z�ZS)82�Decoder)rwrxryrvrCrcs�t���|\}}}}t|d�|_t||d�|_t||d�|_t||d�|_t�	tj83||dddd�tj||ddddd	��|_t�
�fd84d�|D��|_dS)N)r>)r�r�rCr6r)rb�striderdrBFr�cs�g|]�}t�tj|d|�ddd�t�|��t��tj|�|�ddddd�t��tj|�|�ddddd�t��tj|�|ddddd���qS)rBrFr4r�)r&rfrgrhri)�.0rG��decayrr�85<listcomp>s86��z$Decoder.__init__.<locals>.<listcomp>)rrru�structure_enhancer��fgfm_c4�fgfm_c3�fgfm_c2r&rf�ConvTranspose2drg�	classfier�87ModuleListr\)r�in_dimr�Z	num_classZ88c2_channelZ89c3_channelZ90c4_channelZ91c5_channelrr�rr�s92�93�zDecoder.__init__cCs&tj||t�||�gdd�}||�S)NrrF)rr��abs)rrrL�block�frrr�difference_modelingszDecoder.difference_modelingcCs�|dd�\}}}|dd�\}}}|�||�\}	}94|�|||jd�}|�|||jd�}|�|||jd�}
|�|	|95|jd�}|�||
�}|�||�}|�||�}|�|�}t�|�}|S)NrErrr6rB)	r�r�r\r�r�r�r�rr�)rr�r�Zc2xZc3xZc4xZc2yZc3yZc4yZc5xZc5yr�r�r�r�Zc4fZc3fZc2f�predZ	pred_maskrrrrs9697zDecoder.forward)r!r"r#rr�rr$rrrrr��sr�)rF)r�torch.nnr&�torch.nn.functional�98functionalrr�einopsr�model.utilsr�float�boolr�Modulerr%r2rUrarur�r�r�rrrr�<module>s	$--