1. GhostNet网络
一张图片经过神经网络进行特征提取后,能够得到很多特征图。

在特征图中会有一些相似性很高,这就是神经网络中存在的特征图冗杂的情况(如图中扳手相连的两幅特征图)。
作者认为可以对其中的一个特征图进行(Cheap Operations)简单的线性运算从而生成更多相似特征图,从而可以使用更少的参数生成更多的特征图,将相似的特征图认为是彼此的Ghost。
2. Ghost Module

作者用Ghost Module代替传统卷积,首先采用普通的1x1卷积对输入图片进行通道数的压缩,然后再进行深度可分离卷积(逐层卷积)得到更多的特征图,然后将不同的特征图concat到一起,组合成新的output。
Ghost Module构建代码
class GhostModule(nn.Module):
def __init__(self, inp, oup, kernel_size=1, ratio=2, dw_size=3, stride=1, relu=True):
super(GhostModule, self).__init__()
#ratio一般会指定成2,保证输出特征层的通道数等于exp
self.oup = oup
init_channels = math.ceil(oup / ratio)
new_channels = init_channels*(ratio-1)
#利用1x1卷积对输入进来的特征图进行通道的浓缩,获得特征通缩
#跨通道的特征提取
self.primary_conv = nn.Sequential(
nn.Conv2d(inp, init_channels, kernel_size, stride, kernel_size//2, bias=False), #1x1卷积的输入通道数为GhostModule的输出通道数oup/2
nn.BatchNorm2d(init_channels), #1x1卷积后进行标准化
nn.ReLU(inplace=True) if relu else nn.Sequential(), #ReLU激活函数
)
#在获得特征浓缩后,使用逐层卷积,获得额外的特征图
#跨特征点的特征提取 一般会设定大于1的卷积核大小
self.cheap_operation = nn.Sequential(
nn.Conv2d(init_channels, new_channels, dw_size, 1, dw_size//2, groups=init_channels, bias=False), #groups参数的功能就是将普通卷积转换成逐层卷据
nn.BatchNorm2d(new_channels),
nn.ReLU(inplace=True) if relu else nn.Sequential(),
)
def forward(self, x):
x1 = self.primary_conv(x)
x2 = self.cheap_operation(x1)
#将1x1卷积后的结果和逐层卷积后的结果进行堆叠
out = torch.cat([x1,x2], dim=1)
return out[:,:self.oup,:,:]
1x1卷积的输入通道数为GhostModule的输出通道数oup/2,因为最终输出特征层由1x1卷积后的结果和逐层卷积后的结果进行堆叠组成的,进行逐层卷积时特征层的通道数不变,如果要保证最终输出特征层的通道数是一个固定值,那么就要使得1x1卷积后的结果的通道数为最终输出特征层的1/2。
3. Ghost BottleNeck原理
Ghost BottleNeck是由Ghost Module组成的瓶颈结构
Ghost BottleNeck整体架构和Residual Block非常相似,也可以直接认为是将Residual Block中的普通卷积操作替换成Ghost Module得到。

左图中主干部分用用两个Ghost Module(GM)串联组成,其中第一个GM扩大通道数,第二个GM将通道数降低到与输入通道数一致;残差边部分与ResNet一样。由于S=1,因此不会对输入特征层的高和宽进行压缩,其功能为加深网络的深度。
右图中主干部分的两个GM之间加入了一个stride=2的Deepwise卷积,可以将特征图高和宽进行压缩,使其大小降为输入的1/2;在残差边部分,也会添加一个步长为2x2的深度可分离卷积和1x1的普通卷积,以保证Add操作可以对齐。由于S=2,因此会对输入特征层的高和宽进行压缩,其功能为改变输入特征层的形状。
实际应用中,为了进一步提高效率,GhostModule中的所有常规卷积都用pointwise卷积代替。
Ghost BottleNeck构建代码:
class GhostBottleneck(nn.Module):
def __init__

GhostNet是一种轻量级的深度学习模型,通过GhostModule和GhostBottleNeck实现高效特征提取。GhostModule通过1x1卷积和深度可分离卷积生成更多特征图,减少参数量。GhostBottleNeck则是GhostModule的瓶颈结构,用于构建网络深度。GhostNet适用于资源有限的场景,如移动设备上的图像分类任务。
最低0.47元/天 解锁文章
990

被折叠的 条评论
为什么被折叠?



