PConv : Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks
摘要
为了设计快速的神经网络,**许多研究都集中在减少浮点运算(FLOPs)**的数量。然而,我们观察到这种FLOPs的减少并不一定会导致相同程度的延迟减少。这主要是由于浮点运算每秒效率较低的问题所致。为了实现更快的网络,我们重新审视了流行的操作算子,并证明这种低FLOPS主要是由于操作算子(尤其是深度卷积)频繁进行内存访问所致。
因此我们提出了一种新颖的部分卷积(PConv)方法,通过同时削减冗余计算和内存访问,更有效地提取空间特征。在我们先前的PConv的基础上,我们进一步提出了FasterNet,一种新的神经网络家族,在各种视觉任务中能够以更高的运行速度在广泛的设备上取得相当高的精度,而不会妥协于准确性。
代码地址:https://github.com/JierunChen/FasterNet
引言
神经网络在计算机视觉诸如图像分类、检测和分割等任务中经历了快速发展。虽然其令人印象深刻的性能推动了许多应用,但目前的趋势是追求快速的神经网络,具有低延迟和高吞吐量,以实现良好的用户体验、即时响应和安全性等方面的需求。
如何提高速度?
研究人员和实践者们不在要求更昂贵的计算设备,而是更倾向于设计成本效益高、具有较低计算复杂性的快速神经网络,主要通过浮点运算次数(FLOPs)来衡量。MobileNets [24, 25, 54]、ShuffleNets [46,84]和GhostNet [17]等网络采用深度卷积(DWConv)[55]和/或组卷积(GConv)[31]来提取空间特征,以降低FLOPs。然而,在减少FLOPs的努力中,这些运算符通常会导致内存访问的副作用。MicroNet [33]进一步对网络进行分解和稀疏化,将其FLOPs减少到了极低的水平。

尽管在FLOPs方面有所改进,但是这种方法在有效的分段计算方面存在问题。此外,上述网络通常伴随着其他数据操作**,如连接、重排和池化**,其运行时间往往对于小模型来说是相当重要的。除了上述纯卷积神经网络之外,还出现了对VITs和MLPs架构进行缩小和加速的兴趣,例如:MobileVits和MobileFormer通过将DWConv与修改后的注意力机制相结合来减少计算复杂度。然而,他们仍然存在DWConv上述问题,并且还需要专门的硬件支持来实现修改后的注意力机制,使用先进但耗时的归一化层和激活层也可能限制他们在设备上的速度。

这些问题一起引发了一下问题:这些“快速”神经网络真的很快嘛?

为了回答这个问题,我们研究了延迟和FLOPs之间的关系。其中FLOPS是每秒浮点运算次数,作为衡量有效计算速度的指标。尽管有很多试图减少FLOPs的尝试,但它们很少考虑同时优化FLOPS以实现真正低延迟的问题。我们在Intel CPU上比较了典型神经网络的FLOPS。图2的结果显示,许多现有的神经网络FLOPS较低,它们的FLOPS通常低于流行的ResNet50。由于FLOPS较低,这些“快速”神经网络实际上并不够快。它们在FLOPS的减少不能完全转化为延迟的减少量。之前的研究[46,48]也注意到了FLOPs和延迟之间的差异,但部分地仍未解决,因为它们采用了低FLOPS的DWConv/GConv和各种数据操作。据认为,目前没有更好的选择。
本文旨在通过开发一种简单而快速有效的运算符,以减少FLOPs并保持高FLOPS,来消除这种差异,具体而言,我们重新审视现有的运算符,特别是DWConv,从计算速度的角度来看,我们发现导致低FLOPS问题的主要原因是频繁的内存访问。然后,我们提出了一种新颖的部分卷积(PConv)作为一种竞争性的替代方案,既减少了计算冗余,又减少了内存访问的次数。
从本质上讲,与常规的Conv相比,PConv的FLOPs较低,但比DWConv/GConv要高,换句话说,PConv更好的利用了设备上的计算能力,经过实验证明,PConv在提取空间特征方面也非常有效。
我们进一步介绍了FasterNet,它主要基于我们的PConv构件而成,作为一种在各种设备上运行非常快速的新型网络家族,特别是我的FasterNet在分类、检测和分割任务中实现了最先进的性能,同时具有更低的延迟和更高的吞吐量。
本文的贡献如下:
- 引入了简单而快速有效的操作符,名为PConv ,他有很大潜力替代现有的首选操作符DWConv
- FasterNet 在各种设备上都能有良好的运行性能和普遍速度
相关工作
我们简要回顾了之前的快速和高效神经网络上的工作,并将这项工作和他们区分开来。
CNN
计算机视觉领域的主流架构,特别是在实际部署中**,快速性和准确性同等重要,**尽管已经进行了许多研究以实现更高的效率,但他们背后的基本原理更多或多或少是进行低秩近似。具体而言,群组卷积[31]和深度可分离卷积[55](包括深度卷积和逐点卷积)可能是最受欢迎的方法。他们已广泛应用于移动/边缘导向网络,如MobileNets [24, 25, 54],ShuffleNets [46, 84],GhostNet [17],EfficientNets [61, 62],TinyNet [18],Xception [8],CondenseNet [27, 78],TVConv [4],MnasNet [60]和FBNet [74]。尽管它们利用滤波器中的冗余来减少参数和FLOP的数量,但在增加网络宽度以弥补准确性下降时,会导致内存访问增加。相比之下,我们考虑特征图中的冗余,并提出了部分卷积来同时减少FLOP和内存访问。
ViT,MLP和变体。
自Dosovitskiy等人(2020)[12]将transformers [69]的应用范围从机器翻译 [69]或预测 [73]扩展到计算机视觉领域以来,对ViT的研究越来越受关注。
许多后续的研究致力于在训练设置和模型设计方面改进 ViT [58, 65, 66]。一个值得注意的趋势是通过减少注意力运算的复杂性 [1,29,45,63,68],将卷积引入 ViTs [6,10,57],或者同时进行这两种操作 [3,34,49,52],追求更好的准确性和延迟之间的折中关系。此外,其他研究 [5,35,64] 提议用简单的基于MLP的操作符替代注意力,但它们往往演变成类似于CNN的形式 [39]。在本文中,我们主要关注卷积操作,特别是 DWConv,原因如下:首先,注意力、卷积之间的优势并不清楚或可争议 [42,71]。其次,基于注意力的机制通常比卷积运算的效率慢,因此对当前的工业界来说不太有利 [26,48]。最后,DWConv 仍然是许多混合模型中的一个流行选择,因此值得进行仔细的研究。
PConv和FasterNet的设计
在本节中,我们首先重新审视DWConv并分析其频繁内存访问的问题。然后,我们引入PConv作为解决这个问题的一种有竞争力的替代算子。之后,我们介绍FasterNet并解释它的详细信息,包括设计考虑。
DWConv是Conv的一个流行变体,已被广泛采用作为许多神经网络的重要组件。对于输入I∈Rc×h×w,DWConv应用c个过滤器W∈Rk×k来计算输出O∈Rc×h×w。如图1(b)所示,每个过滤器在一个输入通道上滑动,并对一个输出通道做出贡献。这种深度计算使得DWConv的FLOPs(浮点运算数)仅为h×w×k2×c,相比于常规的Conv的h×w×k2×c2要低。虽然在减少FLOPs上是有效的,但是,DWConv通常紧跟着一个pointwise convolution(PWConv)时,不能简单地替换成一个常规的Conv,因为这样会导致严重的精度下降。
偏执卷积作为基本操作
特征图在不同通道之间具有很高的相似性,这种冗余性在其他许多研究中也有所涉及[17,82],但其中很少有研究能够以简单而有效的方式充分利用它。具体而言,我们提出了一种称为PConv的简单卷积方法,可以同时降低冗余和内存访问。它仅在一部分输入通道上应用常规卷积进行空间特征提取,并保持其他通道不变,为了实现连贯或规则的内存访问,我们将第一个或最后连续的CP个通道作为整个特征图的代表进行计算。通过使用典型的部分比率r = cp / 4,PConv的浮点运算量仅为常规卷积的16分之一。另外,PConv的内存访问量较小。

PConv followed by PWConv
为了充分高效地利用所有通道信息,我们在PConv之后进一步添加一个点卷积,他们在输入特征图上的有效感受野形状类似于一个T形卷积,相较于均匀处理一个补丁的常规卷积,更加注重中心位置。为了证明这个T型感受野的合理性,我们首先通过计算位置的逐位置Frobenius范数来评估每个位置的重要性。我们假设,如果一个位置的Frobenius范数比其他位置大,它往往更重要。对于一个常规的卷积

我们认为具有最大Frobenius范数的位置是显著位置。然后,我们共同检查预训练的ResNet18中的每个滤波器,找出他们的显著位置,并绘制出显著位置的直方图。中心位置的权重大于其周围的邻居。这与T型计算的特性一致。


FasterNet作为通用骨干网络
考虑到我们创新的PConv和现成的PWConv作为主要构件算子,我们进一步提出了FasterNet,这是一族运行速度快且在许多视觉任务中高效的新型神经网络。
架构概述
我们的目标是尽可能简化架构,没有花里胡哨的特点,以便使其总体上对硬件友好。我们在下图中呈现了总体架构。他有四个阶段,每个阶段都由一层嵌入层(一个带有步长为4的常规Conv4X4)或一个合并层(一个带有步长2的常规Conv2X2)来进行空间下采样和通道数量的扩展,每个阶段都有一组FasterNet块,我们观察到,在最后两个阶段中的块消耗的内存访问较少,并且往往就有更高的FLOPS,这是表1验证过的,因此&
相关文章:
PConv : Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks
摘要 为了设计快速的神经网络,**许多研究都集中在减少浮点运算(FLOPs)**的数量。然而,我们观察到这种FLOPs的减少并不一定会导致相同程度的延迟减少。这主要是由于浮点运算每秒效率较低的问题所致。为了实现更快的网络,我们重新审视了流行的操作算子,并证明这种低FLOPS主…...
Python中怎么解决内存管理的问题? - 易智编译EaseEditing
Python有自动的内存管理机制,这意味着大部分情况下你不需要手动管理内存,因为Python的垃圾回收机制会自动处理不再使用的对象。然而,有时候你仍然需要关注内存管理,特别是在处理大数据、长时间运行的应用或需要最大化性能的情况下…...
【JavaEE】Spring事务-事务的基本介绍-事务的实现-@Transactional基本介绍和使用
【JavaEE】Spring 事务(1) 文章目录 【JavaEE】Spring 事务(1)1. 为什么要使用事务2. Spring中事务的实现2.1 事务针对哪些操作2.2 MySQL 事务使用2.3 Spring 编程式事务(手动挡)2.4 Spring 声明式事务&…...
CentOs下面安装jenkins记录
目录 一、安装jenkins 二、进入jenkins 三、安装和Gitee,Maven , Publish Over SSH等插件 四、构建一个maven项目 一、安装jenkins 1 wget -O /etc/yum.repos.d/jenkins.repo \ https://pkg.jenkins.io/redhat-stable/jenkins.repo 2 rpm --im…...
海康威视相机-LINUX SDK 开发
硬件与环境 相机: MV-CS020-10GC 系统:UBUNTU 22.04 语言:C 工具:cmake 海康官网下载SDK 运行下面的命令进行安装 sudo dpkg -i MVSXXX.deb安装完成后从在/opt/MVS 路径下就有了相关的库,实际上我们开发的时候只需要…...
AI助力智能安检,基于图像目标检测实现危险品X光智能安全检测系统
基于AI相关的技术来对一些重复性的但是又比较重要的工作来做智能化助力是一个非常有潜力的场景,关于这方面的项目开发实践在我之前的文章中也有不少的实践,感兴趣的话可以自行移步阅读即可:《AI助力智能安检,基于目标检测模型实现…...
开源软件的崛起:历史与未来
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
apk 静默安装
apk 静默安装 - 欧颜柳 - 博客园 (cnblogs.com) 如果需要应用进行静默安装,则需要满足一下两个条件 1 必须添加权限 <uses-permission android:name"android.permission.INSTALL_PACKAGES" /> 2 必须是系统应用,或者系统签名应用 方法…...
Unity记录4.2-存储-从json文件获取Tile路径
文章首发见博客:https://mwhls.top/4813.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议,私信不回。 汇总:Unity 记录 摘要:从json文件获取Tile材质路径。 确定保存方案-2023/08/1…...
vue3页面传参?
...
NB水表和LoRa水表有哪些不同之处?
NB水表和LoRa水表是两种目前市场上常见的智能水表,它们在功能、性能、应用场景等方面存在一些不同之处。 一、技术方面 NB水表采用NB-IoT技术,而LoRa水表采用LoRa技术。NB-IoT技术是窄带物联网技术,它具有良好的低功耗、低成本、高覆盖、高可…...
Java进阶(6)——抢购问题中的数据不安全(非原子性问题) Java中的synchronize和ReentrantLock锁使用 死锁及其产生的条件
目录 引出场景:大量请求拥挤抢购事务的基本特征ACID线程安全的基本特征 加锁(java)synchronized锁ReentrantLock锁什么是可重入锁?如何保证可重入 滥用锁的代价?(死锁)死锁的四个必要条件死锁的案例 总结 引出 1.大量请…...
SpringBoot初级开发--加入Log4j进行日志管理打印(6)
日志记录在整个java工程开发中占着很重要的比重,因为很多问题的排查需要通过日志分析才能确认。在SpringBoot中我用得最多的就是log4j这个日志框架。接下来我们具体配置log4j. log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别&#…...
计算机竞赛 基于GRU的 电影评论情感分析 - python 深度学习 情感分类
文章目录 1 前言1.1 项目介绍 2 情感分类介绍3 数据集4 实现4.1 数据预处理4.2 构建网络4.3 训练模型4.4 模型评估4.5 模型预测 5 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于GRU的 电影评论情感分析 该项目较为新颖,适合作为竞…...
android logcat问题 怎么换成旧版
参考 如果想切换回旧版LOGCAT,按照下方步骤设置即可 File->Settings->Expermental->Logcat->Enable new Logcat tool window:取消勾选 设置好后上方会有一个Toast,询问你是否使用新版logcat,关掉即可 最新测试版移…...
监听的用法watch
1、当想停止某页面定时刷新(监听路由的变化) /**组件被移除时调用 */deactivated() {clearInterval(this.timer);this.timer null;},/**监听路由变化是否刷新 */watch: {// 方法1 //监听路由是否变化$route(to, from) {if (to.name "xxx") {…...
XML—标记语言
什么是XML? Extensible Markup Language,可扩展标记语言。 那标记语言是什么? 用文字做标记表达一些效果或携带一些数据。比如:HTML、XML 我的理解:用倾盆大雨表达雨很大 那XML为什么说是可扩展的呢? 还…...
图数据库Neo4j学习五渲染图数据库neo4jd3
文章目录 1.现成的工具2.Neo4j JavaScript Driver3.neovis4.neo4jd34.1neo4jd3和neovis对比4.2获取neo4jd34.3neo4jd3的数据结构4.4Spring data neo4.4.1 定义返回数据格式4.4.1.1NeoResults4.4.1.2GraphVO4.4.1.3NodeVO4.4.1.4ShipVO 4.4.2 SDN查询解析4.4.2.1 Repo查询语句4.…...
AI增强的社交网络·导师·电话客服……
本月共更新80条知识, 智能时代,人与人之间的差距,体现在前沿知识的整合上。 # BeFake AI AI-augmented social network AI增强的社交网络,用户使用文本提示来生成图像,拍摄自己的“AI”版本。任何人都可以创建全新的虚…...
c# Task异步使用
描述 Task出现之前,微软的多线程处理方式有:Thread→ThreadPool→委托的异步调用,虽然可以满足基本业务场景,但它们在多个线程的等待处理方面、资源占用方面、延续和阻塞方面都显得比较笨拙,在面对复杂的业务场景下&am…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻
在如今就业市场竞争日益激烈的背景下,越来越多的求职者将目光投向了日本及中日双语岗位。但是,一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧?面对生疏的日语交流环境,即便提前恶补了…...
汽车生产虚拟实训中的技能提升与生产优化
在制造业蓬勃发展的大背景下,虚拟教学实训宛如一颗璀璨的新星,正发挥着不可或缺且日益凸显的关键作用,源源不断地为企业的稳健前行与创新发展注入磅礴强大的动力。就以汽车制造企业这一极具代表性的行业主体为例,汽车生产线上各类…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf
FTP 客服管理系统 实现kefu123登录,不允许匿名访问,kefu只能访问/data/kefu目录,不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
