FasterNet(PConv)paper笔记(CVPR2023)

news2024/11/15 19:23:24

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

先熟悉两个概念:FLOPS和FLOPs(s一个大写一个小写)
FLOPS: FLoating point Operations Per Second的缩写,即每秒浮点运算次数,或表示为计算速度。是一个衡量硬件性能的指标。
FLOPs: FLoating point OPerationS 即 浮点计算次数,包含乘法和加法,只和模型有关,可以用来衡量其复杂度。
总结起来,S大写的是计算速度,小写的是计算量。计算量 / 计算速度 = 计算时间Latency

摘要部分

之前很多网络都聚焦在减少计算量(FLOPs)上,但是作者发现即使FLOPs减少了,latency也没有相应地线性减少。
认为这是由于速度FLOPS并没有相应地提高,而较低的FLOPS是由于频繁地访问内存。

为此,paper主要研究了DWConv(Depthwise convolution).
提出了部分卷积PConv. 可以同时降低FLOPs和提高FLOPS,进而提高速率。
又提出了以PConv为主要元素的backbone网络FasterNet, 有T,S,M,L版本,在提高效率的同时也提高精度。

在这里插入图片描述

背景

对比一些降低了计算量FLOPs的网络,它们的计算速度FLOPS对比,作者发现它们大部分的FLOPS比ResNet50都低。

在这里插入图片描述

因为Latency = FLOPs / FLOPS.
所以即使降低了FLOPs,而FLOPS较低,也不会缩短相应的计算时间。

相关工作

CNN:
在实际应用中,CNN的计算效率和精度一样重要,所以有很多改进效率的工作,
较流行的是group卷积和深度可分离卷积,应用它们的有MobileNet, ShuffleNet, GhostNet等。
这些工作通过考虑filter的冗余,减少参数和FLOPs。但是为了补偿下降的精度,一般会增加channel,而channel的增加会导致内存访问量的增加。
而作者通过考虑feature map的冗余,提出部分卷积PConv,降低FLOPs, 同时降低内存访问量。

ViT,MLP和变体
很多工作致力于改进ViT的结构和训练方式,主要的趋势是通过降低attention, 卷积的复杂度,追求一种精度和计算时间的平衡。
还有工作把attention换成MLP。不过这些常演变成类似于CNN的工作。
作者根据以往paper认为attention相比于CNN的优势还不清晰,而且attention比CNN要慢,在工业界没有CNN那么受欢迎。
目前深度可分离卷积仍然比较流行,所以作者就专注研究DWConv, 找出困扰FLOPS的点。

对深度可分离卷积不太熟悉的可参考MobileNetV1。

内存访问量

之前提到FLOPS受限于内存访问量,下面就看一下内存访问量。
假设input size为:(c, h, w), 卷积核为k*k, output size为(c, h, w)
那么DWConv的FLOPs为在这里插入图片描述
(卷积核窗口移动次数为output size, 每次计算量为k2 *c,不需要扩张channel)
普通卷积的FLOPs为在这里插入图片描述
(卷积核窗口移动次数为output size, 普通卷积会把channel扩张后计算,参见下图,因为input 和output channel都是c, 所以扩张后为c2
在这里插入图片描述

深度可分离卷积中DWConv后面会跟一个1x1卷积,即PWConv(pointwise convolution)。

深度可分离卷积不能算是普通卷积的替代品,因为精度会下降,对此实际应用中会增加channel作为补偿。
channel也称为网络宽度,假设DWConv的channel增加到c’ (c’ > c), 例如在inverted residual blocks中channel就扩张了6倍。
channel的扩张增加了内存访问量,增加时间延迟,尤其是I/O-bound设备。

这里访问图片/特征图 和 卷积filter的内存访问量为:
DWConv: 在这里插入图片描述
普通卷积:在这里插入图片描述
其中h * w * 2c’是I/O操作的内存访问,很难再进一步优化(乘2是访问input和output内存,假设了它们size相同)。

提出部分卷积PConv

部分卷积如下图,不同于以往对input的所有channel都做卷积,PConv只对其中一部分channel cp做卷积,剩下的放在那不去处理。

在这里插入图片描述

为什么可以只做部分卷积而不影响精度?
是由于作者观察到不同channel的feature map高度相似,如下图。这个feature map的冗余在其他的paper中也提到过。
这是一个预训练的ResNet50的特征图。

在这里插入图片描述

既然特征图这么多冗余,不如只用其中的一部分进行卷积。

为了内存的连续性,选取前段或后段连续cp个channel,用来代表整个特征图。
仍然假设input和output 的channel一样,那么PConv的FLOPs为
在这里插入图片描述
(卷积核和input map一个窗口计算量为k2 * cp2(普通卷积计算),卷积核窗口移动次数为output size)

如果cp / c = 1/4, 那么PConv的FLOPs就仅为普通卷积的1/16.

PConv的内存访问量:
在这里插入图片描述
(input,output feature map 和 卷积核内存访问)
如果cp / c = 1/4, 那么内存访问量将是普通卷积的1/4.

既然只取1/4的input channel, 那是不是可以把剩下的channel移除?
如果移除,就变成了更少channel的普通卷积,不再是部分卷积了;而且留着这些channel可以让后续的PWConv利用起来。

既然说到了后续的PWConv。

PConv接PWConv(1x1卷积)

前面说到PConv只利用了一部分channel, channel没有被充分利用啊。
这时后面再跟一个PWConv就可以充分利用channel信息。

PConv和PWConv的结合体有点像T型的卷积,如下图。感受野集中在中间位置。而普通卷积是均匀分布的。

在这里插入图片描述

那么感受野集中在中间有没有影响呢?为此作者调查了一下ResNet18的每一个filter,
用Frobenius norm计算重要性,卷积核size为k2 * c。值越大认为越重要。

在这里插入图片描述

然后统计出来下面的直方图,3x3的卷积核位置依次为1~9,
从图中大致认为中间的位置5重要性最高,因此认为上面的T型卷积应该可以近似普通卷积。
在这里插入图片描述

虽然T型卷积可以直接计算,不过作者认为拆分成PConv和PWConv更好,可以利用中间卷积的冗余性,而且进一步降低FLOPs.
假设input和output的size都是(h,w,c), 那么T型卷积的FLOPs为

在这里插入图片描述

拆分成PConv和PWConv的FLOPs为
在这里插入图片描述

FasterNet

作者提出了一个用PConv构建出来的backbone网络FasterNet, 结构尽可能simple.
结构图如下,4个stage.
在这里插入图片描述

其中embedding layer是一个4x4 conv, stride=4, 相当于一个卷积核对图片的每一块处理。
merging layer是2x2 conv, stride=2, 相当于把前面分割成块处理的图 有overlap地合并起来。
这样做也可以下采样,扩张channel.
观察到最后2个stage中的block访问内存较少,有较高的FLOPS, 所以相对地把后2个stage多放一些blocks.
每个PConv跟2个1x1卷积,加上residual.

BN层和激活函数仅放在中间的PWConv后面,以保持feature多样性,降低复杂度。
选择BN而不是其他的归一化是因为BN可以和Conv层结合到一起。

激活函数的选择也是根据实验得来的,小模型用GELU,大模型用ReLU.
同样实验得到 cp / c 最好是1/4.
在这里插入图片描述

几种卷积在不同平台上FLOPS, latency对比

在这里插入图片描述

为了验证PConv是不是真的比DWConv更近似于普通卷积,
作者把ResNet50的4个stage中 每个stage的第一个3x3 conv的input, output 特征图提取出来。
分成train, val, test集,用不同卷积组合训练之后,再用test集测试output特征图的MSE loss.
当然是loss越小,这个卷积组合就越近似于普通卷积(但是比普通卷积更快)。

在这里插入图片描述

在COCO数据集上的latency和mAP对比。

在这里插入图片描述
最后贴上FasterNet的结构。

在这里插入图片描述

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

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

相关文章

Pytorch实现鸟类品种分类识别(含训练代码和鸟类数据集)

Pytorch实现鸟类品种分类识别(含训练代码和鸟类数据集) 目录 Pytorch实现鸟类品种分类识别(含训练代码和鸟类数据集) 1. 前言 2. 鸟类数据集 (1)Bird-Dataset26 (2)自定义数据集 3. 鸟类分类识别模型训练 (1&a…

核心实验13合集_vlan mapping 和QinQ_ENSP

项目场景一: 核心实验13合集-1_vlan高级配置_ENSP vlan mapping vlan转换 将用户端发来的vlan30-31的标签全部转换成vlan100向上发送 相关知识点: 定义: VLAN Mapping通过修改报文携带的VLAN Tag来实现不同VLAN的相互映 射。 目的: 在某些场景中&#xf…

c语言数组的用法

c语言数组的用法如下: 一维数组的定义方式 在C语言中使用数组必须先进行定义。一维数组的定义方式为: 类型说明符 数组名 [常量表达式]; 其中,类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表…

原生js之dom表单改变和鼠标常用事件

那么好,本次我们聊聊表单改变时如何利用onchange方法来触发input改变事件以及鼠标常用的滑入滑出,点击down和点击up事件. 关于onchange方法 onchange方法在鼠标输入完后点击任何非输入框位置时触发.触发时即可改变原有输入框的值. out 、leave、over、down、up鼠标方法 当用…

YOLOV7改进-空洞卷积+共享权重的Scale-Aware RFE

代码 1、先把文件复制到common.py中 2、yolo.py添加类名 3、下半部分进行添加修改 4、cfg-training:新建配置文件 加了一行,后面对于序号1 5、这里选择12层替代

软件第三方测评机构简析:良好的测试环境对软件产品起到的作用

近年来,软件行业发展迅速,软件产品的质量成为用户关注的焦点。而软件的质量评估往往需要依赖专业的第三方测评机构,为了更好地了解软件测试环境对产品质量的重要性,小编整理了以下简析: 一、良好的测试环境对软件产品…

Redis是单线程Or多线程?单线程为什么反而快?

0. 从什么角度看是单线程or多线程 从总体角度来,redis是单线程的: Redis 单线程指的是: 「接收客户端请求->解析请求 ->进行数据读写等操作->发送数据给客户端」 这个过程是由一个线程(主线程)来完成的…

【Leetcode刷题】哈希

本篇文章为 LeetCode 哈希模块的刷题笔记,仅供参考。 哈希表是一种使用哈希函数组织数据,以支持快速插入和搜索的数据结构。哈希表通过哈希函数通过将任意类型的数据映射到固定大小的数据,以实现快速查找和存储数据。C 中的无序容器 unorder…

音视频编码格式-AAC ADT

1408(16进制) : 0001 0100 0000 1000 audioObjectType为 00010 , 即 2, profie (audioObjectType -1 ) AAC LC samplingFrequencyIndex为 1000 , 即 8 , 对应的采样频率为 16000 channelConfiguration为 0001 , 表示channel数量为1

10、哈希函数与哈希表

哈希函数 出现次数最多的 32G 小文件方法:利用哈希函数在种类上均分 设计RandomPool结构 设计一种结构,在该结构中有如下三个功能: insert(key):将某个key加入到该结构,做到不重复加入 delete(key):将原本在结构中的某个key移除 getRando…

电商3D资产优化管线的自动化

如果你曾经尝试将从 CAD 程序导出的 3D 模型上传到 WebGL 或 AR 服务,那么可能会遇到最大文件大小、永无休止的进度条和糟糕的帧速率等问题。 为了创作良好的在线交互体验,优化 3D 数据的大小和性能至关重要。 这也有利于你的盈利,因为较小的…

识别评估项目风险常用6大方法

提前识别和评估项目风险,有助于风险预防和规避,从而提前采取预防措施,有效避免和减少风险的发生,防止风险进一步扩大和恶化。如果没有提前识别风险,没有及时处理风险问题,往往造成项目交付延迟、成本超支等…

实时监测与优化:3D车辆状态可视化的崭新前景

当谈到车辆状态可视化时,我们进入了数字化时代的新境界。这不仅是一种技术革命,更是一种全新的智能化管理方式,为车辆运营提供了前所未有的便利和效率。以下是3D车辆状态可视化的一些关键方面,以及它如何改变了我们的交通和物流管…

RT-DETR个人整理向理解

一、前言 在开始介绍RT-DETR这个网络之前,我们首先需要先了解DETR这个系列的网络与我们常提及的anchor-base以及anchor-free存在着何种差异。 首先我们先简单讨论一下anchor-base以及anchor-free两者的差异与共性: 1、两者差异:顾名思义&…

《TCP/IP网络编程》阅读笔记--域名及网络地址

目录 1--域名系统 2--域名与 IP 地址的转换 2-1--利用域名来获取 IP 地址 2-2--利用 IP 地址获取域名 3--代码实例 3-1--gethostbyname() 3-2--gethostbyaddr() 1--域名系统 域名系统(Domain Name System,DNS)是对 IP 地址和域名进行相…

三分钟,教你做出领导满意的可视化报表

数字化已然成为社会发展的共识,企业想要在未来的竞争中占据优势,获取不断发展的数字经济,就必须将数据看作企业的战略资源,利用数据可视化将数据转化为信息,促进企业发展。 数据可视化是什么 在早期数据分析领域&…

业务安全情报第22期 | 不法分子为何盗刷企业短信?

目录 手机短信的重要性 手机短信接口被攻击的危害 社交App短信遭遇疯狂盗刷 社交App该如何防控威胁 规则上的防护措施 技术上的防护措施 近期监测发现,某知名社交平台遭遇黑灰产大规模注册账号,账号短信接口被疯狂盗用。不仅影响正常用户操作&…

TSINGSEE青犀AI视频分析/边缘计算/AI算法·人脸识别功能——多场景高效运用

旭帆科技AI智能分析网关可提供海量算法供应,涵盖目标监测、分析、抓拍、动作分析、AI识别等,可应用于各行各业的视觉场景中。同时针对小众化场景可快速定制AI算法,主动适配大厂近百款芯片,打通云/边/端灵活部署,算法一…

Stable Diffusion — ControlNet 超详细讲解

Stable Diffusion — ControlNet 超详细讲解 ControlNet 最近非常火🔥!ControlNet 和 Stable Diffusion 的结合使 Stable Diffusion 能够接受指导图像生成过程的条件输入,从而增强了 Stable Diffusion 的性能。今天为大家深入剖析 ControlNe…

华为数通方向HCIP-DataCom H12-821题库(单选题:321-340)

第321题 BGP的Open报文是用于建立对等体连接的,以下哪一项不属于Open报文中携带的参数信息? A、发送者的Router ID B、AS号 C、BGP版本号 D、TCP端口号 答案:D 解析:以下是BGP的Open报文: 第322题 在建立BGP对等体的过程中,OpenSent状态表明BGP等待的Open报文 并对收…