예제 #1
0
    def __init__(self,
                 dim,
                 num_heads,
                 mlp_ratio=4.,
                 qkv_bias=False,
                 qk_scale=None,
                 drop=0.,
                 attn_drop=0.,
                 drop_path=0.,
                 norm_layer=nn.LayerNorm):
        super().__init__()
        self.norm1 = norm_layer(dim)
        self.attn = Attention(dim,
                              num_heads=num_heads,
                              qkv_bias=qkv_bias,
                              qk_scale=qk_scale,
                              attn_drop=attn_drop,
                              proj_drop=drop)
        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()

        #########################################
        # Origianl implementation
        # self.norm2 = norm_layer(dim)
        #         mlp_hidden_dim = int(dim * mlp_ratio)
        #         self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)
        #########################################

        # Replace the MLP layer by LocalityFeedForward.
        self.conv = LocalityFeedForward(dim,
                                        dim,
                                        1,
                                        mlp_ratio,
                                        act='hs+se',
                                        reduction=dim // 4)
예제 #2
0
    def __init__(
        self,
        dim,
        num_heads,
        mlp_ratio=3,
        drop_path=0.0,
        qkv_bias=True,
        qk_scale=None,
        norm_layer=partial(nn.LayerNorm, eps=1e-6),
        shared_cpe=None,
        shared_crpe=None,
    ):
        super().__init__()

        self.cpe = shared_cpe
        self.crpe = shared_crpe
        self.factoratt_crpe = FactorAtt_ConvRelPosEnc(
            dim,
            num_heads=num_heads,
            qkv_bias=qkv_bias,
            qk_scale=qk_scale,
            shared_crpe=shared_crpe,
        )
        self.mlp = Mlp(in_features=dim, hidden_features=dim * mlp_ratio)
        self.drop_path = DropPath(
            drop_path) if drop_path > 0.0 else nn.Identity()

        self.norm1 = norm_layer(dim)
        self.norm2 = norm_layer(dim)
예제 #3
0
 def __init__(self,
              dim,
              num_heads,
              mlp_ratio=4.,
              qkv_bias=False,
              qk_scale=None,
              qk_reduce=1,
              drop=0.,
              attn_drop=0.,
              drop_path=0.,
              norm_layer=nn.LayerNorm,
              act='hs+se',
              reduction=4,
              wo_dp_conv=False,
              dp_first=False):
     super().__init__()
     self.norm1 = norm_layer(dim)
     self.attn = Attention(dim,
                           num_heads=num_heads,
                           qkv_bias=qkv_bias,
                           qk_scale=qk_scale,
                           qk_reduce=qk_reduce,
                           attn_drop=attn_drop,
                           proj_drop=drop)
     # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
     # The MLP is replaced by the conv layers.
     self.conv = LocalityFeedForward(dim, dim, 1, mlp_ratio, act, reduction,
                                     wo_dp_conv, dp_first)
예제 #4
0
 def __init__(
     self,
     dim,
     drop=0.0,
     drop_path=0.0,
     act_layer=nn.GELU,
     init_values=1e-4,
     num_patches=196,
 ):
     super().__init__()
     self.norm1 = Affine(dim)
     self.attn = nn.Linear(num_patches, num_patches)
     self.drop_path = DropPath(
         drop_path) if drop_path > 0.0 else nn.Identity()
     self.norm2 = Affine(dim)
     self.mlp = Mlp(
         in_features=dim,
         hidden_features=int(4.0 * dim),
         act_layer=act_layer,
         drop=drop,
     )
     self.gamma_1 = nn.Parameter(init_values * torch.ones((dim)),
                                 requires_grad=True)
     self.gamma_2 = nn.Parameter(init_values * torch.ones((dim)),
                                 requires_grad=True)
예제 #5
0
    def __init__(self, dim, input_resolution, num_heads, window_size=7, shift_size=0,
                 mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0.,
                 act_layer=nn.GELU, norm_layer=nn.LayerNorm):
        super().__init__()
        self.dim = dim
        self.input_resolution = input_resolution
        self.num_heads = num_heads
        self.window_size = window_size
        self.shift_size = shift_size
        self.mlp_ratio = mlp_ratio
        if min(self.input_resolution) <= self.window_size:
            # if window size is larger than input resolution, we don't partition windows
            self.shift_size = 0
            self.window_size = min(self.input_resolution)
        assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size"

        self.norm1 = norm_layer(dim)
        self.attn = WindowAttention(
            dim, window_size=to_2tuple(self.window_size), num_heads=num_heads,
            qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop)

        self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)
        self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)

        if self.shift_size > 0:
            attn_mask = self.calculate_mask(self.input_resolution)
        else:
            attn_mask = None

        self.register_buffer("attn_mask", attn_mask)
예제 #6
0
    def __init__(self, outer_dim, inner_dim, outer_head, inner_head, num_words, mlp_ratio=4.,
                 qkv_bias=False, qk_scale=None, drop=0., attn_drop=0., drop_path=0., act_layer=nn.GELU,
                 norm_layer=nn.LayerNorm, se=0, sr_ratio=1):
        super().__init__()
        self.has_inner = inner_dim > 0
        if self.has_inner:
            # Inner
            self.inner_norm1 = norm_layer(num_words * inner_dim)
            self.inner_attn = Attention(
                inner_dim, num_heads=inner_head, qkv_bias=qkv_bias,
                qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop)
            self.inner_norm2 = norm_layer(num_words * inner_dim)
            self.inner_mlp = Mlp(in_features=inner_dim, hidden_features=int(inner_dim * mlp_ratio),
                                 out_features=inner_dim, act_layer=act_layer, drop=drop)

            self.proj_norm1 = norm_layer(num_words * inner_dim)
            self.proj = nn.Linear(num_words * inner_dim, outer_dim, bias=False)
            self.proj_norm2 = norm_layer(outer_dim)
        # Outer
        self.outer_norm1 = norm_layer(outer_dim)
        self.outer_attn = Attention(
            outer_dim, num_heads=outer_head, qkv_bias=qkv_bias,
            qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop, sr_ratio=sr_ratio)
        self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
        self.outer_norm2 = norm_layer(outer_dim)
        self.outer_mlp = Mlp(in_features=outer_dim, hidden_features=int(outer_dim * mlp_ratio),
                             out_features=outer_dim, act_layer=act_layer, drop=drop)
        # SE
        self.se = se
        self.se_layer = None
        if self.se > 0:
            self.se_layer = SE(outer_dim, 0.25)
예제 #7
0
 def __init__(self,
              dim,
              num_heads,
              mlp_ratio=4.,
              qkv_bias=False,
              qk_scale=None,
              drop=0.,
              attn_drop=0.,
              drop_path=0.,
              act_layer=nn.GELU,
              norm_layer=nn.LayerNorm,
              Attention_block=Class_Attention,
              Mlp_block=Mlp,
              init_values=1e-4):
     super().__init__()
     self.norm1 = norm_layer(dim)
     self.attn = Attention_block(dim,
                                 num_heads=num_heads,
                                 qkv_bias=qkv_bias,
                                 qk_scale=qk_scale,
                                 attn_drop=attn_drop,
                                 proj_drop=drop)
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
     self.norm2 = norm_layer(dim)
     mlp_hidden_dim = int(dim * mlp_ratio)
     self.mlp = Mlp_block(in_features=dim,
                          hidden_features=mlp_hidden_dim,
                          act_layer=act_layer,
                          drop=drop)
     self.gamma_1 = nn.Parameter(init_values * torch.ones((dim)),
                                 requires_grad=True)
     self.gamma_2 = nn.Parameter(init_values * torch.ones((dim)),
                                 requires_grad=True)
예제 #8
0
    def __init__(self,
                 dim,
                 kernel_size,
                 padding,
                 stride=1,
                 num_heads=1,
                 mlp_ratio=3.,
                 attn_drop=0.,
                 drop_path=0.,
                 act_layer=nn.GELU,
                 norm_layer=nn.LayerNorm,
                 qkv_bias=False,
                 qk_scale=None):
        super().__init__()
        self.norm1 = norm_layer(dim)
        self.attn = OutlookAttention(dim,
                                     num_heads,
                                     kernel_size=kernel_size,
                                     padding=padding,
                                     stride=stride,
                                     qkv_bias=qkv_bias,
                                     qk_scale=qk_scale,
                                     attn_drop=attn_drop)

        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()

        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)
        self.mlp = Mlp(in_features=dim,
                       hidden_features=mlp_hidden_dim,
                       act_layer=act_layer)
예제 #9
0
    def __init__(self,
                 dim,
                 num_heads,
                 mlp_ratio=4.,
                 qkv_bias=False,
                 qk_scale=None,
                 drop=0.,
                 attn_drop=0.,
                 drop_path=0.,
                 act_layer=nn.GELU,
                 norm_layer=nn.LayerNorm,
                 use_talk=True):
        super().__init__()
        self.norm1 = norm_layer(dim)
        self.attn = Attention(dim,
                              num_heads=num_heads,
                              qkv_bias=qkv_bias,
                              qk_scale=qk_scale,
                              attn_drop=attn_drop,
                              proj_drop=drop,
                              use_talk=use_talk)
        # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here
        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)

        self.mlp = Mlp(in_features=dim,
                       hidden_features=mlp_hidden_dim,
                       act_layer=act_layer,
                       drop=drop)
예제 #10
0
    def __init__(self,
                 input_dim,
                 output_dim,
                 head_dim,
                 window_size,
                 drop_path,
                 type='W',
                 input_resolution=None):
        """ SwinTransformer Block
        """
        super(Block, self).__init__()
        self.input_dim = input_dim
        self.output_dim = output_dim
        assert type in ['W', 'SW']
        self.type = type
        if input_resolution <= window_size:
            self.type = 'W'

        print("Block Initial Type: {}, drop_path_rate:{:.6f}".format(
            self.type, drop_path))
        self.ln1 = nn.LayerNorm(input_dim)
        self.msa = WMSA(input_dim, input_dim, head_dim, window_size, self.type)
        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()
        self.ln2 = nn.LayerNorm(input_dim)
        self.mlp = nn.Sequential(
            nn.Linear(input_dim, 4 * input_dim),
            nn.GELU(),
            nn.Linear(4 * input_dim, output_dim),
        )
예제 #11
0
 def __init__(
     self,
     dim,
     seq_len,
     mlp_ratio=(0.5, 4.0),
     mlp_layer=Mlp,
     norm_layer=partial(nn.LayerNorm, eps=1e-6),
     act_layer=nn.GELU,
     drop=0.0,
     drop_path=0.0,
 ):
     super().__init__()
     tokens_dim, channels_dim = [int(x * dim) for x in to_2tuple(mlp_ratio)]
     self.norm1 = norm_layer(dim)
     self.mlp_tokens = mlp_layer(seq_len,
                                 tokens_dim,
                                 act_layer=act_layer,
                                 drop=drop)
     self.drop_path = DropPath(
         drop_path) if drop_path > 0.0 else nn.Identity()
     self.norm2 = norm_layer(dim)
     self.mlp_channels = mlp_layer(dim,
                                   channels_dim,
                                   act_layer=act_layer,
                                   drop=drop)
예제 #12
0
파일: tnt.py 프로젝트: hannabros/vision.pjt
 def __init__(self, dim, in_dim, num_pixel, num_heads=12, in_num_head=4, mlp_ratio=4.,
         qkv_bias=False, drop=0., attn_drop=0., drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm):
     super().__init__()
     # Inner transformer
     self.norm_in = norm_layer(in_dim)
     self.attn_in = Attention(
         in_dim, in_dim, num_heads=in_num_head, qkv_bias=qkv_bias,
         attn_drop=attn_drop, proj_drop=drop)
     
     self.norm_mlp_in = norm_layer(in_dim)
     self.mlp_in = Mlp(in_features=in_dim, hidden_features=int(in_dim * 4),
         out_features=in_dim, act_layer=act_layer, drop=drop)
     
     self.norm1_proj = norm_layer(in_dim)
     self.proj = nn.Linear(in_dim * num_pixel, dim, bias=True)
     # Outer transformer
     self.norm_out = norm_layer(dim)
     self.attn_out = Attention(
         dim, dim, num_heads=num_heads, qkv_bias=qkv_bias,
         attn_drop=attn_drop, proj_drop=drop)
     self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
     
     self.norm_mlp = norm_layer(dim)
     self.mlp = Mlp(in_features=dim, hidden_features=int(dim * mlp_ratio),
         out_features=dim, act_layer=act_layer, drop=drop)
예제 #13
0
    def __init__(self,
                 dim,
                 num_heads,
                 head_dim=None,
                 mlp_ratio=4.,
                 qkv_bias=False,
                 qk_scale=None,
                 drop=0.,
                 attn_drop=0.,
                 drop_path=0.,
                 act_layer=nn.GELU,
                 norm_layer=nn.LayerNorm,
                 group=1,
                 skip_lam=1.):
        super().__init__()
        self.skip_lam = skip_lam
        self.dim = dim
        self.mlp_hidden_dim = int(dim * mlp_ratio)

        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()
        self.norm2 = norm_layer(dim)
        self.mlp = Mlp(in_features=dim,
                       hidden_features=self.mlp_hidden_dim,
                       act_layer=act_layer,
                       drop=drop,
                       group=group)
예제 #14
0
 def __init__(self,
              dim,
              num_heads,
              mlp_ratio=4.,
              qkv_bias=False,
              qk_scale=None,
              drop=0.,
              attn_drop=0.,
              drop_path=0.,
              act_layer=nn.GELU,
              norm_layer=nn.LayerNorm,
              num_patches=196,
              reduction=4):
     super().__init__()
     self.num_patches = num_patches
     self.norm1 = norm_layer(dim)
     self.attn = Attention(dim,
                           num_heads=num_heads,
                           qkv_bias=qkv_bias,
                           qk_scale=qk_scale,
                           attn_drop=attn_drop,
                           proj_drop=drop)
     # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
     self.conv = LocalityFeedForward(dim,
                                     dim,
                                     1,
                                     mlp_ratio,
                                     reduction=reduction)
예제 #15
0
 def __init__(self,
              dim,
              in_dim,
              num_heads,
              mlp_ratio=1.,
              qkv_bias=False,
              qk_scale=None,
              drop=0.,
              attn_drop=0.,
              drop_path=0.,
              act_layer=nn.GELU,
              norm_layer=nn.LayerNorm):
     super().__init__()
     self.norm1 = norm_layer(dim)
     self.attn = Attention(dim,
                           in_dim=in_dim,
                           num_heads=num_heads,
                           qkv_bias=qkv_bias,
                           qk_scale=qk_scale,
                           attn_drop=attn_drop,
                           proj_drop=drop)
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
     self.norm2 = norm_layer(in_dim)
     self.mlp = Mlp(in_features=in_dim,
                    hidden_features=int(in_dim * mlp_ratio),
                    out_features=in_dim,
                    act_layer=act_layer,
                    drop=drop)
예제 #16
0
 def __init__(self,
              dim,
              num_heads,
              head_dim=None,
              mlp_ratio=4.,
              qkv_bias=False,
              qk_scale=None,
              drop=0.,
              attn_drop=0.,
              drop_path=0.,
              act_layer=nn.GELU,
              norm_layer=nn.LayerNorm,
              group=1,
              skip_lam=1.):
     super().__init__()
     self.dim = dim
     self.norm1 = norm_layer(dim)
     self.skip_lam = skip_lam
     self.attn = Attention(dim,
                           num_heads=num_heads,
                           head_dim=head_dim,
                           qkv_bias=qkv_bias,
                           qk_scale=qk_scale,
                           attn_drop=attn_drop,
                           proj_drop=drop)
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
예제 #17
0
    def __init__(self,
                 dims,
                 num_heads,
                 mlp_ratios=[],
                 qkv_bias=False,
                 qk_scale=None,
                 drop=0.,
                 attn_drop=0.,
                 drop_path=0.,
                 act_layer=nn.GELU,
                 norm_layer=nn.LayerNorm,
                 shared_cpes=None,
                 shared_crpes=None):
        super().__init__()

        # Conv-Attention.
        self.cpes = shared_cpes

        self.norm12 = norm_layer(dims[1])
        self.norm13 = norm_layer(dims[2])
        self.norm14 = norm_layer(dims[3])
        self.factoratt_crpe2 = FactorAtt_ConvRelPosEnc(
            dims[1],
            num_heads=num_heads,
            qkv_bias=qkv_bias,
            qk_scale=qk_scale,
            attn_drop=attn_drop,
            proj_drop=drop,
            shared_crpe=shared_crpes[1])
        self.factoratt_crpe3 = FactorAtt_ConvRelPosEnc(
            dims[2],
            num_heads=num_heads,
            qkv_bias=qkv_bias,
            qk_scale=qk_scale,
            attn_drop=attn_drop,
            proj_drop=drop,
            shared_crpe=shared_crpes[2])
        self.factoratt_crpe4 = FactorAtt_ConvRelPosEnc(
            dims[3],
            num_heads=num_heads,
            qkv_bias=qkv_bias,
            qk_scale=qk_scale,
            attn_drop=attn_drop,
            proj_drop=drop,
            shared_crpe=shared_crpes[3])
        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()

        # MLP.
        self.norm22 = norm_layer(dims[1])
        self.norm23 = norm_layer(dims[2])
        self.norm24 = norm_layer(dims[3])
        # In parallel block, we assume dimensions are the same and share the linear transformation.
        assert dims[1] == dims[2] == dims[3]
        assert mlp_ratios[1] == mlp_ratios[2] == mlp_ratios[3]
        mlp_hidden_dim = int(dims[1] * mlp_ratios[1])
        self.mlp2 = self.mlp3 = self.mlp4 = Mlp(in_features=dims[1],
                                                hidden_features=mlp_hidden_dim,
                                                act_layer=act_layer,
                                                drop=drop)
예제 #18
0
 def __init__(
     self,
     dim: int,
     num_heads: int,
     mlp_ratio: float = 4.0,
     qkv_bias: bool = False,
     qk_scale: Optional[float] = None,
     drop: float = 0.0,
     attn_drop: float = 0.0,
     drop_path: float = 0.0,
     act_layer: nn.Module = nn.GELU,
     norm_layer=nn.LayerNorm,
     Attention_block=Learned_Aggregation_Layer,
     Mlp_block=Mlp,
     init_values: float = 1e-4,
 ):
     super().__init__()
     self.norm1 = norm_layer(dim)
     self.attn = Attention_block(
         dim, num_heads=num_heads, qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop
     )
     # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here
     self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()
     self.norm2 = norm_layer(dim)
     mlp_hidden_dim = int(dim * mlp_ratio)
     self.mlp = Mlp_block(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)
     self.gamma_1 = nn.Parameter(init_values * torch.ones((dim)), requires_grad=True)
     self.gamma_2 = nn.Parameter(init_values * torch.ones((dim)), requires_grad=True)
예제 #19
0
 def __init__(
     self,
     dim,
     seq_len,
     mlp_ratio=4,
     mlp_layer=Mlp,
     norm_layer=Affine,
     act_layer=nn.GELU,
     init_values=1e-4,
     drop=0.0,
     drop_path=0.0,
 ):
     super().__init__()
     channel_dim = int(dim * mlp_ratio)
     self.norm1 = norm_layer(dim)
     self.linear_tokens = nn.Linear(seq_len, seq_len)
     self.drop_path = DropPath(
         drop_path) if drop_path > 0.0 else nn.Identity()
     self.norm2 = norm_layer(dim)
     self.mlp_channels = mlp_layer(dim,
                                   channel_dim,
                                   act_layer=act_layer,
                                   drop=drop)
     self.ls1 = nn.Parameter(init_values * torch.ones(dim))
     self.ls2 = nn.Parameter(init_values * torch.ones(dim))
예제 #20
0
 def __init__(self,
              dim,
              num_heads,
              head_dim=None,
              mlp_ratio=4.,
              qkv_bias=False,
              qk_scale=None,
              drop=0.,
              attn_drop=0.,
              drop_path=0.,
              act_layer=nn.GELU,
              norm_layer=nn.LayerNorm):
     super().__init__()
     self.norm1 = norm_layer(dim)
     self.attn = ClassAttention(dim,
                                num_heads=num_heads,
                                head_dim=head_dim,
                                qkv_bias=qkv_bias,
                                qk_scale=qk_scale,
                                attn_drop=attn_drop,
                                proj_drop=drop)
     # NOTE: drop path for stochastic depth
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
     self.norm2 = norm_layer(dim)
     mlp_hidden_dim = int(dim * mlp_ratio)
     self.mlp = Mlp(in_features=dim,
                    hidden_features=mlp_hidden_dim,
                    act_layer=act_layer,
                    drop=drop)
예제 #21
0
 def __init__(self,
              dim,
              num_heads,
              mlp_ratio=4.,
              qkv_bias=False,
              qk_scale=None,
              drop=0.,
              attn_drop=0.,
              drop_path=0.,
              act_layer=nn.GELU,
              norm_layer=nn.LayerNorm,
              sr_ratio=1):
     super().__init__()
     self.sr_ratio = sr_ratio
     self.norm1 = norm_layer(dim)
     self.attn = Attention(dim,
                           num_heads=num_heads,
                           qkv_bias=qkv_bias,
                           qk_scale=qk_scale,
                           attn_drop=attn_drop,
                           proj_drop=drop,
                           sr_ratio=sr_ratio)
     # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
     # self.norm2 = norm_layer(dim)
     # mlp_hidden_dim = int(dim * mlp_ratio)
     # self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)
     self.conv = LocalityFeedForward(dim, dim, 1, mlp_ratio, reduction=dim)
예제 #22
0
    def __init__(self,
                 dim,
                 pool_size=3,
                 mlp_ratio=4.,
                 act_layer=nn.GELU,
                 norm_layer=GroupNorm,
                 drop=0.,
                 drop_path=0.,
                 use_layer_scale=True,
                 layer_scale_init_value=1e-5):

        super().__init__()

        self.norm1 = norm_layer(dim)
        self.token_mixer = Pooling(pool_size=pool_size)
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)
        self.mlp = Mlp(in_features=dim,
                       hidden_features=mlp_hidden_dim,
                       act_layer=act_layer,
                       drop=drop)

        # The following two techniques are useful to train deep PoolFormers.
        self.drop_path = DropPath(drop_path) if drop_path > 0. \
            else nn.Identity()
        self.use_layer_scale = use_layer_scale
        if use_layer_scale:
            self.layer_scale_1 = nn.Parameter(layer_scale_init_value *
                                              torch.ones((dim)),
                                              requires_grad=True)
            self.layer_scale_2 = nn.Parameter(layer_scale_init_value *
                                              torch.ones((dim)),
                                              requires_grad=True)
예제 #23
0
파일: gfnet.py 프로젝트: liaoxiaochen-ai/-
 def __init__(self, dim, mlp_ratio=4., drop=0., drop_path=0., act_layer=nn.GELU, norm_layer=nn.LayerNorm, h=14, w=8):
     super().__init__()
     self.norm1 = norm_layer(dim)
     self.filter = GlobalFilter(dim, h=h, w=w)
     self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
     self.norm2 = norm_layer(dim)
     mlp_hidden_dim = int(dim * mlp_ratio)
     self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)
예제 #24
0
 def __init__(self, dim, heads, mlp_dim, dropout, drop_path):
     super().__init__()
     self.norm1 = nn.LayerNorm(dim)
     self.norm2 = nn.LayerNorm(dim)
     self.attn = Attention(dim, heads, dropout)
     self.mlp = FeedForward(dim, mlp_dim, dropout)
     self.drop_path = DropPath(
         drop_path) if drop_path > 0.0 else nn.Identity()
예제 #25
0
    def __init__(
        self,
        dim,
        input_resolution,
        num_heads,
        group_size=7,
        lsda_flag=0,
        mlp_ratio=4.0,
        qkv_bias=True,
        qk_scale=None,
        drop=0.0,
        attn_drop=0.0,
        drop_path=0.0,
        act_layer=nn.GELU,
        norm_layer=nn.LayerNorm,
        num_patch_size=1,
    ):
        super().__init__()
        self.dim = dim
        self.input_resolution = input_resolution
        self.num_heads = num_heads
        self.group_size = group_size
        self.lsda_flag = lsda_flag
        self.mlp_ratio = mlp_ratio
        self.num_patch_size = num_patch_size
        if min(self.input_resolution) <= self.group_size:
            # if group size is larger than input resolution, we don't partition groups
            self.lsda_flag = 0
            self.group_size = min(self.input_resolution)

        self.norm1 = norm_layer(dim)

        self.attn = Attention(
            dim,
            group_size=to_2tuple(self.group_size),
            num_heads=num_heads,
            qkv_bias=qkv_bias,
            qk_scale=qk_scale,
            attn_drop=attn_drop,
            proj_drop=drop,
            position_bias=True,
        )

        self.drop_path = DropPath(
            drop_path) if drop_path > 0.0 else nn.Identity()
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)
        self.mlp = Mlp(
            in_features=dim,
            hidden_features=mlp_hidden_dim,
            act_layer=act_layer,
            drop=drop,
        )

        attn_mask = None
        self.register_buffer("attn_mask", attn_mask)
예제 #26
0
    def __init__(self,
                 dim,
                 num_heads,
                 mlp_ratio=4.,
                 qkv_bias=False,
                 qk_scale=None,
                 drop=0.,
                 attn_drop=0.,
                 drop_path=0.,
                 act_layer=nn.GELU,
                 norm_layer=nn.LayerNorm,
                 expansion=3,
                 group=False,
                 share=False,
                 re_atten=False,
                 bs=False,
                 apply_transform=False,
                 scale_adjustment=1.0,
                 transform_scale=False):
        super().__init__()
        self.norm1 = norm_layer(dim)
        self.re_atten = re_atten

        self.adjust_ratio = scale_adjustment
        self.dim = dim
        if self.re_atten:
            self.attn = ReAttention(dim,
                                    num_heads=num_heads,
                                    qkv_bias=qkv_bias,
                                    qk_scale=qk_scale,
                                    attn_drop=attn_drop,
                                    proj_drop=drop,
                                    expansion_ratio=expansion,
                                    apply_transform=apply_transform,
                                    transform_scale=transform_scale)
        else:
            self.attn = Attention(dim,
                                  num_heads=num_heads,
                                  qkv_bias=qkv_bias,
                                  qk_scale=qk_scale,
                                  attn_drop=attn_drop,
                                  proj_drop=drop,
                                  expansion_ratio=expansion)
        # NOTE: drop path for stochastic depth, we shall see if this is better than dropout here
        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)
        self.mlp = Mlp(in_features=dim,
                       hidden_features=mlp_hidden_dim,
                       act_layer=act_layer,
                       drop=drop)
예제 #27
0
 def __init__(self, dim, out_dim=None, mlp_ratio=4., drop=0., drop_path=0.,
              act_layer=nn.GELU, norm_layer=nn.LayerNorm):
     super().__init__()
     self.drop_path = DropPath(
         drop_path) if drop_path > 0. else nn.Identity()
     self.norm = norm_layer(dim)
     mlp_hidden_dim = int(dim * mlp_ratio)
     self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim,
                    out_features=out_dim, act_layer=act_layer, drop=drop)
     self.shortcut = nn.Identity()
     if out_dim is not None and out_dim != dim:
         self.shortcut = nn.Sequential(nn.Linear(dim, out_dim),
                                       nn.Dropout(drop))
예제 #28
0
 def __init__(
     self,
     dim: int,
     drop_path: float = 0.0,
     act_layer: nn.Module = nn.GELU,
     norm_layer=nn.LayerNorm,
     Attention_block=None,
     init_values: float = 1e-4,
 ):
     super().__init__()
     self.norm1 = norm_layer(dim)
     self.attn = Attention_block(dim)
     self.drop_path = DropPath(drop_path) if drop_path > 0.0 else nn.Identity()
     self.gamma_1 = nn.Parameter(init_values * torch.ones((dim)), requires_grad=True)
    def __init__(self, dim, input_resolution, num_heads, window_size=7, shift_size=0,
                 mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0.,
                 act_layer=nn.GELU, norm_layer=nn.LayerNorm):
        super().__init__()
        self.dim = dim
        self.input_resolution = input_resolution
        self.num_heads = num_heads
        self.window_size = window_size
        self.shift_size = shift_size
        self.mlp_ratio = mlp_ratio
        if min(self.input_resolution) <= self.window_size:
            # if window size is larger than input resolution, we don't partition windows
            self.shift_size = 0
            self.window_size = min(self.input_resolution)
        assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size"

        self.norm1 = norm_layer(dim)
        self.attn = WindowAttention(
            dim, window_size=to_2tuple(self.window_size), num_heads=num_heads,
            qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop)

        self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)
        self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop)

        if self.shift_size > 0:
            # calculate attention mask for SW-MSA
            H, W = self.input_resolution
            img_mask = torch.zeros((1, H, W, 1))  # 1 H W 1
            h_slices = (slice(0, -self.window_size),
                        slice(-self.window_size, -self.shift_size),
                        slice(-self.shift_size, None))
            w_slices = (slice(0, -self.window_size),
                        slice(-self.window_size, -self.shift_size),
                        slice(-self.shift_size, None))
            cnt = 0
            for h in h_slices:
                for w in w_slices:
                    img_mask[:, h, w, :] = cnt
                    cnt += 1

            mask_windows = window_partition(img_mask, self.window_size)  # nW, window_size, window_size, 1
            mask_windows = mask_windows.view(-1, self.window_size * self.window_size)
            attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2)
            attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(attn_mask == 0, float(0.0))
        else:
            attn_mask = None

        self.register_buffer("attn_mask", attn_mask)
    def __init__(self,
                 dim,
                 num_heads,
                 window_size=(4, 4, 4),
                 shift_size=(2, 2, 2),
                 dilate=(1, 2, 2),
                 mlp_ratio=4.,
                 qkv_bias=True,
                 qk_scale=None,
                 drop=0.,
                 attn_drop=0.,
                 drop_path=0.,
                 act_layer=nn.GELU,
                 norm_layer=nn.LayerNorm):
        super().__init__()
        self.dim = dim
        self.num_heads = num_heads
        self.window_size = window_size
        self.shift_size = shift_size
        self.mlp_ratio = mlp_ratio
        self.dilate = dilate
        assert 0 <= self.shift_size[0] < self.window_size[
            0], "shift_size must in 0-window_size"
        assert 0 <= self.shift_size[1] < self.window_size[
            1], "shift_size must in 0-window_size"
        assert 0 <= self.shift_size[2] < self.window_size[
            2], "shift_size must in 0-window_size"

        self.norm1 = norm_layer(dim)
        self.attn = WindowAttention(dim,
                                    window_size=self.window_size,
                                    num_heads=num_heads,
                                    qkv_bias=qkv_bias,
                                    qk_scale=qk_scale,
                                    attn_drop=attn_drop,
                                    proj_drop=drop)

        self.drop_path = DropPath(
            drop_path) if drop_path > 0. else nn.Identity()
        self.norm2 = norm_layer(dim)
        mlp_hidden_dim = int(dim * mlp_ratio)
        self.mlp = Mlp(in_features=dim,
                       hidden_features=mlp_hidden_dim,
                       act_layer=act_layer,
                       drop=drop)

        self.H = None
        self.W = None
        self.S = None