YOLOv11改进策略【卷积层】| CVPR-2023 部分卷积 PConv 轻量化卷积,降低内存占用

简介: YOLOv11改进策略【卷积层】| CVPR-2023 部分卷积 PConv 轻量化卷积,降低内存占用

一、本文介绍

本文记录的是利用部分卷积 Partial Conv优化YOLOv11的目标检测方法研究深度可分离卷积可以减少FLOPs,但会导致更高的内存访问,引起延迟并减慢整体计算。==部分卷积利用逐点卷积处理通道冗余,减少模型计算量和内存访问量。==


专栏目录:YOLOv11改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
专栏地址:YOLOv11改进专栏——以发表论文的角度,快速准确的找到有效涨点的创新点!

二、部分卷积原理介绍

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

2.1 出发点

  • 解决FLOPS问题:在追求快速神经网络的过程中,许多工作致力于减少浮点运算(FLOPs),但研究者发现FLOPs的减少并不一定能带来延迟的同等降低,主要原因是每秒浮点运算次数(FLOPS)过低。通过对典型神经网络在Intel CPU上FLOPS的比较,发现很多现有神经网络FLOPS较低,其FLOPS普遍低于流行的ResNet50,导致“快速”神经网络实际上不够快,FLOPs的减少无法转化为延迟的准确降低。
  • 深度可分离卷积的内存访问问题:深度可分离卷积(DWConv)是一种常用的减少FLOPs的方法,但它在实际应用中存在问题。当为了补偿精度下降而增加网络宽度(即DWConv的通道数c增加到c')时,会导致更高的内存访问,从而引起不可忽视的延迟并减慢整体计算,特别是对于I/O受限的设备。

2.2 原理

  • 利用特征图冗余:观察到特征图在不同通道之间存在高度相似性(冗余),通过部分卷积(PConv)来利用这种冗余。PConv不是对所有输入通道进行常规卷积,而是仅对一部分输入通道应用常规卷积进行空间特征提取,同时保持其余通道不变。
  • 减少计算冗余和内存访问:通过这种方式,同时减少了计算冗余和内存访问。从计算量(FLOPs)来看,PConv的FLOPs仅为常规卷积的一部分(例如,当典型的部分比例$r = \frac{c_{p}}{c}=\frac{1}{4}$时,PConv的FLOPs仅为常规Conv的$\frac{1}{16}$);从内存访问量来看,PConv的内存访问量也仅为常规卷积的一部分(同样在$r=\frac{1}{4}$时,仅为常规Conv的$\frac{1}{4}$)。

2.3 结构

  • 基本结构:对于输入$I\in\mathbb{R}^{c×h×w}$,PConv选取连续的$c_{p}$个通道(例如可以是第一个或最后一个连续的通道作为代表)应用常规卷积,输出的特征图维度与输入特征图维度相同(即输出$O\in\mathbb{R}^{c×h×w}$)。
  • 与PWConv结合:为了充分利用所有通道的信息,在PConv之后紧接着添加一个逐点卷积(PWConv)。它们在输入特征图上的有效感受野看起来像一个T形卷积,这种T形卷积更关注中心位置,与均匀处理一个区域的常规卷积不同。并且将T形卷积分解为PConvPWConv可以进一步利用滤波器间的冗余,节省FLOPs。

在这里插入图片描述

2.4 优势

  • 有效提取空间特征:实验证明PConv在提取空间特征方面是有效的。通过构建由PConvPWConv组成的简单网络,并在从预训练ResNet50提取的特征图数据集上进行训练,结果表明PConv + PWConv能达到最低的测试损失,更好地近似常规卷积进行特征变换,说明仅从部分特征图中捕获空间特征是足够且高效的。
  • 适用于构建快速神经网络PConv为设计快速有效的神经网络提供了一种新的选择,具有很大潜力替代现有的DWConv等操作,并且基于PConv构建的FasterNet在各种设备上实现了快速运行,在分类、检测和分割任务上取得了良好的性能,验证了PConv的有效性。

论文:https://arxiv.org/pdf/2303.03667
源码:https://github.com/JierunChen/FasterNet

三、实现代码及YOLOv11修改步骤

模块完整介绍、个人总结、实现代码、模块改进、二次创新以及各模型添加步骤参考如下地址:

https://blog.csdn.net/qq_42591591/article/details/142917942

目录
相关文章
|
3月前
|
存储 算法 Java
Java内存管理深度剖析与优化策略####
本文深入探讨了Java虚拟机(JVM)的内存管理机制,重点分析了堆内存的分配策略、垃圾回收算法以及如何通过调优提升应用性能。通过案例驱动的方式,揭示了常见内存泄漏的根源与解决策略,旨在为开发者提供实用的内存管理技巧,确保应用程序既高效又稳定地运行。 ####
|
3天前
|
机器学习/深度学习 编解码 BI
YOLOv11改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用
YOLOv11改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用
15 3
YOLOv11改进策略【Conv和Transformer】| CVPR-2023 BiFormer 稀疏自注意力,减少内存占用
|
6月前
|
安全 索引
操作系统中的内存管理策略
【8月更文挑战第23天】
144 1
|
2月前
|
算法 Java
堆内存分配策略解密
本文深入探讨了Java虚拟机中堆内存的分配策略,包括新生代(Eden区和Survivor区)与老年代的分配机制。新生代对象优先分配在Eden区,当空间不足时执行Minor GC并将存活对象移至Survivor区;老年代则用于存放长期存活或大对象,避免频繁内存拷贝。通过动态对象年龄判定优化晋升策略,并介绍Full GC触发条件。理解这些策略有助于提高程序性能和稳定性。
|
2月前
|
NoSQL 算法 Redis
redis内存淘汰策略
Redis支持8种内存淘汰策略,包括noeviction、volatile-ttl、allkeys-random、volatile-random、allkeys-lru、volatile-lru、allkeys-lfu和volatile-lfu。这些策略分别针对所有键或仅设置TTL的键,采用随机、LRU(最近最久未使用)或LFU(最少频率使用)等算法进行淘汰。
58 5
|
2月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
201 7
|
3月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
92 1
|
3月前
|
存储 分布式计算 算法
1GB内存挑战:高效处理40亿QQ号的策略
在面对如何处理40亿个QQ号仅用1GB内存的难题时,我们需要采用一些高效的数据结构和算法来优化内存使用。这个问题涉及到数据存储、查询和处理等多个方面,本文将分享一些实用的技术策略,帮助你在有限的内存资源下处理大规模数据集。
43 1
|
3月前
|
存储 监控 Java
深入理解计算机内存管理:优化策略与实践
深入理解计算机内存管理:优化策略与实践
|
5月前
|
缓存 监控 NoSQL
阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略
大家好,我是 V 哥。粉丝小 A 面试阿里时被问到 Redis 的内存淘汰策略问题,特此整理了一份详细笔记供参考。Redis 的内存淘汰策略决定了在内存达到上限时如何移除数据。希望这份笔记对你有所帮助!欢迎关注“威哥爱编程”,一起学习与成长。