【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现

简介: 【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现

前言

  近年来,随着深度学习技术的快速发展,越来越多的神经网络架构被提出。其中,GhostNet是一个备受关注的网络架构,其提出的主要目的是在保证模型轻量化的同时,提升网络的性能表现。GhostNet的设计思想独特,引入了ghost module这一新的网络模块,并采用了一系列的优化方法。本篇博客将详细介绍GhostNet的原理、优点以及应用场景,以及其在图像分类任务上的性能表现。

GhostNet

原理

  出于对轻量化神经网络的需求,ghost module采用了“组卷积”和“通道分组”两种技术,可以将输入特征图拆分成两个子特征图,分别进行不同的卷积操作。其中,一个子特征图较小,被称为ghost feature map,另一个子特征图较大,被称为primary feature map。ghost feature map负责提取局部信息,primary feature map负责提取全局信息。

image.png

  最后将两个子特征图合并起来,形成最终的输出特征图。这种方式可以在不增加太多参数和计算复杂度的前提下,提高模型的表现能力。

优点

更轻量化

  GhostNet在保证模型性能的同时,大大减小了模型的体积和参数量,使得模型更加轻量化。这对于在计算资源有限的情况下使用深度学习模型非常重要,例如在嵌入式设备或者移动端设备中部署模型。

更高效

  由于引入了ghost module,GhostNet在一定程度上减少了计算量和内存开销。这使得模型在推理阶段具有更高的速度和更低的能耗。

更好的表现

  GhostNet通过引入新的网络模块和优化方法,可以在保证模型轻量化的前提下,提高模型的表现能力。在图像分类等任务上,GhostNet的表现甚至超过了传统的卷积神经网络。

更适合端到端训练

  GhostNet采用了一种新型的训练方法,称为low-rank decomposition,这种方法可以更好地适应端到端训练。与传统的方法相比,low-rank decomposition可以减少模型的过拟合问题。

性能

ImageNet数据集上的Top-1精度vsFLOPs。

image.png

ImageNet数据集上的Top-1精度vs延迟:

image.png

在当前较为先进的小型网络在ImageNet数据集上的分类精度、权重和flop的比较:

image.png

实现

ini

复制代码

import torch
import torch.nn as nn
import math
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__()
        self.oup = oup
        init_channels = math.ceil(oup / ratio)
        new_channels = init_channels*(ratio-1)
        self.primary_conv = nn.Sequential(
            nn.Conv2d(inp, init_channels, kernel_size, stride, kernel_size//2, bias=False),
            nn.BatchNorm2d(init_channels),
            nn.ReLU(inplace=True) if relu else nn.Sequential(),
        )
        self.cheap_operation = nn.Sequential(
            nn.Conv2d(init_channels, new_channels, dw_size, 1, dw_size//2, groups=init_channels, bias=False),
            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)
        out = torch.cat([x1,x2], dim=1)
        return out[:,:self.oup,:,:]
if __name__ == "__main__":
    x = torch.zeros(1, 3, 640, 640)
    model = GhostModule(inp=3, oup=64)
    y = model(x)
    print(y.shape)



相关文章
|
15天前
|
机器学习/深度学习 人工智能 算法
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
鸟类识别系统。本系统采用Python作为主要开发语言,通过使用加利福利亚大学开源的200种鸟类图像作为数据集。使用TensorFlow搭建ResNet50卷积神经网络算法模型,然后进行模型的迭代训练,得到一个识别精度较高的模型,然后在保存为本地的H5格式文件。在使用Django开发Web网页端操作界面,实现用户上传一张鸟类图像,识别其名称。
60 12
鸟类识别系统Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+ResNet50算法模型+图像识别
|
7天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
33 5
|
5天前
|
机器学习/深度学习 算法 搜索推荐
图神经网络综述:模型与应用
图神经网络综述:模型与应用
|
10天前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
1月前
|
网络协议 数据安全/隐私保护 网络架构
计算机网络模型
【9月更文挑战第2天】
47 24
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
机器学习模型之深度神经网络的特点
深度神经网络(Deep Neural Networks, DNNs)是一类机器学习模型,通过多个层级(层)的神经元来模拟人脑的工作方式,从而实现复杂的数据处理和模式识别任务。
34 1
|
1月前
|
算法
基于GA遗传优化的离散交通网络双层规划模型设计matlab仿真
该程序基于GA遗传优化设计了离散交通网络的双层规划模型,以路段收费情况的优化为核心,并通过一氧化碳排放量评估环境影响。在MATLAB2022a版本中进行了验证,显示了系统总出行时间和区域排放最小化的过程。上层模型采用多目标优化策略,下层则确保总阻抗最小,实现整体最优解。
|
1月前
|
分布式计算 负载均衡 监控
p2p网络架构模型
P2P(Peer-to-Peer)模式是一种网络架构模型,在这种模型中,每个节点(peer)既是服务的提供者也是服务的消费者。这意味着每个参与的节点都可以直接与其他节点通信,并且可以相互提供资源和服务,例如文件共享、流媒体传输等。
40 6
|
1月前
|
网络协议 安全 网络安全
C语言 网络编程(四)常见网络模型
这段内容介绍了目前被广泛接受的三种网络模型:OSI七层模型、TCP五层模型以及TCP/IP四层模型,并简述了多个网络协议的功能与特性,包括HTTP、HTTPS、FTP、DNS、SMTP、TCP、UDP、IP、ICMP、ARP、RARP及SSH协议等,同时提到了ssh的免费开源实现openssh及其在Linux系统中的应用。
|
2月前
|
网络协议 安全 网络性能优化
OSI 模型详解:网络通信的七层架构
【8月更文挑战第31天】
187 0
下一篇
无影云桌面