Sequencer:2DLSTM应用在图像分类当中

前言

在文章Sequencer: Deep LSTM for Image Classification中,提出一种新的双方向向BiLSTM来对图像进行分类,参数量较小,但笔者认为RNN系列和CNN以及Transformer比较参数量就是耍流氓,应该加入计算量等多个标准,但本文主要对提出的Sequencer2D block进行复现。

模型结构

在这里插入图片描述
论文中首先提出了BiLSTM2D layer,他先把图片shape从[B,W,H,C]分别变为:[B,HC,W]和[B,H,WC],然后分别经过两个BiLSTM进行处理,处理后的结构进行concat,之后在经过FC层。
在这里插入图片描述
在Sequencer2D block有两个跳跃连接结构第一个流程先经过layernorm+BiLSTM2D layer,第二个流程layernorm+MLP。

代码实现

BiLSTM2D layer代码:

class  BiLSTM2D(nn.Module): 
    def __init__(self, input_size, hidden_size,length):
        super().__init__()
        self.layer1 = BiLSTM(input_size, hidden_size) 
        self.layer2 = BiLSTM(input_size, hidden_size) 
        self.layer3 = nn.Linear(hidden_size*4*length, hidden_size*length) 

    def forward(self, x): 
        B,W,H,C = x.size()
        Hver = torch.reshape(x,(B,W,H*C))
        Hhor = torch.reshape(x.permute(0, 2, 1, 3),(B,H,W*C))
        print(Hver.size(),Hhor.size())
        #x2 = x2.permute(0, 2, 1)
        Hver = self.layer1(Hver)
        Hhor = self.layer2(Hhor)
        Hall = torch.cat([Hver,Hhor],-1).permute(0, 2, 1)
        Hall = torch.reshape(Hall,(B,-1))
        Hall = self.layer3(Hall)
        Hall = torch.reshape(Hall,(B,W,H,C))
        print(Hver.size(),Hhor.size(),Hall.size())
        return Hall

Sequencer2D_block代码:

class  Sequencer2D_block(nn.Module): 
    def __init__(self, input_size, hidden_size,length):
        super().__init__()
        self.ln1 = torch.nn.LayerNorm(3,eps=1e-6)
        self.layer1 = BiLSTM2D(input_size, hidden_size,length) 
        self.ln2 = torch.nn.LayerNorm(3,eps=1e-6)
        self.MLP = nn.Sequential(
            nn.Linear(hidden_size*length,hidden_size*length) ,
            nn.ReLU())

    def forward(self, x):
        B,W,H,C = x.size()
        #x = torch.reshape(x,(B,W*H,C))
        x1 = self.ln1(x)
        x2 = self.layer1(x1)
        x2 = x+x2
        x3 = torch.reshape(self.MLP(torch.reshape(self.ln2(x2),(B,-1))),(B,W,H,C))+x2
        print(x1.size(),x2.size(),x3.size())
        return x3
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值