UniRepLKNet:一种用于音频、视频、点云、时间序列和图像识别的通用感知大核卷积神经网络

在这里插入图片描述
论文: https://arxiv.org/abs/2311.15599

模型: https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main

主页:https://invictus717.github.io/UniRepLKNet/

contribution

提出了四条guide line用于设计大核CNN架构模型,用于图像识别,语音、点云、时序任务上,并且均取得了较SOTA的成绩,打破了传统观念上 只有Transformer才能一统多模态的事情。(只有打破人们传统观念,才能更加吸引人眼球)

大核CNN架构设计

    RepLKNet [1]里提出了用超大卷积核(从13x13到31x31)来构建现代CNN以及正确使用超大卷积核的几个设计原则。但从架构层面看,RepLKNet只是简单地用了Swin Transformer的整体架构,并没有做什么改动。SLaK将kernel size进一步增大到了51x51,但其简单采用了ConvNeXt的架构。总得来讲,当前大核CNN架构设计要么遵循现有的CNN设计原则,要么遵循现有的Transformer设计原则。
Questions: 单纯的用已有模型架构来指导设计大核CNN架构是否真的充分发挥其优势?

revisit 大核CNN的优势
  • 不需要堆叠很多层CNN就可以实现较大的感受野

不堆叠很多层CNN就无法得到更高层次的抽象特征和更强的表征能力,但是堆叠很多大kernel CNN 又会使得感受野太大!最主要的是计算量暴增!

传统CNN设计带来的局限
  • 小卷积核必须大量堆叠才能实现大感受野
  • 卷积层多了,必然特征更加抽象更加high level,但是更加抽象和high level特征需要到什么程度才能满足任务?
  • 普通CNN计算量太大,在计算资源受限的设备上,很难保证其效果

四条大核CNN guideline

  • 关于局部结构设计:用一些像SE或bottleneck之类的高效结构来增加深度
  • 关于重参数化:用膨胀卷积来捕捉稀疏特征。本文提出了一个子模块叫Dilated Reparam Block,这个模块中除了大核卷积以外,还用了并行的膨胀卷积,而且利用结构重参数化的思想,整个block可以等价转换为一个大核卷积。这是因为小kernel+膨胀卷积等价于大kernel+非膨胀卷积。
  • 关于kernel size:根据下游任务及所采用的具体框架来选定kernel size。正如前文所提到的,对语义分割框架UperNet而言,低层feature过早地获得过大的感受野可能会产生负面效果。但这并不意味着大kernel会降低模型的表征能力或最终feature的质量!
  • 关于scaling law:对一个已经用了很多大kernel的小模型而言,当增加模型的深度时(例如从Tiny级别模型的18层增加到Base级别的36层),增加的那些block应该用depthwise 3x3,不用再增加大kernel了,感受野已经足够大了,但用3x3这么高效的操作来提高特征抽象层次总是有好处的。

一句话总结:用大kernel来提升感受野,用depthwise、se、bottleneck来提升深度、根据特定任务来定kernel size

在这里插入图片描述

如何将大核CNN用于其他模态任务?

    由于不同模态的数据形式各不相同,因此需要特别设计模态数据形式,保证其可以用CNN来提取特征!这一点也极大体现了作者的工程能力!
    将视频、音频、点云、时序数据给处理成C x H x W的embedding map,正如我们将图像表示成3 x H x W的张量一样。例如:

  • 把音频的频谱图(T x F)看成是一幅单通道图像,即C=1, H=T, W=F;
  • 将点云进行三视图投影,得到三幅单通道图像,所以C=3, H和W可以随意指定;
  • 将视频中的各帧拼接到一起,极为简单地得到一张大图(例如,16帧的3 x 224 x 224视频拼接得到3 x 896 x 896的输入);
  • 对时序数据,我们借鉴CorrFormer [3]中的embedding layer将数据转换为隐空间中的张量然后就极为粗暴地直接将其reshape成一幅单通道图像的格式。

实验部分详见论文

反思

  • 打破常规认知,这点很重要
  • CNN 并不一定比Transformer差,只不过现在GPT式模型风向
  • 将其他模态任务数据强行转成CNN 所需要的map格式,是否真的好?术业有专攻这点可能还是对的。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-28 05:04:06       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-28 05:04:06       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-28 05:04:06       82 阅读
  4. Python语言-面向对象

    2024-03-28 05:04:06       91 阅读

热门阅读

  1. 【无标题】

    2024-03-28 05:04:06       42 阅读
  2. 内核态转发平面的SSL加速

    2024-03-28 05:04:06       42 阅读
  3. Spring_MVC

    2024-03-28 05:04:06       40 阅读
  4. BaseDao封装增删改查(超详解!)

    2024-03-28 05:04:06       44 阅读
  5. docker初识

    2024-03-28 05:04:06       47 阅读
  6. RoCE v2中UDP的源端口和目的端口

    2024-03-28 05:04:06       44 阅读
  7. 【QT】QT的事件机制及其与信号机制的区别

    2024-03-28 05:04:06       34 阅读
  8. uniapp 返回上一页再进入当前页mounted不执行

    2024-03-28 05:04:06       46 阅读
  9. TCP/IP:互联网通信的核心协议

    2024-03-28 05:04:06       41 阅读
  10. 老项目接入kafka消费信息另一种方式

    2024-03-28 05:04:06       38 阅读
  11. 记录一次ubuntu网络传输大文件时出现断网现象

    2024-03-28 05:04:06       45 阅读