PP-LCNet: A Lightweight CPU Convolutional Neural Network

2023-10-22 06:40

本文主要是介绍PP-LCNet: A Lightweight CPU Convolutional Neural Network,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

轻量级Trick的优化组合。

论文名称:PP-LCNet: A Lightweight CPU Convolutional Neural Network

作者:Cheng Cui, Tingquan Gao, Shengyu Wei,Yuning Du…

Code:https://github.com/PaddlePaddle/PaddleClas

摘要

  1. 总结了一些在延迟(latency)几乎不变的情况下精度提高的技术;
  2. 提出了一种基于MKLDNN加速策略的轻量级CPU网络,即PP-LCNet。
image-20211007133525281

介绍

目前的轻量级网络在启用MKLDNN的Intel CPU上速度并不理想,考虑了一下三个基本问题:

  1. 如何促使网络学习到更强的特征,但不增加延迟?
  2. 在CPU上提高轻量级模型精度的要素是什么?
  3. 如何有效地结合不同的策略来设计CPU上的轻量级模型?

Method

PP-LCNet使用深度可分离卷积作为基础结构,构建了一个类似MobileNetV1的BaseNet,并在其基础上结合现有的技术,从而得到了PP-LCNet

image-20211007191050134

参数配置:

image-20211008131450331

Better activation function

激活函数是神经网络中非线性的来源,因此其质量一定程度上决定着网络的表达能力。

当激活函数由Sigmoid变为ReLU时,网络的性能得到了很大的提升,近来出现了很多超越ReLU的激活函数,如EfficientNet的Swish,MobileNetV3中将其升级为HSwish,避免了大量的指数运算;因此本网络中使用HSwish激活函数代替ReLU。

首先让我们看一下ReLU函数的近似推导:
KaTeX parse error: No such environment: align at position 8: \begin{̲a̲l̲i̲g̲n̲}̲ f(x)&=\sum_{i=…
softplus

出于计算量的考虑和实验验证选择了ReLU

ReLU6:

增加了上界

image-20211007184950617

Swish:
f ( x ) = x ⋅ s i g m o i d ( β x ) f(x)=x\cdot sigmoid(\beta x) f(x)=xsigmoid(βx)
swish

β \beta β是个常数或可训练的参数。Swish 具备无上界有下界、平滑、非单调的特性。
Swish 在深层模型上的效果略优于 ReLU。仅仅使用 Swish 单元替换 ReLU 就能把 Mobile NASNetA 在 ImageNet 上的 top-1 分类准确率提高 0.9%,Inception-ResNet-v 的分类准确率提高 0.6%。

导数:

swish-derivation

β = 0 β = 0 β=0时,Swish变为线性函数 f ( x ) = x 2 f(x)=\frac x 2 f(x)=2x
β → ∞ β → ∞ β, σ ( x ) = 1 1 + e − x \sigma(x)=\frac{1}{1+e^{−x}} σ(x)=1+ex1为0或1,这时Swish变为 R e L U ( x ) = m a x ( 0 , x ) ReLU(x)=max(0,x) ReLU(x)=max(0,x)
因此Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数.

HSwish:

Swish函数的计算量是很大的,因此提出了HSwish,H表示Hard,意味着超过某个范围,激活值为常数

对ReLU6除以6再向左平移三个单位可以得到HSigmoid:

image-20211007185106870

HSwish的近似公式为 x ⋅ h σ ( x ) = r e l u 6 ( x + 3 ) 6 x\cdot h\sigma(x)=\frac{relu6(x+3)}{6} xhσ(x)=6relu6(x+3),图像如下:

SE modules at appropriate positions

注意力模块无疑是轻量级网络完美的选择,本文探究了SE模块放置的位置,发现在网络深层的效果较好。

image-20211007190945690

Larger convolution kernels

使用更大的卷积核尺寸,发现在网络深层效果较好

image-20211007191200660

Larger dimensional1×1conv layer after GAP

在网络最后的GAP之后使用Pointwise卷积进行升维,以此提高网络的性能

Drop out

实验发现drop out可以提高性能

image-20211007191715602

实验结果

image-20211007192557037

与其他网络进行对比

image-20211007192635596

这篇关于PP-LCNet: A Lightweight CPU Convolutional Neural Network的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/259735

相关文章

poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)

题目很麻烦,因为不熟悉最小生成树的算法调试了好久。 感觉网上的题目解释都没说得很清楚,不适合新手。自己写一个。 题意:给你点的坐标,然后两点间可以有两种方式来通信:第一种是卫星通信,第二种是无线电通信。 卫星通信:任何两个有卫星频道的点间都可以直接建立连接,与点间的距离无关; 无线电通信:两个点之间的距离不能超过D,无线电收发器的功率越大,D越大,越昂贵。 计算无线电收发器D

Java程序到CPU上执行 的步骤

相信很多的小伙伴在最初学习编程的时候会容易产生一个疑惑❓,那就是编写的Java代码究竟是怎么一步一步到CPU上去执行的呢?CPU又是如何执行的呢?今天跟随小编的脚步去化解开这个疑惑❓。 在学习这个过程之前,我们需要先讲解一些与本内容相关的知识点 指令 指令是指导CPU运行的命令,主要由操作码+被操作数组成。 其中操作码用来表示要做什么动作,被操作数是本条指令要操作的数据,可能是内存地址,也

MonoHuman: Animatable Human Neural Field from Monocular Video 翻译

MonoHuman:来自单目视频的可动画人类神经场 摘要。利用自由视图控制来动画化虚拟化身对于诸如虚拟现实和数字娱乐之类的各种应用来说是至关重要的。已有的研究试图利用神经辐射场(NeRF)的表征能力从单目视频中重建人体。最近的工作提出将变形网络移植到NeRF中,以进一步模拟人类神经场的动力学,从而动画化逼真的人类运动。然而,这种流水线要么依赖于姿态相关的表示,要么由于帧无关的优化而缺乏运动一致性

图神经网络框架DGL实现Graph Attention Network (GAT)笔记

参考列表: [1]深入理解图注意力机制 [2]DGL官方学习教程一 ——基础操作&消息传递 [3]Cora数据集介绍+python读取 一、DGL实现GAT分类机器学习论文 程序摘自[1],该程序实现了利用图神经网络框架——DGL,实现图注意网络(GAT)。应用demo为对机器学习论文数据集——Cora,对论文所属类别进行分类。(下图摘自[3]) 1. 程序 Ubuntu:18.04

win10不用anaconda安装tensorflow-cpu并导入pycharm

记录一下防止忘了 一、前提:已经安装了python3.6.4,想用tensorflow的包 二、在pycharm中File-Settings-Project Interpreter点“+”号导入很慢,所以直接在cmd中使用 pip install -i https://mirrors.aliyun.com/pypi/simple tensorflow-cpu下载好,默认下载的tensorflow

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到

深度学习--对抗生成网络(GAN, Generative Adversarial Network)

对抗生成网络(GAN, Generative Adversarial Network)是一种深度学习模型,由Ian Goodfellow等人在2014年提出。GAN主要用于生成数据,通过两个神经网络相互对抗,来生成以假乱真的新数据。以下是对GAN的详细阐述,包括其概念、作用、核心要点、实现过程、代码实现和适用场景。 1. 概念 GAN由两个神经网络组成:生成器(Generator)和判别器(D

CPU亲和性设置 代码示例 sched_setaffinity sched_getaffinity

视频教程在这: cpu亲和性设置,NCCL,sched_setaffinity sched_getaffinity,CPU_ZERO、SET、ISSET、linux_哔哩哔哩_bilibili 一、CPU亲和性简介 CPU亲和性(CPU Affinity)设置是操作系统中一个重要的性能优化手段,它允许程序或进程被绑定到特定的CPU核心上运行。这样做的好处包括减少缓存未命中、降低线程迁移(co

ubuntu16.04 caffe(github源码cpu)+python3.5+opencv3.4.5安装编译

https://www.cnblogs.com/hanjianjian90/p/10604926.html

A Comprehensive Survey on Graph Neural Networks笔记

一、摘要-Abstract 1、传统的深度学习模型主要处理欧几里得数据(如图像、文本),而图神经网络的出现和发展是为了有效处理和学习非欧几里得域(即图结构数据)的信息。 2、将GNN划分为四类:recurrent GNNs(RecGNN), convolutional GNNs,(GCN), graph autoencoders(GAE), and spatial–temporal GNNs(S