代码解读笔记整理--ConvNext:A ConvNet for the 2020s

本文主要介绍了ConvNext模型的代码实现,包括其大体框架和关键组件。首先,模型由Stem层开始,接着是包含多个重复block的四个Stage。在代码层面,讲解了Block类的设计,包括Group_Conv、1x1卷积、层归一化和激活函数的使用。通过对Block类的初始化和forward函数的定义,展示了整个ConvNext模型的构建过程。
摘要由CSDN通过智能技术生成

四、ConvNext代码

1、大体框架介绍

ConvNext-Tiny为例:

其中,ConvNext包括:

(1)最底层的Stem层:对原始的图像进行预处理。

(2)四个Stage每个Stage重复若干block,其中重复的次数为深度。

例如:第一个Stage重复了3个block,即深度为3。

(3)分类的代码:对特征进行下采样/池化,然后映射到我们要做分类的类别上。

2、代码解释

代码解释:

1)第一层为群卷积Group_Conv:设置group_nums=input_channels,其卷积为7x7 输出通道数为96。

2)第二层为1X1的卷积:做通道融合,也可称作一个MLP,即把上一个张量96,映射为384。不考虑周围像素点,只对单个像素点进行考虑,即不考虑空间的局部关联性。

3)第三层为1X1的卷积:即将384映射为96。

4)LN:Layer-Normalization:层归一化。

5)GELU:激活函数。

6)输入输出相结合。

(1)定义Block类:

Class Block(nn.Module):  #无论是多大的模块,都需要继承自nn.Module;

(2)定义Class Block类中的init函数:

实例化一些层。

def __init__(self, dim, drop_path=0., layer_scale_init_value=1e-6):

    super().__init__()

    self.dwconv = nn.Conv2d(dim, dim, kernel_size=7, padding=3, groups=dim) # 实例化二维卷积--depthwise conv(深度可分离卷积),设置groups等于输入通道数

    self.norm = LayerNorm(dim, eps=1e-6) #在通道上做层归一化。在做层归一化之前,张量=batchsize x H x W x channels,将张量送至层归一化中,得出均值及方差,其大小为batchsize x H x W,每个均值和方差的向量的大小为通道数目。有了均值和方差便可以进行归一化至正态分布,再引用两个仿射变换参数(权重和偏置),再变换至新的分布。

    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值