【CVPR轻量级网络】- 追求更高的FLOPS(FasterNet)

news2024/11/15 23:00:03

文章目录

      • 题目:
      • 摘要
        • 1 介绍
        • CNN中FLOPs的计算
      • 2 相关工作
      • 3 PConv和FasterNet的设计
        • 3.1 偏卷积作为基本算子(PConv)
        • 3.2 PConv后接PWConv
        • 3.3 FasterNet作为通用骨干
      • 4实验

题目:

Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks

摘要

   提出了一种新的部分卷积(PConv),通过同时减少冗余计算和内存访问,可以更有效地提取空间特征。FLOPs 的减少并不一定会导致类似水平的延迟减少。在ImageNet1k上,小型FasterNet-T0在GPU、CPU和ARM处理器上分别比MobileViT XXS快3.1倍、3.1倍和2.5倍,同时准确率高2.9%。我们的大型FasterNet-L实现了令人印象深刻的83.5%的顶级精度,与新兴的Swin-B不相上下,同时在GPU上的推理吞吐量(吞吐量大,就是指单位时间内成功地传送数据的数量大。)提高了49%,并在CPU上节省了42%的计算时间。

1 介绍

   导致低FLOPS问题的主要原因是频繁的内存访问。提出了一种新的部分卷积(PConv)作为一种竞争性的替代方案,它减少了计算冗余和内存访问次数。PConv比常规Conv具有更低的FLOPs,而比DWConv/GConv具有更高的FLOPs,但是PConv可以更好地利用设备上的计算能力。
   MobileViT和MobileFormer通过将DWConv与改进的注意力机制相结合来降低计算复杂度。但是DWConv会受到内存访问增加的副作用。MicroNet 进一步分解和稀疏网络,将其 FLOPs 推到极低的水平。 尽管它在 FLOPs 上有所改进,但这种方法经历了低效的碎片计算。

  • 1)指出了实现更高FLOPS的重要性,而不仅仅是为了更快的神经网络而简单地减少FLOPs。
  • 2)引入了一种简单但快速有效的PConv,它很有可能取代现有的首选DWConv。
  • 3)推出了FasterNet,它在GPU、CPU和ARM处理器等各种设备上运行良好且普遍快速。

CNN中FLOPs的计算

   FLOPS: 注意全大写,是floating point operations per second的缩写,意指每秒浮点运算次数,理解为计算速度。是一个衡量硬件性能的指标。(越大越好)
   FLOPs: 注意s小写,是floating point operations的缩写(s表复数),意指浮点运算数,理解为计算量。可以用来衡量算法/模型的复杂度。(越小越好)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2 相关工作

   CNN,群卷积和深度可分离卷积(由深度卷积和逐点卷积组成)可能是最流行的卷积。它们已被广泛用于面向移动/边缘的网络,如MobileNets、ShuffleNets、GhostNet、EfficientNets、TinyNet、Xception、CondenseNet、TVConv、MnasNet和FBNet。

3 PConv和FasterNet的设计

   虽然DWConv在减少FLOPs方面是有效的,但它通常后面跟着逐点卷积(PWConv),不能简单地用来取代常规的Conv,因为它会导致严重的精度下降。因此,在实践中,DWConv的信道数c(或网络宽度)增加到c0(c0>c),以补偿精度下降,例如,对于反相残差块中的DWConv,宽度扩展了六倍。然而,这会导致更高的内存访问,这可能会导致不可忽略的延迟并降低整体计算速度,尤其是对于I/O绑定设备。

3.1 偏卷积作为基本算子(PConv)

它只需在输入通道的一部分上应用正则Conv进行空间特征提取,而不影响其余通道。对于连续或规则的内存访问,我们认为第一个或最后一个连续的cp通道是整个特征图的代表,我们认为输入和输出特征图具有相同数量的通道。PConv的FLOPs仅为常规Conv的1/16
在这里插入图片描述

PConv具有较小的存储器访问量:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.2 PConv后接PWConv

   为了充分有效地利用来自所有通道的信息,进一步将逐点卷积(PWConv)附加到PConv。在输入特征图上的有效感受野看起来像一个T形Conv,与均匀处理补丁的常规Conv相比,它更关注中心位置。

在这里插入图片描述

在这里插入图片描述

   为了证明这个T形感受野的合理性,首先通过计算位置上的Frobenius范数来评估每个位置的重要性。我们假设,如果一个位置的Frobenius范数比其他位置大,那么它往往更重要。我们认为一个显著位置是具有最大Frobenius范数的位置。然后,我们在预先训练的ResNet18中共同检查每个滤波器,找出它们的显著位置,并绘制显著位置的直方图。在滤波器中,中心位置是最频繁的显著位置。换句话说,中心位置的重量更大。
在这里插入图片描述

T形Conv的FLOPs可以计算为
在这里插入图片描述

3.3 FasterNet作为通用骨干

在这里插入图片描述

   它有四个层次级,每个层次级之前都有一个嵌入层(一个步长为4的正则Conv 4×4)或一个合并层(步长为2的正则Conv 2×2),用于空间下采样和信道数扩展。每个阶段都有一堆FasterNet块,最后两个阶段的块消耗更少的内存访问,并且往往具有更高的FLOPS,如表1中的经验验证。因此,我们放置了更多的FasterNet块,并相应地将更多的计算分配给最后两个阶段。每个FasterNet块都有一个PConv层,后面是两个PWConv(或Conv 1×1)层。它们一起显示为反向残差块,其中中间层具有扩展数量的通道,并放置快捷连接以重用输入特征。归一化层和激活层对于高性能神经网络也是必不可少的,只将它们放在每个中间PWConv之后,以保持特征多样性并实现更低的延迟。BN的好处是可以将其合并到相邻的Conv层中,以实现更快的推理。选择GELU用于较小的FasterNet变体,ReLU用于较大的FasterNet变体。最后三层,即全局平均池、Conv 1×1和全连接层,一起用于特征转换和分类。
  为了在不同的计算预算下为广泛的应用提供服务,我们提供了FasterNet的小型、小型、中型和大型变体,分别称为FasterNetT0/1/2、FasterNet-S、FasterNet-M和FasterNet-L。它们共享相似的架构,但在深度和宽度上有所不同。

4实验

Latency on GPU:模型推理和后处理的时间,时间越小,执行速度越快
在这里插入图片描述

消融实验:
在这里插入图片描述
1、对于部分比率r,我们默认为所有fastnet变体将其设置为 1 /4实现了更高的准确性、更高的吞吐量和更低的延迟。
2、对于归一化,选择BN而不是LN。因为BN可以合并到其相邻的卷积层中,从而更快地进行推断。
3、对于激活函数,GELU比ReLU更适合fastnet - t0 /T1模型。然而,fastnet-t2 /S/M/L则相反。

PConv + PWConv的测试损失最小,这意味着它们在特征变换中可以更好地逼近一个规则的Conv
在这里插入图片描述
为了进一步评估fastnet的泛化能力,在具有挑战性的COCO数据集上进行了对象检测和实例分割的实验。使用fastnet作为骨干,并配备流行的掩码R-CNN检测器
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/431520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android---Jetpack之Paging

目录 Paging 组件的意思 Paging 支持的架构类型 Paging 的工作原理 PositionalDataSource PagekeyedDataSource ItemKeyedDataSource BoundaryCallback Paging 组件的意思 分页加载是在应用程序开发过程中十分常见的需求,Paging 就是 Google 为了方便 Andr…

JAVA局域网监听软件的设计与开发

网络监听软件是提供给网络安全管理人员进行安全管理的工具,可以用来监视网络的状态、数据流动情况以及网络上传输的信息,以获取有用信息。作为黑客来说,通过网络监听可以获取其所需信息(比如密码等);对黑客…

初中级Android工程师如何快速成长寻求突破

前言 写这篇文章的初衷是看到很多同学在一家公司工作了三五年,因为技术没有得到提升而随着年龄的增长导致不敢提出涨薪和跳槽找工作。希望这篇文章能够给这些还是初中级Android工程师的朋友一些启发。 快速成长 我们在向领导提出加薪申请或者是准备跳槽到更大的平…

概率机器学习笔记

1.单变量高斯混合分布 原书对结果的得出没有给出解释,我比较困惑,网上找到了一篇推导的帖子,看完就明白了。 式2.49的解释: 红框即为关键处,这是显而易见的期望,不过是条件方差的期望: 该证明的作者&…

共阳(共阴)LED数码管编码交互演示

LED数码管原理 LED数码管有两大类,一类是共阴极接法,另一类是共阳极接法,共阴极就是各段的显示字码共用一个电源的负极,是高电平点亮,共阳极就是各段的显示字码共用一个电源的正极,是低电平点亮。只要控制…

WPF教程(一)---创建一个WPF程序基础知识

1.前言: 这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2019创建一个WPF应用程序。 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言--例如C#。 2) 会一点“标准通用标记语言”:WPF窗体程序使用的XAML语…

字符集与字符编码的区别与演进(ASCII、GBK、UNICODE)

1 常见编码 1.1 单字节编码:ASCII ASCII使用1个字节(8个bit)来记录一组常用字符,见下表: 例如其中字母a的二进制位:1100 001 97,那么a在计算机中就可以用1100001来保存。 注意上表中其实只…

Spring入门案例--DI入门案例

入门案例思路分析 (1)要想实现依赖注入,必须要基于IOC管理Bean DI的入门案例要依赖于前面IOC的入门案例 (2)Service中使用new形式创建的Dao对象是否保留? 需要删除掉,最终要使用IOC容器中的bean对象 (3)Service中需要的Dao对象如何进入到Service中?…

1682_尝试写一个shell(做个努力的小菜鸟)

全部学习汇总: GreyZhang/bash_basic: my learning note about bash shell. (github.com) 跋:看了一下,这个可能是我大约十年前的学习笔记了,脑海中都没有多少那时候的记忆痕迹了。然而,当初的一些时间消磨的确是给今天…

Android/SELinux 添加 AVC 权限

authordaisy.skye的博客_CSDN博客-Qt,嵌入式,Linux领域博主 增加属性配置 在文件路径下增加了如下代码用于gc02m1的兼容倒置前置摄像头成像配置 //daisy if(MSM8909_SENSORS){ property_set("ro.camera.gc02m1", "1"); } /home/scooper/works…

go之基于rabbitmq的火山云服务器弹性伸缩管理程序

Author: wencoo Blog:https://wencoo.blog.csdn.net/ Date: 18/04/2023 Details:文章目录 项目背景项目功能模块实现configMq.jsonconfigECS.jsonconfigDB.json 完整代码打赏 项目背景 项目服务器不够用了,需要弹性伸缩服务器,准备使用火山的…

算法套路十——回溯法之子集型回溯

算法套路十——回溯法之子集型回溯 算法实例一:LeetCode17. 电话号码的字母组合 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不…

【Spring Boot】spring boot 项目的创建

目录 一.本地创建 二.官网创建 一:本地创建 1. 2. 3. 4. 5. 6. 选择相应的版本,并点击next 7. 8. 9. 二.官网创建 1. 点击链接进入官网 2. 3. 5. 6.

【进阶C语言】动态内存管理

前言 📕作者简介:热爱跑步的恒川,致力于C/C、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于C语言进阶系列,本专栏主要内容为数据的存储、指针的进阶、字符串和内存函数…

win10 专业版登录Microsoft账户提示:0x800704cf 错误代码——问题解决记录

win10 专业版登录Microsoft账户提示:0x800704cf 错误代码——问题解决记录 系统版本 版本 Windows 10 专业版 版本号 21H2 安装日期 ‎2021/‎5/‎7 操作系统内部版本 19044.2846 体验 Windows Feature Experience Pack 120.2212.4190.0 问题描述 曾经手动修改过…

《程序员面试金典(第6版)》面试题 10.11. 峰与谷(双指针,贪心思想)

题目描述 在一个整数数组中,“峰”是大于或等于相邻整数的元素,相应地,“谷”是小于或等于相邻整数的元素。例如,在数组{5, 8, 4, 2, 3, 4, 6}中,{8, 6}是峰, {5, 2}是谷。现在给定一个整数数组&#xff0c…

网络原理IP协议

hi,大家好,小魏又来了,我们已经认识了UDP,TCP,现在来认识一下位于网络层的协议,IP 认识IP地址 1.地址管理 2.路由选择 在之前的讲解中我们已经认识到了网络层的IP协议,负责寻路操作 IP地址(Internet Protocol Address)是指互联网协议地址&#xff0…

【Java版oj】day35年会抽奖、抄送列表

目录 一、年会抽奖 (1)原题再现 (2)问题分析 (3)完整代码 二、抄送列表 (1)原题再现 (2)问题分析 (3)完整代码 一、年会抽奖 …

C++ 命名空间 输入输出 缺省参数 引用 函数重载

在学习C之前,我们要先知道C和C是向上兼容的,也就是说,在cpp文件中既可以写入C的代码,也可以写C的代码,在日常编写代码中,经常会出现C和C混编的情况。 此博客都是在 C 的缺陷的基础之上 整理 C 中对其的优化…

PyTorch 之 强大的 hub 模块和搭建神经网络进行气温预测

文章目录一、强大的 hub 模块1. hub 模块的使用2. hub 模块的代码演示二、搭建神经网络进行气温预测1. 数据信息处理2. 数据图画绘制3. 构建网络模型4. 更简单的构建网络模型本文参加新星计划人工智能(Pytorch)赛道:https://bbs.csdn.net/topics/613989052 一、强…