网站登录验证码是怎么做的,包装制品东莞网站建设,网站更换域名,私人装修接单网站文章目录一、论文信息二、论文概要三、实验动机四、创新之处五、实验分析六、核心代码注释版本七、实验总结一、论文信息
论文题目#xff1a;Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks中文题目#xff1a;奔跑而非行走#xff1a;追求更高FLOPS…
文章目录一、论文信息二、论文概要三、实验动机四、创新之处五、实验分析六、核心代码注释版本七、实验总结一、论文信息
论文题目Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks中文题目奔跑而非行走追求更高FLOPS以实现更快神经网络论文链接点击跳转代码链接点击跳转作者Jierun Chen (中文名陈洁润)香港科技大学HKUST、Shiu-hong Kao (高诗鸿)香港科技大学HKUST、Hao He (何豪)香港科技大学HKUST、Weipeng Zhuo (卓伟鹏)香港科技大学HKUST\Song Wen (温松)罗格斯大学Rutgers University、Chul-Ho Lee (李哲昊)德州州立大学Texas State University、S.-H. Gary Chan (陈绍豪)香港科技大学HKUST单位 香港科技大学HKUST、罗格斯大学、德克萨斯州立大学核心速览提出一种新型部分卷积PConv和FasterNet架构在减少FLOPs的同时提升FLOPS实现更快的推理速度。
二、论文概要
本文指出当前轻量级神经网络虽然FLOPs低但由于内存访问频繁导致FLOPS每秒浮点运算次数不高实际延迟并未显著降低。作者提出部分卷积PConv仅对部分通道进行卷积减少计算和内存访问并基于此构建FasterNet在多个视觉任务上实现速度与精度的最优平衡。
三、实验动机 现有轻量网络如MobileNet、ShuffleNet虽FLOPs低但FLOPS也低导致实际延迟高。 深度可分离卷积DWConv等操作内存访问频繁成为速度瓶颈。 目标在减少FLOPs的同时保持高FLOPS实现真正的高速度。 两个概念FLOPS和FLOPss一个大写一个小写 FLOPS: FLoating point Operations Per Second的缩写即每秒浮点运算次数或表示为计算速度。是一个衡量硬件性能的指标。 FLOPs: FLoating point OPerationS 即 浮点计算次数包含乘法和加法只和模型有关可以用来衡量其复杂度。 总结起来S大写的是计算速度小写的是计算量。计算量 / 计算速度 计算时间Latency 四、创新之处 提出PConv仅对连续的一部分通道进行卷积其余通道保留大幅减少计算和内存访问。 T型感受野PConv PWConv 组合形成T型卷积更关注中心位置与常规卷积近似。 FasterNet架构基于PConv构建结构简洁硬件友好在多个设备上GPU/CPU/ARM均表现优异。 五、实验分析 PConv速度对比在相同FLOPs下PConv的FLOPS显著高于DWConv和GConv。 ImageNet分类FasterNet在相同精度下延迟更低吞吐量更高。 下游任务检测/分割在COCO数据集上FasterNet作为Backbone显著提升检测与分割性能。 消融实验验证了部分比例 r1/4 最优BN比LN更高效不同规模模型适用不同激活函数。 六、核心代码
class Partial_conv3(nn.Module):def __init__(self, dim, n_div, forward):super().__init__()self.dim_conv3 dim // n_divself.dim_untouched dim - self.dim_conv3self.partial_conv3 nn.Conv2d(self.dim_conv3, self.dim_conv3, 3, 1, 1, biasFalse)if forward slicing:self.forward self.forward_slicingelif forward split_cat:self.forward self.forward_split_catelse:raise NotImplementedErrordef forward_slicing(self, x: Tensor) - Tensor:# only for inferencex x.clone() # !!! Keep the original input intact for the residual connection laterx[:, :self.dim_conv3, :, :] self.partial_conv3(x[:, :self.dim_conv3, :, :])return xdef forward_split_cat(self, x: Tensor) - Tensor:# for training/inferencex1, x2 torch.split(x, [self.dim_conv3, self.dim_untouched], dim1)x1 self.partial_conv3(x1)x torch.cat((x1, x2), 1)return x注释版本
class Partial_conv3(nn.Module):def __init__(self, dim, n_div, forward):super().__init__()self.dim_conv3 dim // n_div # 计算要进行3x3卷积的通道数self.dim_untouched dim - self.dim_conv3 # 计算保持不变的通道数self.partial_conv3 nn.Conv2d(self.dim_conv3, self.dim_conv3, 3, 1, 1, biasFalse) # 定义3x3卷积# 根据forward参数选择前向传播的实现方式 两个函数实质上是等价的操作只是实现方式不同而已。if forward slicing:self.forward self.forward_slicingelif forward split_cat:self.forward self.forward_split_catelse:raise NotImplementedErrordef forward_slicing(self, x: Tensor) - Tensor:# 仅用于推理的切片方法x x.clone() # 克隆输入以保持原始输入不变为了后续残差连接# 只对前dim_conv3个通道进行卷积操作x[:, :self.dim_conv3, :, :] self.partial_conv3(x[:, :self.dim_conv3, :, :])return xdef forward_split_cat(self, x: Tensor) - Tensor:# 用于训练/推理的分割-连接方法# 将输入分割为两部分要进行卷积的部分和保持不变的部分x1, x2 torch.split(x, [self.dim_conv3, self.dim_untouched], dim1)x1 self.partial_conv3(x1) # 对第一部分进行卷积x torch.cat((x1, x2), 1) # 将两部分重新连接return x七、实验总结 PConv 在减少FLOPs的同时显著提升FLOPS是替代DWConv的高效选择。 FasterNet 在ImageNet、COCO等任务上实现SOTA速度-精度权衡。 方法简洁、通用性强适用于多种硬件平台。