CV界,卷积神经网络真的干不过Transformer了吗?

一、 CNN及其优势和局限性

其他答主回答的角度和内容非常全面,答主也从自己的角度谈谈这个问题。我们不妨先看一下CNN的结构。CNN依靠卷积拥有感受野,具有了时移不变性。
在这里插入图片描述

1.1 CNN的局限性

可以看到随着卷积层的增加,feature maps上的一个像素点就包含更多的信息。这种感受野的增长依靠于卷积核大小和层数,因此,如果卷积核不算很大,层级不够多,那么其在处理有长距离依赖上的图像效果可能并不好。同样,如果最后不处理到只剩一个像素,那么feature maps上的任何一个像素点都不能处理全局信息。这就是CNN体系上的一个局限性。

1.2 CNN的优势

尽管CNN有着其局限性,但很显然,这个局限性在某些情况下就会转为其优势。CNN的全局信息处理能力不足,但其局部特征提取能力非常强大,这种局部特征提取的能力在处理图像中的细节和纹理等局部特征上更为有效。
同时,卷积操作有助于减小参数量,因为卷积核的参数被共享,意味着同一个卷积核可以在整个输入图像的不同位置上进行特征提取。这种参数共享减少了网络的参数量,降低了过拟合的风险,并且使得模型更具有泛化能力。相比于全连接和transformer,参数量是明显减小的。

人类对外界的认知一般是从局部到全局、从片面到全面,类似的,在机器识别图像时也没有必要把整张图像按像素全部都连接到神经网络中,在图像中也是局部周边的像素联系比较紧密,而距离较远的像素则相关性较弱,因此可以采用局部连接的模式(将图像分块连接,这样能大大减少模型的参数),如下图所示:
在这里插入图片描述

标题二、 Transformer及其优势和局限性

Transformer本来是NLP领域的革命性模型,随着其在多个benchmark上达到sota的效果,首先是NLP领域刮起了Transformer结构的旋风。随后Transformer开始打破壁垒,进入CV领域。
我们先看ViT的结构图:
在这里插入图片描述
ViT方法实现细节

如上图所示,整个模型我们可以将其分为4个部分,假设输入图像选择为256x256x3;

  1. Linear Projection of Flattened Patches(将CV任务图片转换为与NLP任务类似的序列Patches)
  2. Extra Learnable[class] Embedding And Position Embedding
  3. Transformer Encoder MLP Head部分结构

我们可以看到,图像被处理成了多个patch,而这些patch经过映射之后再被送入到Multi-Head Attention的结构里面,我们再看Multi-Head Attention的结构:
在这里插入图片描述

2.1 Transformer的局限性

很明显,本来一个a,要经过三个矩阵的处理,变成q, k, v,参数量明显上涨。然后两两计算qkv,这无疑带来了巨大的计算量。这就引出了Transformer在参数量和计算量上的局限性,需要比较多的计算资源,这也是为什么会出现“Money is All you need”的这么一个讽刺文章了。如果图片比较大,CNN也许能轻松处理,但是Transformer就不一定了,所以才引出了后面的Swin Transformer,但是始终还会有高于CNN的计算量。因此,Transformer想要处理高分辨率的图像也还是比较有难度的。由于参数量的增多,这对数据量提出了比较高的要求,在数据较少的情况下可能并不奏效。

2.2 Transformer的优势

和CNN一样,Transformer的局限性也可以转换成其优势,就是能够有全局信息和处理长距离依赖的能力,并且在足够的数据和计算资源下,可以达到非常出色的效果,这个在各种论文的结果上都可以得到验证。

Transformer的优势在NLP领域更是体现的淋漓尽致,也带来了预训练模型的潮流。而继承于Transformer Decoder的GPT,在自回归生成上又做到了让人眼前一亮的效果,而后GPT又经过强化学习,微调等技巧,诞生出了现在的大模型,现在已经进化到多模态的版本,能用图像交互了,目前尚不知道自回归会不会在CV领域闯出来,大家可以多多关注CV领域未来的发展方向。

三、 CNN和Transformer的互补

实际上,CNN和Transformer并不是水火不容的关系,想起来本科操作系统和编译原理老师都说过的一句话:没有过时的技术,只是看什么样的应用场景,某些场景下,老技术也能焕发光彩。像另一位答主所说的,先用CNN提取特征,再用Transformer做后处理是比较合理的做法。先利用CNN的局部特征提取能力和参数共享特性,将一些图像先进行一个提取,降低像素量,再用Transformer的高级抽象特征处理能力,计算全局信息,再利用全局信息去做特定的任务,这是一个较为可行的方案。
也有不少论文是将Transformer和CNN融合使用的。比如TransUNet:

在这里插入图片描述
就是用上了这种思路,对医学图像进行分割,达到了不错的效果。
还有一种思路是不管什么尺度,都用CNN+Transformer处理,例如发表在MICCAI(CCF B)的UTNet:
在这里插入图片描述
在Encoder部分除了第一层,其他层都用卷积再加Transformer的方式进行处理。

因此,哪怕在学术界,也不能说Transformer可以完全取代CNN,完全不需要用二极管思维去看待任何一项技术。在工业界就更不用说了,像各位大佬所说的,Transformer在落地上有着比较大的困难,总不能要求所有设备都搭载着高性能的GPU进行计算。

总结

上述一系列的分享,相信大家也会有了自己的看法,在这里答主再重复一下自己的结论,其实也就是没有免费的午餐原理,没有一个技术或者算法可以通用地解决所有问题,当其在一个任务上表现得好的时候,通常在另一个任务也许会不尽人意。粗暴地想用谁取代谁,都不是一个合理的思想,归根结底还是要对不同技术进行分析和理解,取长补短,相得益彰,这也是一系列论文给我们证明的结论。希望大家如果觉得答主分

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/809798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3.00 版本来了!DolphinDB V2.00.12 V3.00.0 正式发布!

一文带你了解 DolphinDB 全新版本升级! 本次更新后,3.00.0版本将成为 DolphinDB 的最新版,2.00.12版本变更为稳定版,此前发布的1.30.23版本将成为1.30系列的最后一个版本。接下来,带大家一起看看 DolphinDB V2.00.12 …

【Linux系统编程】第一弹---背景介绍

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、Linux 背景介绍 1.1、发展史 1.1.1、UNIX发展的历史 1.1.2、Linux发展历史 2、开源精神 3、Linux内核官网 4、企业应用…

svg等比例缩放且不变形,需要用到viewBox

svg等比例缩放且不变形&#xff0c;需要用到viewBox <svg xmlns"http://www.w3.org/2000/svg" version"1.1" width"600" viewBox"0 0 600 500"> </svg> 这里我的画布宽度是 width"600" 而 viewBox"0 0 …

windows下安装yolov8环境(详细图文教程)

目录 一&#xff1a;前言 二&#xff1a;安装yolov8 一&#xff1a;前言 最近看了 YOLO 的发展史&#xff0c;发现在机器视觉领域的应用非常广泛&#xff0c;f刚好最近一直在做机器视觉的工作&#xff0c;特此记录下搭建yolov的环境。我们使用的版本是yolov8的就用这个作为演…

带计步跑步功能,余额宝、早起打卡与积分商城金融众筹一体化平台

检测自动增加步数 Bug问题: 无 测试环境: PHP5.6Mysql5.6 源码简介: 袋鼠投资理财&#xff0c;本程序有技步跑步功能&#xff0c;余额宝功能&#xff0c;早起打卡&#xff0c;积分商城&#xff0c;抽奖功能等各方面为一体的综合理财项目。 功能列表: 袋鼠投资理财&#xf…

蚓链使得产业间资源共享变得更为简单高效

数字化营销平台在促进产业间资源共享方面确实发挥着至关重要的作用&#xff0c;看蚓链数字化营销平台是如何使得资源共享变得更为简单和高效的&#xff01; 蚓链数字化营销平台通过提供统一的信息发布和获取渠道&#xff0c;降低了产业间信息共享的门槛。企业可以轻松地在平台…

实体抽取全解析:技术与实战

目录 一、前言二、实体抽取技术概览基于规则的实体抽取基于统计的实体抽取基于深度学习的实体抽取 三、实体抽取的发展历程早期的实体抽取方法基于规则和词典的方法基于特征的机器学习方法 深度学习时代的实体抽取从传统模型到神经网络序列标注模型的兴起预训练语言模型的革命 …

2.c++常见的特色语法情况

1.const数据类型和constexpr的运用 const定义的值不能被改变&#xff0c;在整个作用域中都保持固定&#xff0c;当然&#xff0c;可以通过函数以形参的形式输入函数。代码如下&#xff1a; #include <iostream> using namespace std;constexpr int fibonacci(const int …

MySQL调优时需要注意的问题

MySQL调优是一个复杂且细致的过程&#xff0c;涉及到数据库设计、查询优化、系统配置、硬件资源等多个方面。 在进行MySQL调优时&#xff0c;需要注意以下问题及示例&#xff1a; 查询优化&#xff1a; 避免全表扫描&#xff1a; 示例&#xff1a;一个查询语句没有有效利用索引…

C#互联网区域医学检验中心云LIS系统源码

云LIS联通四级&#xff08;市、县、乡、村&#xff09;检验服务网构建互联网检验服务新体系落地检验资源区域共享建设。云LIS系统是一种基于云计算技术的区域实验室信息管理系统&#xff0c;它的主要功能是管理实验室中的各种信息数据&#xff0c;包括样品数据、检测结果、仪器…

Linux使用命令发送get或post请求

在linux服务器直接发送get或者post请求可以使用curl命令和wget命令。 curl命令&#xff1a; curl http://localhost:8080/应用/接口号 输入此命令之后会直接将响应结果展示到服务器上&#xff0c;如&#xff1a; 输入命令&#xff1a;curl -i curl -i http://localhost:…

认识JAVA语言(二)扩充

知识点1: 一维数组 一维数组是Java中最基础的数据结构。它可以存储一组固定数量的同类型元素&#xff0c;并且这些元素在内存中是连续存放的。 声明: 声明一个数组非常简单。你只需要指定数据类型与数组名称并用方括号包裹起来。声明仅仅创建了一个数组变量&#xff0c;而不是…

[C++/Linux] 网络I/O处理

引言&#xff1a;网络数据能够正常到达用户并且被接收是进行网络传输的根本目的&#xff0c;网络传输的数据发送和接收有多种方案&#xff0c;本文章就对通过向量接收和发送等数据传输方式&#xff0c;并且对多种I/O模型进详细分析介绍。 目录 一.I/O函数 1.1 recv和send rec…

RabbitMQ消息模型之Fanout消息模型

Fanout消息模型 * 广播模型&#xff1a;* 一个交换机绑定多个队列* 每个队列都有一个消费者* 每个消费者消费自己队列中的消息&#xff0c;每个队列的信息是一样的生产者 package com.example.demo02.mq.fanout;import com.example.demo02.mq.util.ConnectionUtils; impor…

神策sdk埋点

一&#xff0c;提出数据需求 首先要把数据需求提出来&#xff0c;先落地成一个标准的文档。数据需求是由业务或者产品去做&#xff0c;然后设计数据采集方案是基于我们的数据需求&#xff0c;首先要满足数据需求&#xff0c;其次在数据在设计完成之后要进行评审。/基于需求设计…

【docker】linux删除大于特定时间的备份文件

目录 shell 删除脚本命令解析 环境&#xff1a;linux容器&#xff1a;docker 前提&#xff1a; 继上次讲述如何备份线上数据库之后&#xff0c;我们来看如何删除多余的dump备份文件 参考&#xff1a;linux写shell脚本备份线上数据库&#xff08;备份为dump文件&#xff09; …

JavaScript之Object.defineProperty详解

Object.defineProperty 是 JavaScript 中用于定义或修改对象属性的方法之一。它允许我们精确地控制对象属性的特性&#xff0c;包括可枚举性、可写性、可配置性等。 1. 基本语法 Object.defineProperty(object, propertyName, descriptor); object&#xff1a;要在其上定义属性…

【PyQt5】环境配置

PyQt5 环境配置 一、前言1.1 PyQt5介绍1.2 PyCharm集成Pyqt5 二、pyqt5安装三、PyQt5-tools工具包安装四、常用工具环境配置4.1、环境变量配置4。2、验证是否安装成功 五、pycharm中设置Qt工具&#xff08;Qt Designer、PyUIC、PyRcc&#xff09;5.1、配置Qt Designer5.2、配置…

gitee上传出现git did not exit cleanly (exit code 1)的错误

在最后push的时候出现下面的结果&#xff1a; 出现这个错误的原因有好多种&#xff0c;目前介绍博主遇到的两种&#xff1a; 在第一次进行push操作的时候&#xff0c;需要输入用户名和密码&#xff0c;如果输入错误&#xff0c;则最后可能会出现上述报错 解决方法&#xff1a;…

centos7安装 on-my-zsh

如下&#x1f447; yum install -y zsh chsh -s /bin/zsh yum install -y git sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)" 重启即可生效啦~