当前位置: 首页 > news >正文

ConvNeXt 改进 :ConvNeXt添加DCNv3(可变形卷积,CVPR 2023),无需编译,二次创新CNBlock结构 ,独家首发

本文教的是方法,也给出几种改进方法,二次创新结构,百变不离其宗一文带你改进自己模型,科研路上少走弯路。


前言

本文解析的是 CVPR 2023 的模型 InternImage。在视觉大模型普遍转向 Vision Transformer (ViT) 的背景下,InternImage 另辟蹊径,使用改进版可变形卷积(DCNv3的全新架构。通过将 DCN 的动态稀疏特性与现代大模型的扩展定律(Scaling Laws)相结合,InternImage 成功将 CNN 的参数量推向了 10 亿(1B) 级别。实验表明,InternImage 不仅在处理长程依赖上不输于 ViT,还完整保留了卷积在局部特征提取和空间归纳偏置上的天然优势。该模型在多项视觉感知任务中展现了极其恐怖的泛化能力,为构建下一代高效、可扩展的视觉基础模型提供了全新的范式。

理论介绍

基于卷积神经网络 (CNNs) 的大规模模型仍处于早期阶段。本文提出了一种新的基于CNN的大规模基础模型,称为InternImage。与近期聚焦于大密度卷积核的大型CNN不同,InternImage以可变形卷积作为核心算子,因此模型不仅具备下游任务(如检测和分割)所需的大有效感受野,还具备适应输入和任务信息的自适应空间聚合能力。

图(a) 显示了多头自注意力 (MHSA) 的全局聚合,其计算和内存成本在需要高分辨率输入的下游任务中非常昂贵。图(b) 将MHSA的范围限制在一个局部窗口内,以减少成本。图© 是具有非常大卷积核的深度卷积,用于建模长距离依赖关系。图(d) 是可变形卷积,具有与MHSA相似的有利属性,并且在大规模模型中足够高效。从可变形卷积开始,构建了一个大规模的卷积神经网络 (CNN)。

DCNv3在DCNv2版本上进行了改进:
在实践中,DCNv2通常用作常规卷积的扩展,加载预训练权重并进行微调,以获得更好的性能,但这并不完全适用于需要从头开始训练的大规模视觉基础模型。为了解决这个问题,DCNv3从以下几个方面扩展了DCNv2:

  • 1.在卷积神经元之间共享权重:与常规卷积类似,原始 DCNv2 中的不同卷积神经元具有独立的线性投影权重,因此其参数和内存复杂度与采样点的总数成线性关系,这大大限制了模型的效率,特别是在大规模模型中。为了解决这个问题,我们借鉴了可分离卷积的思想,将原始卷积权重 w_k拆分为深度方向和点方向部分,其中深度方向部分由原始位置感知的调制标量 m_k 负责,而点方向部分则是在采样点之间共享的投影权重 w。
  • 2.引入多组机制:多组(头)设计最早出现在组卷积中,它广泛用于变换器中的 MHSA 并与自适应空间聚合一起工作,以有效地从不同位置的不同表示子空间中学习更丰富的信息。受到此启发,我们将空间聚合过程分成 G 组,每组具有单独的采样偏移量 和调制尺度,因此单个卷积层上的不同组可以具有不同的空间聚合模式,从而为下游任务生成更强的特征。
  • 3.沿采样点归一化调制标量:原始 DCNv2 中的调制标量通过 Sigmoid 函数逐元素归一化。因此,每个调制标量的范围是 [0, 1],所有采样点的调制标量之和不稳定,范围为 0 到 K。这导致 DCNv2 层在训练大规模参数和数据时梯度不稳定。为缓解不稳定性问题,我们将逐元素 Sigmoid 归一化更改为沿采样点维度的 Softmax 归一化。通过这种方式,调制标量的和限制为1,使得模型在不同规模的训练过程更加稳定。

DCNv3理论详解可以参考链接:论文地址
DCNv3代码可在这个链接找到:代码地址

训练代码参考和下载:手把手教你使用ConvNeXt训练自己数据集和推理,ConvNeXt模型训练(CVPR 2022),一个能挑战 Vision Transformer 的卷积神经网络,含完整代码和数据集


文章目录

  • 前言
  • 理论介绍
  • 🐴一、实战细节
    • ⚡⚡实验结果画图
    • ⚡⚡改进模块代码
    • ⚡⚡使用教程
      • ☑️步骤1
      • ☑️步骤2
      • ☑️步骤3
  • 🐴二、模型结构分析
    • ⚡⚡ 注意机制结构分析
    • ⚡⚡ConvNeXt 结构分析
      • ☑️CNBlock 结构图
    • ⚡⚡二次创新实战
      • ☑️第一种改进手法
        • 📐模块的传参分析教程
      • ☑️第二种改进手法
      • ☑️第三种改进手法
      • ☑️第四种改进手法
  • 🐴三、论文常用的评估指标
      • ☑️准确率 (Accuracy, ACC)
      • ☑️精确率 (Precision)
      • ☑️召回率 (Recall)
      • ☑️F1分数 (F1 Score)
  • 总结

🐴一、实战细节

⚡⚡实验结果画图

画图效果如下,代码可一键运行

画图代码:

# -*- coding: utf-8 -*-""" @Auth :落花不写码 @File :画图.py @IDE :PyCharm @Motto :学习新思想,争做新青年 """importmatplotlib.pyplotaspltimportpandasaspd
http://www.jsqmd.com/news/572444/

相关文章:

  • 从Boot到App:深入汽车ECU的‘第二系统’,聊聊UDS BootLoader那些关键标志位
  • Guohua Diffusion 风格迁移巨作:将经典电影镜头转化为水墨风动画
  • YOLO12快速部署指南:Gradio界面已配好,启动就能用
  • 别再让模型‘偏科’了:用PyTorch实战长尾数据下的CIFAR-10分类(附完整代码)
  • CasRel模型开源社区贡献指南:从Issue讨论到Pull Request
  • Trae编辑器里用EIDE插件开发STM32,告别Keil依赖?手把手配置STM32F103C8工程
  • nvme-cli技术深度解析:现代NVMe存储管理实战完全指南
  • 《零基础入门Spark》学习笔记 Day 11
  • 构建企业级管理后台:Pure-Admin-Thin架构设计与实战指南
  • ChanlunX缠论插件:技术原理与实战应用指南
  • LeetCode【刷题日记】一篇搞懂链表的删除
  • 前端测试的学习阶段,由基础到进阶的过程认识.....
  • Pixel Couplet Gen效果展示:抽象像素门神与AI生成联语协同呈现效果
  • 终极指南:如何3分钟免费下载国家中小学智慧教育平台所有电子课本PDF
  • 告别单调闪烁!用FastLED库的fill_rainbow和fill_gradient为你的Arduino灯带打造惊艳渐变效果
  • Proxmox集群节点ID冲突导致登录卡死?手把手教你用corosync-cmapctl排查并修复
  • Grafana 9.0企业版安装避坑指南:从RPM包校验到配置文件优化
  • 告别小方块!Unity新手必看:5分钟搞定TextMeshPro中文乱码(附7000+常用字库)
  • Windows系统管理工具:WinUtil一站式优化解决方案
  • 高效论文降重方案:TOP10平台功能对比与选择建议
  • 解决MITIE安装中的subprocess.CalledProcessError:一个Python开发者的实战记录
  • 从‘10010’到任意序列:一个Python脚本帮你自动生成Verilog检测代码
  • JVS低代码:轻应用中如何使用扫码枪完成入库
  • 农业灌溉必备:Penman-Monteith公式实战指南(附Python代码示例)
  • 3个高效技巧:用PPTist快速制作专业演示文稿
  • Jmeter - 函数之timeShitf
  • PHP+MySQL学生成绩管理系统实战:从零搭建到部署上线(附完整源码)
  • MATLAB实战:手把手教你用LSTM+SHAP预测股票价格(附完整数据和避坑指南)
  • DeEAR语音情感分析工具链:集成FFmpeg预处理+DeEAR推理+Excel结果导出方案
  • 【MIMO通信】面向去蜂窝大规模mimo预编码和功率分配【含Matlab源码 15246期】