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…...

深度学习在微纳光子学中的应用
深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
Caliper 配置文件解析:fisco-bcos.json
config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...