Best Python code snippet using autotest_python
DeformableTransformer-checkpoint.py
Source:DeformableTransformer-checkpoint.py  
1import copy2from typing import Optional, List3import torch4import torch.nn.functional as F5from torch import nn, Tensor6from .MultiheadAttention import DeformableHeadAttention, generate_ref_points7class Transformer(nn.Module):8    def __init__(self,9                 d_model=512,10                 nhead=8,11                 num_encoder_layers=6,12                 num_decoder_layers=6,13                 dim_feedforward=2048,14                 dropout=0.1,15                 activation="relu",16                 normalize_before=False,17                 return_intermediate_dec=False,18                 scales=4,19                 k=4,20                 last_height=16,21                 last_width=16, ):22        super().__init__()23        encoder_layer = TransformerEncoderLayer(C=d_model,24                                                M=nhead,25                                                K=k,26                                                n_levels=scales,27                                                last_feat_height=last_height,28                                                last_feat_width=last_width,29                                                d_ffn=dim_feedforward,30                                                dropout=dropout,31                                                normalize_before=normalize_before)32        encoder_norm = nn.LayerNorm(d_model) if normalize_before else None33        self.encoder = TransformerEncoder(encoder_layer, num_encoder_layers, encoder_norm)34        decoder_layer = TransformerDecoderLayer(C=d_model,35                                                M=nhead,36                                                K=k,37                                                n_levels=scales,38                                                last_feat_height=last_height,39                                                last_feat_width=last_width,40                                                d_ffn=dim_feedforward,41                                                dropout=dropout,42                                                normalize_before=normalize_before)43        44        decoder_norm = nn.LayerNorm(d_model)45        self.decoder = TransformerDecoder(decoder_layer, num_decoder_layers, decoder_norm,46                                          return_intermediate=return_intermediate_dec)47        self._reset_parameters()48        self.d_model = d_model49        self.nhead = nhead50        self.query_ref_point_proj = nn.Linear(d_model, 2)51    def _reset_parameters(self):52        for p in self.parameters():53            if p.dim() > 1:54                nn.init.xavier_uniform_(p)55    def forward(self, src: List[Tensor],56                masks: List[Tensor],57                query_embed,58                pos_embeds: List[Tensor]):59        bs = src[0].size(0)60        query_embed = query_embed.unsqueeze(1).repeat(1, bs, 1)61        # B, C H, W -> B, H, W, C62        for index in range(len(src)):63            src[index] = src[index].permute(0, 2, 3, 1)64            pos_embeds[index] = pos_embeds[index].permute(0, 2, 3, 1)65        # B, H, W, C66        ref_points = []67        for tensor in src:68            _, height, width, _ = tensor.shape69            ref_point = generate_ref_points(width=width,70                                            height=height)71            ref_point = ref_point.type_as(src[0])72            # H, W, 2 -> B, H, W, 273            ref_point = ref_point.unsqueeze(0).repeat(bs, 1, 1, 1)74            ref_points.append(ref_point)75        tgt = torch.zeros_like(query_embed)76        # List[B, H, W, C]77        memory = self.encoder(src,78                              ref_points,79                              padding_mask=masks,80                              pos_encodings=pos_embeds)81        # L, B, C82        query_ref_point = self.query_ref_point_proj(tgt)83        query_ref_point = F.sigmoid(query_ref_point)84        # Decoder Layers, L, B ,C85        hs = self.decoder(tgt, memory,86                          query_ref_point,87                          memory_key_padding_masks=masks,88                          positional_embeddings=pos_embeds,89                          query_pos=query_embed)90        return hs, query_ref_point, memory91class TransformerEncoder(nn.Module):92    def __init__(self, encoder_layer, num_layers, norm=None):93        super().__init__()94        self.layers = nn.ModuleList([copy.deepcopy(encoder_layer) for i in range(num_layers)])95        self.num_layers = num_layers96        self.norm = norm97    def forward(self, input_features, ref_points, input_masks=None, pos_encodings=None, padding_mask=None):98        output = input_features99        for layer in self.layers:100            outputs = layer(output, ref_points, input_masks =input_masks, padding_masks=padding_mask, pos_encodings =pos_encodings)101        if self.norm is not None:102            for i, output in enumerate(outputs):103                outputs[i] = self.norm(output)104        return outputs105# Decoder 106class TransformerDecoder(nn.Module):107    def __init__(self, decoder_layer, num_layers, norm=None,return_intermediate=False):108        super().__init__()109        self.layers = nn.ModuleList([copy.deepcopy(decoder_layer) for i in range(num_layers)])110        self.num_layers = num_layers111        self.return_intermediate = return_intermediate112        self.norm = norm113        114    def forward(self, query_objects, out_encoder,115                ref_point,116                tgt_mask = None,117                memory_masks = None,118                tgt_key_padding_mask = None,119                memory_key_padding_masks = None,120                positional_embeddings = None,121                query_pos = None):122        123        124        125        # input of the decoder layers126        output = query_objects127        intermediate = []128        for layer in self.layers:129            output = layer(  output, out_encoder,130                             ref_point,131                             tgt_mask = tgt_mask,132                             memory_masks = memory_masks,133                             tgt_key_padding_mask = tgt_key_padding_mask,134                             memory_key_padding_masks = memory_key_padding_masks,135                             positional_embeddings= positional_embeddings,136                             query_poses = query_pos)137            138            139            140            if self.return_intermediate:141                intermediate.append(self.norm(output))142        if self.norm is not None:143            output = self.norm(output)144            if self.return_intermediate:145                intermediate.pop()146                intermediate.append(output)147        if self.return_intermediate:148            return torch.stack(intermediate)149        return output150    151class FeedForward(nn.Module):152    def __init__(self, C=256, d_ffn=1024, dropout=0.1):153        super(FeedForward, self).__init__()154        self.C = C155        self.d_ffn = d_ffn156        self.linear1 = nn.Linear(C, d_ffn)157        self.dropout1 = nn.Dropout(dropout)158        self.linear2 = nn.Linear(d_ffn, C)159        self.dropout2 = nn.Dropout(dropout)160    def forward(self, attended):161        attended_tmp = self.linear2(self.dropout1(F.relu(self.linear1(attended))))162        attended = attended + self.dropout2(attended_tmp)163        return attended 164class TransformerEncoderLayer(nn.Module):165    def __init__(self,C, M, K, n_levels, last_feat_height, last_feat_width, need_attn=False, d_ffn=2048,166                 dropout=0.1, normalize_before=False):167        super().__init__()168        """169        Args:170            - C: dimesension of the embeddings171            - d_ffn : feed forward network dim172            - n_levels: multiscale parameter173            - M: number of attention heads174            - K: number of sampling points175        """176        # self attention177        178        179        180        181        self.self_attn = DeformableHeadAttention(last_height = last_feat_height,last_width = last_feat_width, C = C, M=M, K=K, L = n_levels, dropout=dropout, return_attentions = False)182        self.dropout1 = nn.Dropout(dropout)183        self.norm1 = nn.LayerNorm(C)184        self.norm2 = nn.LayerNorm(C)185        self.norm3 = nn.LayerNorm(C)186        self.normalize_before = normalize_before187        # g_theta188        self.ffn = FeedForward(C, d_ffn, dropout)189    def forward_pre_norm(self, input_features,190                ref_points,191                input_masks=None,192                padding_masks=None,193                pos_encodings=None):194        if input_masks is None:195            input_masks = [None] * len(input_features)196        if padding_masks is None:197            padding_masks = [None] * len(input_features)198        if pos_encodings is None:199            pos_encodings = [None] * len(pos_encodings)200        feats = []201        features = [feature + pos for (feature, pos) in zip(input_features, pos_encodings)] # add pos encodings to features202        for q, ref_point, key_padding_mask, pos in zip(features, ref_points, padding_masks, pos_encodings):203            feat = self.norm1(q) # pre normalization204            feat, attention = self.self_attn(feat, features, ref_point, key_padding_mask, padding_masks)205            q = q + self.dropout1(feat) #206            q = self.norm2(q) #207            q = self.ffn(q)208            feats.append(q)209        return feats210    def forward_post_norm(self, input_features,211                ref_points,212                input_masks=None,213                padding_masks=None,214                pos_encodings=None):215        if input_masks is None:216            input_masks = [None] * len(input_features)217        if padding_masks is None:218            padding_masks = [None] * len(input_features)219        if pos_encodings is None:220            pos_encodings = [None] * len(pos_encodings)221        feats = []222        features = [feature + pos for (feature, pos) in zip(input_features, pos_encodings)] # add pos encodings to features223        for q, ref_point, key_padding_mask, pos in zip(features, ref_points, padding_masks, pos_encodings):224            feat, attention = self.self_attn(q, features, ref_point, key_padding_mask, padding_masks)225            q = q + self.dropout1(feat) #226            q = self.norm1(q) #227            q = self.ffn(q)228            q = self.norm2(q) # post normalization229            feats.append(q)230        return feats231    def forward(self, input_features,232                ref_points,233                input_masks = None,234                padding_masks= None,235               pos_encodings = None):236        if self.normalize_before:237            return self.forward_pre_norm(input_features, ref_points, input_masks, padding_masks, pos_encodings)238        return self.forward_post_norm(input_features, ref_points, input_masks, padding_masks, pos_encodings)239    240class TransformerDecoderLayer(nn.Module):241    def __init__(self, C,242                 M,243                 K,244                 n_levels,245                 last_feat_height,246                 last_feat_width,247                 d_ffn=1024,248                 dropout=0.1,249                 normalize_before=False):250        super().__init__()251        """252        Args:253            - C: dimesension of the embeddings254            - d_ffn : feed forward network dim255            - n_levels: multiscale parameter256            - M: number of attention heads257            - K: number of sampling points258        """259        # Deformable Attention part260        self.def_attn = DeformableHeadAttention(last_height = last_feat_height,last_width = last_feat_width, C = C, M=M, K=K, L = n_levels, dropout=dropout, return_attentions = False) 261        self.dropout1 = nn.Dropout(dropout)262        self.norm1 = nn.LayerNorm(C)263        self.norm2 = nn.LayerNorm(C)264        self.norm3 = nn.LayerNorm(C)265        # Proper Attention Part266        self.self_attn = nn.MultiheadAttention(C, M, dropout=dropout)267        self.dropout2 = nn.Dropout(dropout)268        self.normalize_before = normalize_before269        # the feed forwrd network270        self.ffn = FeedForward(C, d_ffn)271    def forward(self, query_objects, out_encoder,272                     ref_points,273                     tgt_mask = None,274                     memory_masks = None,275                     tgt_key_padding_mask = None,276                     memory_key_padding_masks = None,277                     positional_embeddings = None,278                     query_poses = None):279        if self.normalize_before:280            return self.forward_pre_norm(query_objects, out_encoder,ref_points,tgt_mask,281                             memory_masks,tgt_key_padding_mask,282                             memory_key_padding_masks, positional_embeddings, query_poses)283        return self.forward_post_norm(query_objects, out_encoder,ref_points,tgt_mask,284                         memory_masks,tgt_key_padding_mask,285                         memory_key_padding_masks, positional_embeddings, query_poses)286    def forward_post_norm(self, query_objects, out_encoder,287                     ref_points,288                     tgt_mask = None,289                     memory_masks = None,290                     tgt_key_padding_mask = None,291                     memory_key_padding_masks = None,292                     positional_embeddings = None,293                     query_poses = None):294        """295        Args:296            - tgt : query_embedding passed to the transformer297            - memory : result of the encoder298            - ref_point : linear projection of tgt to 2 dim (in the encoder)299            - memory_key_padding_masks : mask passed to the transformer300            - poses : positional embeddings passed to the transformer301            - query_pos : query_embed passed to the transformer302        """303        # self attention304        q = query_objects + query_poses305        k = q306        query_objects_2 = self.self_attn(q, k, value=query_objects, attn_mask=tgt_mask,key_padding_mask=tgt_key_padding_mask)[0]307        query_objects = query_objects + self.dropout2(query_objects_2)308        query_objects = self.norm1(query_objects)309        # get the output of the encoder with positional embeddings310        out_encoder = [ tensor + pos for tensor, pos in zip(out_encoder, positional_embeddings)] #?311        #query_objects is of same shape as nn.Embedding(number of object queries, C)312        # L, B, C -> B, L, 1, C | L: number of object queries, B: size of batch313        query_objects = query_objects.transpose(0, 1).unsqueeze(dim=2)314        ref_points = ref_points.transpose(0, 1).unsqueeze(dim=2)315        # B, L, 1, 2316        query_objects_2, attention_weights = self.def_attn(query_objects, out_encoder, ref_points,query_mask=None,                                     x_masks=memory_key_padding_masks)317        """if self.need_attn:318            self.attns.append(attns)"""319        query_objects = query_objects + self.dropout2(query_objects_2)320        query_objects = self.norm2(query_objects)321        query_objects = self.ffn(query_objects)322        query_objects = self.norm3(query_objects) #post normalization323        # B, L, 1, C -> L, B, C324        query_objects = query_objects.squeeze(dim=2)325        query_objects = query_objects.transpose(0, 1).contiguous()326        return query_objects327    def forward_pre_norm(self, query_objects, out_encoder,328                     ref_points,329                     tgt_mask = None,330                     memory_masks = None,331                     tgt_key_padding_mask = None,332                     memory_key_padding_masks = None,333                     positional_embeddings = None,334                     query_poses = None):335        """336        Args:337            - query_objects : query_embedding passed to the transformer338            - out_encoder : result of the encoder339            - ref_points : linear projection of tgt to 2 dim (in the encoder)340            - memory_key_padding_masks : mask passed to the transformer341            - positional_embeddings : positional embeddings passed to the transformer342            - query_poses : query_embed passed to the transformer343        """344        # self attention345        query_objects_2 = self.norm1(query_objects)346        q = query_objects_2 + query_poses347        k = q348        query_objects_2 = self.self_attn(q, k, value=query_objects, attn_mask=tgt_mask,key_padding_mask=tgt_key_padding_mask)[0]349        query_objects = query_objects + self.dropout2(query_objects_2)350        query_objects_2 = self.norm2(query_objects)351        # get the output of the encoder with positional embeddings352        out_encoder = [ tensor + pos for tensor, pos in zip(out_encoder, positional_embeddings)]353        #query_objects is of same shape as nn.Embedding(number of object queries, C)354        # L, B, C -> B, L, 1, C | L: number of object queries, B: size of batch355        query_objects = query_objects.transpose(0, 1).unsqueeze(dim=2)356        query_ref_point = query_ref_point.transpose(0, 1).unsqueeze(dim=2)357        # B, L, 1, 2358        query_objects_2, attention_weights = self.def_attn(q, out_encoder, query_ref_point, query_mask=None, x_masks=memory_key_padding_masks)359        """if self.need_attn: 360            self.attns.append(attns)"""361        query_objects = query_objects + self.dropout2(query_objects_2)362        query_objects = self.norm3(query_objects)363        query_objects = self.ffn(query_objects)364        # B, L, 1, C -> L, B, C365        query_objects = query_objects.squeeze(dim=2)366        query_objects = query_objects.transpose(0, 1).contiguous()...decoder-checkpoint.py
Source:decoder-checkpoint.py  
1import torch2import torch.nn.functional as F3from torch import nn, Tensor4from .MultiHeadAttention import DeformableHeadAttention5import copy6class DeformableTransformerDecoderLayer(nn.Module):7    def __init__(self, C, M, K, n_levels, last_feat_height, last_feat_width, d_ffn=1024, dropout=0.1, normalize_before=False):8        super().__init__()9        """10        Args:11            - C: Number of expected features in the decoder inputs.12            - d_ffn : feed forward network dimension.13            - n_levels: multiscale parameter.14            - M: number of attention heads.15            - K: number of sampling points.16        """17        # Deformable Attention part18        self.def_attn = DeformableHeadAttention(last_height = last_feat_height,last_width = last_feat_width, C = C, M=M, K=K, L = n_levels, dropout=dropout, return_attentions = False) 19        self.dropout1 = nn.Dropout(dropout)20        self.norm1 = nn.LayerNorm(C)21        self.norm2 = nn.LayerNorm(C)22        self.norm3 = nn.LayerNorm(C)23        # Proper Attention Part24        self.self_attn = nn.MultiheadAttention(C, M, dropout=dropout)25        self.dropout2 = nn.Dropout(dropout)26        self.normalize_before = normalize_before27        # the feed forward network28        self.ffn = FeedForward(C, d_ffn)29        30    def forward(self, query_objects, out_encoder, ref_points, tgt_mask = None, memory_masks = None,31                tgt_key_padding_mask = None, memory_key_padding_masks = None,positional_embeddings = None,32                query_poses = None):33        """34        Args:35            - query_objects : query_embedding passed to the transformer.36            - out_encoder : result of the encoder.37            - ref_points : linear projection of tgt to 2 dim (in the encoder).38            - memory_key_padding_masks : the mask passed to the transformer.39            - tgt_key_padding_mask : the mask for target keys per batch.40            - positional_embeddings : positional embeddings passed to the transformer.41            - query_poses : query_embed passed to the transformer.42        """43        if self.normalize_before:44            return self.forward_pre_norm(query_objects, out_encoder,ref_points,tgt_mask,45                             memory_masks,tgt_key_padding_mask,46                             memory_key_padding_masks, positional_embeddings, query_poses)47        return self.forward_post_norm(query_objects, out_encoder,ref_points,tgt_mask,48                         memory_masks,tgt_key_padding_mask,49                         memory_key_padding_masks, positional_embeddings, query_poses)50    def forward_post_norm(self, query_objects, out_encoder, ref_points, tgt_mask = None, memory_masks = None, 51                          tgt_key_padding_mask = None, memory_key_padding_masks = None, positional_embeddings = None, 52                          query_poses = None):53        # self attention54        q = query_objects + query_poses55        k = q56        query_objects_2 = self.self_attn(q, k, value=query_objects, attn_mask=tgt_mask,key_padding_mask=tgt_key_padding_mask)[0]57        query_objects = query_objects + self.dropout2(query_objects_2)58        query_objects = self.norm1(query_objects)59        # get the output of the encoder with positional embeddings60        out_encoder = [ tensor + pos for tensor, pos in zip(out_encoder, positional_embeddings)] #?61        #query_objects is of same shape as nn.Embedding(number of object queries, C)62        # L, B, C -> B, L, 1, C | L: number of object queries, B: size of batch63        query_objects = query_objects.transpose(0, 1).unsqueeze(dim=2)64        ref_points = ref_points.transpose(0, 1).unsqueeze(dim=2)65        # B, L, 1, 266        query_objects_2, attention_weights = self.def_attn(query_objects, out_encoder, ref_points,query_mask=None, x_masks=memory_key_padding_masks)67        query_objects = query_objects + self.dropout2(query_objects_2)68        query_objects = self.norm2(query_objects)69        query_objects = self.ffn(query_objects)70        query_objects = self.norm3(query_objects) #post normalization71        # B, L, 1, C -> L, B, C72        query_objects = query_objects.squeeze(dim=2)73        query_objects = query_objects.transpose(0, 1).contiguous()74        return query_objects75    def forward_pre_norm(self, query_objects, out_encoder, ref_points, tgt_mask = None, memory_masks = None, 76                         tgt_key_padding_mask = None, memory_key_padding_masks = None, positional_embeddings = None,77                         query_poses = None):78        # self attention79        query_objects_2 = self.norm1(query_objects)80        q = query_objects_2 + query_poses81        k = q82        query_objects_2 = self.self_attn(q, k, value=query_objects, attn_mask=tgt_mask,key_padding_mask=tgt_key_padding_mask)[0]83        query_objects = query_objects + self.dropout2(query_objects_2)84        query_objects_2 = self.norm2(query_objects)85        # get the output of the encoder with positional embeddings86        out_encoder = [ tensor + pos for tensor, pos in zip(out_encoder, positional_embeddings)]87        #query_objects is of same shape as nn.Embedding(number of object queries, C)88        # L, B, C -> B, L, 1, C | L: number of object queries, B: size of batch89        query_objects = query_objects.transpose(0, 1).unsqueeze(dim=2)90        query_ref_point = query_ref_point.transpose(0, 1).unsqueeze(dim=2)91        # B, L, 1, 292        query_objects_2, attention_weights = self.def_attn(q, out_encoder, query_ref_point, query_mask=None, x_masks=memory_key_padding_masks)93        query_objects = query_objects + self.dropout2(query_objects_2)94        query_objects = self.norm3(query_objects)95        query_objects = self.ffn(query_objects)96        # B, L, 1, C -> L, B, C97        query_objects = query_objects.squeeze(dim=2)98        query_objects = query_objects.transpose(0, 1).contiguous()99        return query_objects100class DeformableTransformerDecoder(nn.Module):101    102    def __init__(self, decoder_layer, num_layers, norm=None,return_intermediate=False):103        """104        Args:105            - decoder_layer: an instance of the DeformableTransformerDecoderLayer() class.106            - num_layers: the number of sub-decoder-layers in the decoder.107            - norm: the layer normalization component (optional).108        """109        super().__init__()110        self.layers = nn.ModuleList([copy.deepcopy(decoder_layer) for i in range(num_layers)])111        self.num_layers = num_layers112        self.return_intermediate = return_intermediate113        self.norm = norm114        115    def forward(self, query_objects, out_encoder,116                ref_point,117                tgt_mask = None,118                memory_masks = None,119                tgt_key_padding_mask = None,120                memory_key_padding_masks = None,121                positional_embeddings = None,122                query_pos = None):123        124        # input of the decoder layers125        output = query_objects126        intermediate = []127        for layer in self.layers:128            output = layer(output, out_encoder, ref_point, tgt_mask = tgt_mask,memory_masks = memory_masks,tgt_key_padding_mask = tgt_key_padding_mask,129                           memory_key_padding_masks = memory_key_padding_masks,positional_embeddings= positional_embeddings,query_poses = query_pos)130            if self.return_intermediate:131                intermediate.append(self.norm(output))132        if self.norm is not None:133            output = self.norm(output)134            if self.return_intermediate:135                intermediate.pop()136                intermediate.append(output)137        if self.return_intermediate:138            return torch.stack(intermediate)139        return output140class FeedForward(nn.Module):141    """Simple Feed Forward Network"""142    def __init__(self, C=256, d_ffn=1024, dropout=0.5):143        super(FeedForward, self).__init__()144        self.C = C145        self.d_ffn = d_ffn146        self.linear1 = nn.Linear(C, d_ffn)147        self.dropout1 = nn.Dropout(dropout)148        self.linear2 = nn.Linear(d_ffn, C)149        self.dropout2 = nn.Dropout(dropout)150    def forward(self, attended):151        attended_tmp = self.linear2(self.dropout1(F.relu(self.linear1(attended))))152        attended = attended + self.dropout2(attended_tmp)...decoder.py
Source:decoder.py  
1import torch2import torch.nn.functional as F3from torch import nn, Tensor4from .MultiHeadAttention import DeformableHeadAttention5import copy6class DeformableTransformerDecoderLayer(nn.Module):7    def __init__(self, C, M, K, n_levels, last_feat_height, last_feat_width, d_ffn=1024, dropout=0.1, normalize_before=False):8        super().__init__()9        """10        Args:11            - C: Number of expected features in the decoder inputs.12            - d_ffn : feed forward network dimension.13            - n_levels: multiscale parameter.14            - M: number of attention heads.15            - K: number of sampling points.16        """17        # Deformable Attention part18        self.def_attn = DeformableHeadAttention(last_height = last_feat_height,last_width = last_feat_width, C = C, M=M, K=K, L = n_levels, dropout=dropout, return_attentions = False) 19        self.dropout1 = nn.Dropout(dropout)20        self.norm1 = nn.LayerNorm(C)21        self.norm2 = nn.LayerNorm(C)22        self.norm3 = nn.LayerNorm(C)23        # Proper Attention Part24        self.self_attn = nn.MultiheadAttention(C, M, dropout=dropout)25        self.dropout2 = nn.Dropout(dropout)26        self.normalize_before = normalize_before27        # the feed forward network28        self.ffn = FeedForward(C, d_ffn)29        30    def forward(self, query_objects, out_encoder, ref_points, tgt_mask = None, memory_masks = None,31                tgt_key_padding_mask = None, memory_key_padding_masks = None,positional_embeddings = None,32                query_poses = None):33        """34        Args:35            - query_objects : query_embedding passed to the transformer.36            - out_encoder : result of the encoder.37            - ref_points : linear projection of tgt to 2 dim (in the encoder).38            - memory_key_padding_masks : the mask passed to the transformer.39            - tgt_key_padding_mask : the mask for target keys per batch.40            - positional_embeddings : positional embeddings passed to the transformer.41            - query_poses : query_embed passed to the transformer.42        """43        if self.normalize_before:44            return self.forward_pre_norm(query_objects, out_encoder,ref_points,tgt_mask,45                             memory_masks,tgt_key_padding_mask,46                             memory_key_padding_masks, positional_embeddings, query_poses)47        return self.forward_post_norm(query_objects, out_encoder,ref_points,tgt_mask,48                         memory_masks,tgt_key_padding_mask,49                         memory_key_padding_masks, positional_embeddings, query_poses)50    def forward_post_norm(self, query_objects, out_encoder, ref_points, tgt_mask = None, memory_masks = None, 51                          tgt_key_padding_mask = None, memory_key_padding_masks = None, positional_embeddings = None, 52                          query_poses = None):53        # self attention54        q = query_objects + query_poses55        k = q56        query_objects_2 = self.self_attn(q, k, value=query_objects, attn_mask=tgt_mask,key_padding_mask=tgt_key_padding_mask)[0]57        query_objects = query_objects + self.dropout2(query_objects_2)58        query_objects = self.norm1(query_objects)59        # get the output of the encoder with positional embeddings60        out_encoder = [ tensor + pos for tensor, pos in zip(out_encoder, positional_embeddings)] #?61        #query_objects is of same shape as nn.Embedding(number of object queries, C)62        # L, B, C -> B, L, 1, C | L: number of object queries, B: size of batch63        query_objects = query_objects.transpose(0, 1).unsqueeze(dim=2)64        ref_points = ref_points.transpose(0, 1).unsqueeze(dim=2)65        # B, L, 1, 266        query_objects_2, attention_weights = self.def_attn(query_objects, out_encoder, ref_points,query_mask=None, x_masks=memory_key_padding_masks)67        query_objects = query_objects + self.dropout2(query_objects_2)68        query_objects = self.norm2(query_objects)69        query_objects = self.ffn(query_objects)70        query_objects = self.norm3(query_objects) #post normalization71        # B, L, 1, C -> L, B, C72        query_objects = query_objects.squeeze(dim=2)73        query_objects = query_objects.transpose(0, 1).contiguous()74        return query_objects75    def forward_pre_norm(self, query_objects, out_encoder, ref_points, tgt_mask = None, memory_masks = None, 76                         tgt_key_padding_mask = None, memory_key_padding_masks = None, positional_embeddings = None,77                         query_poses = None):78        # self attention79        query_objects_2 = self.norm1(query_objects)80        q = query_objects_2 + query_poses81        k = q82        query_objects_2 = self.self_attn(q, k, value=query_objects, attn_mask=tgt_mask,key_padding_mask=tgt_key_padding_mask)[0]83        query_objects = query_objects + self.dropout2(query_objects_2)84        query_objects_2 = self.norm2(query_objects)85        # get the output of the encoder with positional embeddings86        out_encoder = [ tensor + pos for tensor, pos in zip(out_encoder, positional_embeddings)]87        #query_objects is of same shape as nn.Embedding(number of object queries, C)88        # L, B, C -> B, L, 1, C | L: number of object queries, B: size of batch89        query_objects = query_objects.transpose(0, 1).unsqueeze(dim=2)90        query_ref_point = query_ref_point.transpose(0, 1).unsqueeze(dim=2)91        # B, L, 1, 292        query_objects_2, attention_weights = self.def_attn(q, out_encoder, query_ref_point, query_mask=None, x_masks=memory_key_padding_masks)93        query_objects = query_objects + self.dropout2(query_objects_2)94        query_objects = self.norm3(query_objects)95        query_objects = self.ffn(query_objects)96        # B, L, 1, C -> L, B, C97        query_objects = query_objects.squeeze(dim=2)98        query_objects = query_objects.transpose(0, 1).contiguous()99        return query_objects100class DeformableTransformerDecoder(nn.Module):101    102    def __init__(self, decoder_layer, num_layers, norm=None,return_intermediate=False):103        """104        Args:105            - decoder_layer: an instance of the DeformableTransformerDecoderLayer() class.106            - num_layers: the number of sub-decoder-layers in the decoder.107            - norm: the layer normalization component (optional).108        """109        super().__init__()110        self.layers = nn.ModuleList([copy.deepcopy(decoder_layer) for i in range(num_layers)])111        self.num_layers = num_layers112        self.return_intermediate = return_intermediate113        self.norm = norm114        115    def forward(self, query_objects, out_encoder, ref_point, tgt_mask = None, memory_masks = None,116                tgt_key_padding_mask = None, memory_key_padding_masks = None, positional_embeddings = None, query_pos = None):117        118        # input of the decoder layers119        output = query_objects120        intermediate = []121        for layer in self.layers:122            output = layer(output, out_encoder, ref_point, tgt_mask = tgt_mask,memory_masks = memory_masks,tgt_key_padding_mask = tgt_key_padding_mask,123                           memory_key_padding_masks = memory_key_padding_masks,positional_embeddings= positional_embeddings,query_poses = query_pos)124            if self.return_intermediate:125                intermediate.append(self.norm(output))126        if self.norm is not None:127            output = self.norm(output)128            if self.return_intermediate:129                intermediate.pop()130                intermediate.append(output)131        if self.return_intermediate:132            return torch.stack(intermediate)133        return output134class FeedForward(nn.Module):135    """Simple Feed Forward Network"""136    def __init__(self, C=256, d_ffn=1024, dropout=0.5):137        super(FeedForward, self).__init__()138        self.C = C139        self.d_ffn = d_ffn140        self.linear1 = nn.Linear(C, d_ffn)141        self.dropout1 = nn.Dropout(dropout)142        self.linear2 = nn.Linear(d_ffn, C)143        self.dropout2 = nn.Dropout(dropout)144    def forward(self, attended):145        attended_tmp = self.linear2(self.dropout1(F.relu(self.linear1(attended))))146        attended = attended + self.dropout2(attended_tmp)...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
