赞
踩
- class ContextGuidedBlock_Down(nn.Module):
- """
- the size of feature map divided 2, (H,W,C)---->(H/2, W/2, 2C)
- """
-
- def __init__(self, nIn, dilation_rate=2, reduction=16):
- """
- args:
- nIn: the channel of input feature map
- nOut: the channel of output feature map, and nOut=2*nIn
- """
- super().__init__()
-
- nOut = nIn * 2
-
- self.conv1x1 = ConvBNPReLU(nIn, nOut, 3, 2) # size/2, channel: nIn--->nOut
-
- self.F_loc = ChannelWiseConv(nOut, nOut, 3, 1)
- self.F_sur = ChannelWiseDilatedConv(nOut, nOut, 3, 1, dilation_rate)
-
- self.bn = nn.BatchNorm2d(2 * nOut, eps=1e-3)
- self.act = nn.PReLU(2 * nOut)
- self.reduce = Conv(2 * nOut, nOut, 1, 1) # reduce dimension: 2*nOut--->nOut
-
- self.F_glo = FGlo(nOut, reduction)
-
- def forward(self, input):
- output = self.conv1x1(input)
- loc = self.F_loc(output)
- sur = self.F_sur(output)
-
- joi_feat = torch.cat([loc, sur], 1) # the joint feature
- joi_feat = self.bn(joi_feat)
- joi_feat = self.act(joi_feat)
- joi_feat = self.reduce(joi_feat) # channel= nOut
-
- output = self.F_glo(joi_feat) # F_glo is employed to refine the joint feature
-
- return output
模块:ConvBNPReLU,是一个卷积层,没有偏置项,先卷积,在归一化,在经过PReLU激活函数。
模块:ChannelWiseConv,是一个通道卷积操作。在标准的卷积中,每个卷积核都会跨输入特征图的所有通道进行卷积操作,这意味着输出的每个通道都是来自输入的所有通道的信息融合。在通道卷积中,每个卷积核只在对应的单个输入通道上操作,而不是跨通道。因此,每个输出通道的特征仅由对应的单个输入通道计算得出。通道卷积,对应的参数量更少,适合于移动端和嵌入式的部署。
模块:ChannelWiseDilatedConv,是一个空洞卷积,空洞卷积适用于处理具有层次化结构或多尺度特征的任务,捕捉更广泛的上下文信息。相当于扩大了卷积核,扩大的部分补0。
Relu与PRelu激活函数的对比。
模块:FGlo,nn.AdaptiveAvgPool2d(1)
是 PyTorch 中的一个自适应平均池化层,其目的是对输入的特征图进行全局平均池化操作,将空间特征转换成全局特征,使得网络能够处理不同尺寸的输入。nn.Linear()就是一个线性变换,相当于线性代数中矩阵的乘法。
总:卷积模块ContextGuidedBlock_Down,更易用于捕获局部特征、周围上下文和全局上下文,并将这些信息融合起来以提高准确性。
yaml文件
task.py文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。