FasterNet代码阅读

FasterNet 类参数初始化
将图像切分为非重叠的图像块
PatchEmbed
将图像分解为非重叠的图像块有以下几个好处:
1. 缩小计算量:对于大尺寸的图像,直接对整个图像进行处理可能会导致计算和内存消耗过大。将图像切分为小块可以降低计算量,使得处理更加高效。
2. 提取局部特征:图像块相对于整个图像来说更加局部化,每个图像块中的特征更加集中于该块所对应的局部区域。这有助于模型更好地捕捉图像中的局部信息和细节。
3. 支持变尺寸输入:通过将图像切分为块,并对每个块进行嵌入,可以处理不同尺寸的输入图像,而不需要对整个图像进行大小调整。
4. 支持并行处理:将图像分割为块后,可以并行地对每个块进行处理,从而加速计算过程。这对于在硬件加速器(如GPU )上进行高效推断和训练非常有用。
总之,将图像分解为非重叠的图像块并进行特征嵌入是为了提高计算效率、捕捉局部特征、支持变尺寸输入和实现并行处理,从而更好地应对图像分析任务的需求。
dpr
这个列表中的每个值代表了在不同层级的网络中应用 DropPath 操作的概率。 DropPath 是一种正则化技术,用于在训练过程中随机丢弃网络中的一些连接,以减少过拟合。通过在不同层级使用不同的DropPath 概率,可以在训练过程中控制不同层级的模型复杂度,从而增强模型的鲁棒性和泛化能力。 需要注意的是, torch.linspace 函数生成的数列是一个包含浮点数的张量,通过 x.item() 将每个张量元素转换为 Python 标量值
构建 FasterNet 的多个阶段
BasicStage
class BasicStage(nn.Module):
def __init__(self,
dim,
depth,
n_div,
mlp_ratio,
drop_path,
layer_scale_init_value,
norm_layer,
act_layer,
pconv_fw_type
):
super().__init__()
# 包含多个 MLPBlock 的序列组成的 blocks 层
blocks_list = [
MLPBlock(
dim=dim,
n_div=n_div,
mlp_ratio=mlp_ratio,
drop_path=drop_path[i],
layer_scale_init_value=layer_scale_init_value,
norm_layer=norm_layer,
act_layer=act_layer,
pconv_fw_type=pconv_fw_type
)
for i in range(depth)
]
self.blocks = nn.Sequential(*blocks_list)
def forward(self, x: Tensor) -> Tensor:
x = self.blocks(x)
return x
作用
将多个 MLPBlock 组成一个阶段,每个 MLPBlock 通过前向传播对输入数据进行处理,并将处理结果作为下一个 MLPBlock 的输入。通过堆叠多个 MLPBlock ,可以形成深度的神经网络结构,用于特征提取和信息传递.
MLPBlock
MLPBlock 中先将输入特征的维度缩放到 MLP 层的隐藏维度,然后再将隐藏维度缩放回原始维度的操作,有以下几个原因:
1. 提高模型的表达能力:通过将输入特征的维度缩放到较高的隐藏维度,可以增加 MLP 层的参数量和非线性变换的能力,从而提高模型的表达能力。这种缩放操作允许 MLP 层对输入特征进行更复杂的非线性变换,以捕捉更多的特征信息。
2. 引入多尺度特征信息:通过缩放到不同的维度,可以在 MLP 层中引入多尺度的特征信息。输入特征经过缩放到隐藏维度后,隐藏维度的特征在不同尺度上进行了变换。随后再将隐藏维度的特征缩放回原始维度,将不同尺度的特征信息与原始特征进行融合,从而获得更丰富的特征表示。
x = self . blocks ( x ) return x 3. 控制模型复杂度:缩放到隐藏维度后, MLP 层的参数量相对于输入特征维度会增加。然后,再将隐藏维度的特征缩放回原始维度,可以控制 MLP 层的参数量,避免模型过于复杂。这种参数量的控制可以通过调节 MLP 比例 mlp_ratio 来实现,从而灵活地平衡模型的复杂性和性能。总而言之,通过先缩放维度到隐藏层,再缩放回原维度,可以提高模型的表达能力、引入多尺度特征信息,并灵活控制模型复杂度。这种设计可以帮助网络更好地学习和表示输入特征的相关信息。
定义部分卷积模块
Partial_conv3
对每一块进行 patch 操作
PatchMerging
PatchMerging 类用于将输入特征的补丁进行合并,以减小特征图的空间尺寸,并可选地对合并后的特 征进行归一化处理。这个操作通常在多层级特征提取过程中使用,以控制特征的维度和空间尺寸,适应不同的任务和模型结构。
  • 16
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值