2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读

2023-11-03 18:30

本文主要是介绍2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


title: 2022_07_11_10_51x51的超大kernelsize真的管用吗:SLaK论文解读
date: 2022-07-11 22:33:33
category: 默认分类

本文介绍 2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读

2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读

This article was original written by Jin Tian, welcome re-post, first come with https://jinfagang.github.io . but please keep this copyright info, thanks, any question could be asked via wechat: jintianiloveu

今天有一篇论文很有意思,也就是SLaK,直接把卷积的kernelsize加大到了51x51。你要说之前超越transformer的纯卷积模型ConvNext是把7x7再一次带入了人们的视野,让我们有了一种返璞归真的感觉,那么前段时间旷世的RepLKNet,让人们再一次刷新了认知,直接31x31的卷积也能work的很好,甚至超越了Swin-Transformer等结构。而今天,SLaK再次刷新了我们的认知,好家伙,人家直接把卷积kernel 搞到了51x51. 那我这图片丢进去卷积几次就没了啊。。所以我看到这篇论文的时候就很好奇,他到底是怎么做的。

我们主要有几个疑问,抛砖引玉,一起来思考思考,本人纯属菜鸡观点:

  • 为什么大卷积也能work?
  • 是什么动力让大家在探索大卷积?是更高效?是要探索出了transformer之外的更原始的路?
  • 他有没有什么应用缺点。

SLaK对比Convnext

首先说一下ConvNext,笔者最近也在检测算法中尝试了ConvNext,结论是效果非常不错,简单的convnext-tiny就可以轻松超越resnet50,基于YOLO的检测架构(类似于YOLOX的AnchorFree结构),可以在tiny上做到44左右,这还是没有加augmentation,并且warmup等参数没有细调的情况下,训练尺寸也没有像convnext官方paper训练maskrcnn一样加到1024这么大。

尽管如此,如果你自己去训convnext + YOLO是肯定会训崩的,为什么?因为非常难训,训练及其不稳定,你需要用训transformer的那一套去训这种组合的检测才能得到一个稍微稳定的结果,需要有足够的耐心外加一点点运气,而且收敛速度非常非常慢。这就引入了大卷积的一个思考:类似于SLaK这样的超大卷积核结构,是怎么确保训练稳定的? 我可以很明确的告诉你,没有一些手段,这种大卷积的结构是不太可能收敛的

上图可以很直观的看到Slak里面使用的的大卷积核的结构实现。SLak并没有直接暴力的简单吧RepLKNet的31x31卷积核增加到61x61,而是进行了上面结构的更改,基于两个观察:

  • 第一个是直接暴力加到51x51,就会导致精度下降,说明此路不通;
  • 改为分拆成两个小卷积核组合,可以解决这个问题;
  • 最后加上Sparsity,可以大大提高精度,也就是 用更多的组卷积,加宽宽度

最后就有了:

可以看到,精度超越了Convnext-Tiny,参数量差不多,但是flops增加了(比了个寂寞)。

最后在检测上的精度如上图,检测上提高了一个点,但是没有对比coco的结构,不知道是不是不敢放,还是没做这个实验,其实对比一下mAP-Large可能更有意思。

动机

为什么大家现在开始探索大卷积结构的可行性?我认为主要原因有3个:

  • transformer结构正在不断的超越Convnet-based模型,可以说,出来一个吊打一个,因此convnets应该予以还击了;
  • 一直以来我们都是用的小卷积,smaller convs, deeper networks,探索大卷积核下可行性是必然的;
  • 最后就是SLak作者在一个talk中提到的:

小卷积的设计一直以来是跟随者硬件水平来的,以前算量不足的时候,我们尽可能的减少kernelsize,现在在一些根本不缺算力的场合下,是否有可能大力出奇迹呢?
小卷积的设计虽然可以让模型参数更少,但flops其实不一定低,这些传统的设计也是有一些代价的:例如,在GPU下太小的卷积就无法做到更高效,另外,小卷积也会让模型缺乏全局视野能力,这也就是为什么目标检测有时候很难检测超大物体,或者无法根据全局去推断一个物体的类别,而这个人类是可以做到的。

最后其实还有一个动机,我不知道各位有没有发现,反正我是发现了。也就是Transformer这一脉方法的缺点,这些缺点,如果不在实际场合下以非常高的要求去使用,你会觉得还可以忍受,但是一点要求高了,这些缺点就不容忽视,主要是:

  • 平方级的计算复杂度上升,随着输入的尺寸增大,如果你做自动驾驶,你用的是8k的resolution,那你应该可以感受到;
  • 参数很多,transformer的参数量(模型体积)通常比conv大很多,这是有结构决定的,那么多FNN,参数不多才怪;
  • 难以叠加太复杂的结构,难以像conv一样复用多层次的结构(例如FPN PAN等);

而这些,或许是大卷积核的Convnets才是出路。当然,就像我前面所说,要让他work,可能还是离不开transformer。

总结

大卷积核结构还是有点用,但我觉得更大的价值还是在于,怎么解决transformer结构带来的平方级计算复杂度上升问题。毫无疑问,未来会有更多transformer + conv结合的工作。这些结果,在充分利用GPU算力上还是大有用途。例如像Convnext这种结构,我个人认为就很优雅,集众家之长,补自家之短,非常英明的一个模型结构

这篇关于2022_07_11_10_51x51的kernelsize暴力美学:SLaK论文解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/340062

相关文章

SpringBoot全局异常拦截与自定义错误页面实现过程解读

《SpringBoot全局异常拦截与自定义错误页面实现过程解读》本文介绍了SpringBoot中全局异常拦截与自定义错误页面的实现方法,包括异常的分类、SpringBoot默认异常处理机制、全局异常拦... 目录一、引言二、Spring Boot异常处理基础2.1 异常的分类2.2 Spring Boot默

Mybatis对MySQL if 函数的不支持问题解读

《Mybatis对MySQLif函数的不支持问题解读》接手项目后,为了实现多租户功能,引入了Mybatis-plus,发现之前运行正常的SQL语句报错,原因是Mybatis不支持MySQL的if函... 目录MyBATis对mysql if 函数的不支持问题描述经过查询网上搜索资料找到原因解决方案总结Myb

Java序列化之serialVersionUID的用法解读

《Java序列化之serialVersionUID的用法解读》Java序列化之serialVersionUID:本文介绍了Java对象的序列化和反序列化过程,强调了serialVersionUID的作... 目录JavChina编程a序列化之serialVersionUID什么是序列化为什么要序列化serialV

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

MySQL之搜索引擎使用解读

《MySQL之搜索引擎使用解读》MySQL存储引擎是数据存储和管理的核心组件,不同引擎(如InnoDB、MyISAM)采用不同机制,InnoDB支持事务与行锁,适合高并发场景;MyISAM不支持事务,... 目录mysql的存储引擎是什么MySQL存储引擎的功能MySQL的存储引擎的分类查看存储引擎1.命令

Spring的基础事务注解@Transactional作用解读

《Spring的基础事务注解@Transactional作用解读》文章介绍了Spring框架中的事务管理,核心注解@Transactional用于声明事务,支持传播机制、隔离级别等配置,结合@Tran... 目录一、事务管理基础1.1 Spring事务的核心注解1.2 注解属性详解1.3 实现原理二、事务事

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

MySQL8.0临时表空间的使用及解读

《MySQL8.0临时表空间的使用及解读》MySQL8.0+引入会话级(temp_N.ibt)和全局(ibtmp1)InnoDB临时表空间,用于存储临时数据及事务日志,自动创建与回收,重启释放,管理高... 目录一、核心概念:为什么需要“临时表空间”?二、InnoDB 临时表空间的两种类型1. 会话级临时表

C语言自定义类型之联合和枚举解读

《C语言自定义类型之联合和枚举解读》联合体共享内存,大小由最大成员决定,遵循对齐规则;枚举类型列举可能值,提升可读性和类型安全性,两者在C语言中用于优化内存和程序效率... 目录一、联合体1.1 联合体类型的声明1.2 联合体的特点1.2.1 特点11.2.2 特点21.2.3 特点31.3 联合体的大小1

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(