Team Ai
Apppublic

xdecoder/Instruct-X-Decoder

sourceHugging Faceafl-3.0updated 3y agoView on Hugging Face
163likes
transformer_encoder_fpn.cpython-38.pyc116 linesDownload Raw Back to __pycache__
1U

2E$�cn1�@sddlZddlZddlmZmZmZmZmZm	Z	ddl3Z4ddl5mZddlm
ZddlmZmZmZmZddlmZddlmmZddlmZmZmZmZdd	lmZd6dlm Z m!Z!m"Z"m#Z#dd
l$m%Z%ddl&m'Z'Gdd�dej(�Z)Gdd�dej(�Z*Gdd�de)�Z+edd��Z,dS)�N)�Callable�Dict�List�Optional�Tuple�Union)�nn)�7functional)�xavier_uniform_�	constant_�uniform_�normal_)�autocast)�Conv2d�8DeformConv�	ShapeSpec�get_norm�)�register_encoder�)�TransformerEncoder�TransformerEncoderLayer�_get_clones�_get_activation_fn�)�PositionEmbeddingSine)�configurablec	speZdZdd�eeefeeeee	ee9fd��fdd�Zeeeefd�dd��Z
d	d10�Zd
dd�Z�ZS)�BasePixelDecoderN��norm)�input_shape�conv_dim�mask_dim�mask_onrcs�t���t|��dd�d�}dd�|D�|_dd�|D�}g}g}|dk}	t|�D�]\}11}|12t|j�dkr�t||�}t||d	dd|	|t	j13d14�}
t�|
�|�
d�|15d�|
�|�d�|�|
�qTt||�}t||�}t||d|	|d
�}t||d	dd|	|t	j16d17�}
t�|�t�|
�|�
d�|18d�|�|�
d�|19d�|
�|�|�|�|
�qT|ddd�|_|ddd�|_||_|j�r�||_t||d	ddd�|_t�|j�d	|_dS)at20        NOTE: this interface is experimental.21        Args:22            input_shape: shapes (channels and stride) of the input features23            conv_dims: number of output channels for the intermediate conv layers.24            mask_dim: number of output channels for the final conv layer.25            norm (str or callable): normalization for all conv layers26        cSs27|djS�Nr��stride��x�r)�F/data/arXiv/demo/Demo/xdecoder/body/encoder/transformer_encoder_fpn.py�<lambda>+�z+BasePixelDecoder.__init__.<locals>.<lambda>��keycSsg|]\}}|�qSr)r)��.0�k�vr)r)r*�28<listcomp>,sz-BasePixelDecoder.__init__.<locals>.<listcomp>cSsg|]\}}|j�qSr)��channelsr/r)r)r*r3-s�rr��kernel_sizer&�padding�biasr�29activation�layer_{}N)r8r:rz30adapter_{}�����)r8r&r9)�super�__init__�sorted�items�in_features�	enumerate�lenrr�F�relu�weight_init�c2_xavier_fill�31add_module�format�append�
lateral_convs�output_convsr#r"�
mask_features�maskformer_num_feature_levels)�selfr r!r"r#r�feature_channelsrLrM�use_bias�idx�in_channels�output_norm�output_conv�lateral_norm�lateral_conv��	__class__r)r*r?s~3233�34 35363738��39 404142�zBasePixelDecoder.__init__�r csR|dd�i}�fdd�|��D�|d<�d|d<�d|d	<�d43|d<|S)N�MODEL�ENCODERcs"i|]\}}|�dkr||�qS)�IN_FEATURESr)r/��enc_cfgr)r*�44<dictcomp>tsz0BasePixelDecoder.from_config.<locals>.<dictcomp>r �	CONVS_DIMr!�MASK_DIMr"�NORMr)rA)�cls�cfgr �retr)r_r*�from_configps45�46zBasePixelDecoder.from_configcCs�g}d}t|jddd��D]�\}}||}|j|}|j|}|dkrR||�}	n.||�}47|48tj|	|49jdd�dd�}	||	�}	||jkr|�|	�|d7}q|j	r�|�50|	�nd}|d|fS�Nrr=������nearest)�size�moder)rCrBrLrMrE�interpolate�shaperOrKr#rN)rP�features�multi_scale_features�num_cur_levelsrS�fr(rXrV�y�cur_fpnrNr)r)r*�forward_features|s 515253545556z!BasePixelDecoder.forward_featurescCst�t�}|�d�|�|�S�NzHCalling forward() may cause unpredicted behavior of PixelDecoder module.��logging�	getLogger�__name__�warningrv�rPrp�targets�loggerr)r)r*�forward�s5758zBasePixelDecoder.forward)N)r{�59__module__�__qualname__r�strr�int�boolrrrr?�classmethodrhrvr��
__classcell__r)r)rYr*rs�60�Xrcs.eZdZd�fdd	�	Zd61d�Zdd
�Z�ZS)�TransformerEncoderOnly����皙�����?rFFc62sTt���t||||||�}|r*t�|�nd}	t|||	�|_|��||_||_	dS)N)63r>r?rr�	LayerNormr�encoder�_reset_parameters�d_model�nhead)64rPr�r��num_encoder_layers�dim_feedforward�dropoutr;�normalize_before�
encoder_layer�encoder_normrYr)r*r?�s65 66�zTransformerEncoderOnly.__init__cCs*|��D]}|��dkrtj�|�qdSr$)�67parameters�dimr�initr68)rP�pr)r)r*r��sz(TransformerEncoderOnly._reset_parametersc	Csr|j\}}}}|�d��ddd�}|�d��ddd�}|dk	rH|�d�}|j|||d�}|�ddd��||||�S)Nrrr)�src_key_padding_mask�pos)ro�flatten�permuter��view)	rP�src�mask�	pos_embed�bs�c�h�w�memoryr)r)r*r��s69zTransformerEncoderOnly.forward)r�r�r�r�r�rFF)r{r�r�r?r�r�r�r)r)rYr*r��s�r�cs�eZdZedd�eeefeeeee	eeee70eeefd�71�fdd��Z
eeeefd��fdd��Zd	d72�Zd
dd�Z�ZS)�TransformerEncoderPixelDecoderNr)73r �transformer_dropout�transformer_nheads�transformer_dim_feedforward�transformer_enc_layers�transformer_pre_normr!r"r#rc	74s"t�j||||75|	d�t|��dd�d�}dd�|D�|_dd�|D�}dd�|D�}|t|j�d	}
t|
|d	d76�|_t�	|j�t77||||||d�|_|d}t|d
d�|_
|78dk}t|79|�}t||dd	d	||tjd�}t�	|�t|d�t|j���|�d�t|j��|�||jd<dS)a�80        NOTE: this interface is experimental.81        Args:82            input_shape: shapes (channels and stride) of the input features83            transformer_dropout: dropout probability in transformer84            transformer_nheads: number of heads in transformer85            transformer_dim_feedforward: dimension of feedforward network86            transformer_enc_layers: number of transformer encoder layers87            transformer_pre_norm: whether to use pre-layernorm or not88            conv_dims: number of output channels for the intermediate conv layers.89            mask_dim: number of output channels for the final conv layer.90            norm (str or callable): normalization for all conv layers91        )r!r"rr#cSs92|djSr$r%r'r)r)r*r+�r,z9TransformerEncoderPixelDecoder.__init__.<locals>.<lambda>r-cSsg|]\}}|�qSr)r)r/r)r)r*r3�sz;TransformerEncoderPixelDecoder.__init__.<locals>.<listcomp>cSsg|]\}}|j�qSr)r%r/r)r)r*r3�scSsg|]\}}|j�qSr)r4r/r)r)r*r3�sr)r8)r�r�r�r�r�r�rT)�	normalizer6rr7r<rN)r>r?r@rArBrDr�93input_projrGrHr��transformerr�pe_layerrrErF�delattrrJrIrM)rPr r�r�r�r�r�r!r"r#r�feature_stridesrQrTZN_stepsrRrUrVrYr)r*r?�sD�94�95 96z'TransformerEncoderPixelDecoder.__init__r[csz|dd}|dd}t��||�}|d|d<|d|d<|d|d	<|d97|d<|d|d
<|ddd|d<|S)Nr\r]�DECODERZDROPOUTr�ZNHEADSr�ZDIM_FEEDFORWARDr�ZTRANSFORMER_ENC_LAYERSr�ZPRE_NORMr��MASKr#)r>rh)rerfr r`�dec_cfgrgrYr)r*rhsz*TransformerEncoderPixelDecoder.from_configcCs�g}d}t|jddd��D]�\}}||}|j|}|j|}|dkrx|�|�}	|�|�}98|�|	d|99�}	||	�}|	}n.||�}
|
tj||
j	dd�dd�}||�}||j100kr|�|�|d7}q|jr�|�
|�nd}|||fSri)rCrBrLrMr�r�r�rErnrorOrKr#rN)rPrprqrrrSrsr(rXrVr�r�rt�transformer_encoder_featuresrurNr)r)r*rvs(101102103104105106107z/TransformerEncoderPixelDecoder.forward_featurescCst�t�}|�d�|�|�Srwrxr}r)r)r*r�1s108109z&TransformerEncoderPixelDecoder.forward)N)r{r�r�rrr�r�floatr�r�rrrr?r�rhrvr�r�r)r)rYr*r��s$
�110�Br�cCs2t||�}t|dd�}t|�s.tdt�d���|S)zP111    Build a pixel decoder from `cfg.MODEL.MASK_FORMER.PIXEL_DECODER_NAME`.112    rvNztOnly SEM_SEG_HEADS with forward_features method can be used as pixel decoder. Please implement forward_features for z to only return mask features.)r��getattr�callable�113ValueError�name)rfr �modelrvr)r)r*�get_transformer_encoder_fpn8s114115�r�)-ry�numpy�np�typingrrrrrr�torchr�torch.nnr	rEZ
torch.nn.initr116rrr
Ztorch.cuda.amprZfvcore.nn.weight_initrG�detectron2.layersrrrr�registryrZtransformer_blocksrrrr�modulesr�utilsr�Modulerr�r�r�r)r)r)r*�<module>s& *v