热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Transformer在CV领域有可能替代CNN吗?还有哪些应用前景?

来源丨知乎问答编辑丨极市平台本文转自知乎问答,所有回答均已获得作者授权。问题背景:目前已经有基于Transformer在三大图像问题上的应用࿱

来源丨知乎问答

编辑丨极市平台

本文转自知乎问答,所有回答均已获得作者授权。

问题背景:目前已经有基于Transformer在三大图像问题上的应用:分类(ViT),检测(DETR)和分割(SETR),并且都取得了不错的效果。那么未来,Transformer有可能替换CNN吗,Transformer会不会如同在NLP领域的应用一样革新CV领域?后面的研究思路可能会有哪些?

01

作者:湃森

回答这个问题,笔者认为可以从方法提出的动机来剖析比较合适,即为什么我们需要它;而不是简单的“存在即合理”,大家皆用我也用的风向标。

Why CNN?

首先我们应该了解为什么CNN会在图像领域被大规模应用,我们可以从三个主要点说起,比如基于传统的方法,基于模式识别的方法,基于深度学习的方法。

1. 传统方法在视觉任务上的应用绝大多数都依赖于在某个领域具有丰富经验的专家,去针对具体的任务设计出一组最具有代表性的数据表示来作为输入特征进行处理,使得特征之间具备可区分性,典型的有SIFT。其次,一些特征提取的方法也需要人为的参与,手工设计出一些特征提取算子,比如一些经典的边缘检测算子,水平检测,垂直检测等。然而,一方面需要依赖专家手动设计特征的方式所需要的先验知识多,模型的的性能也极其依赖于其所设计出来的数据表示,这样一来不仅费时费力,而且也很难针对实际场景中复杂多变的任务去设计出一种合适的算子,不具备泛化性。另一方面,受制于数据采集的环境,设备等影响,比如光照,拍摄视角,遮挡,阴影,背景等等,这些因素会严重制约模型的性能,即手工设计的特征并不具备鲁棒性。

2. 基于模式识别的方法大多数是一些与机器学习相关的技术,比如随机森林,支持向量机,感知机等。机器学习较传统方法的一个显著优势就是,可以避免人为进行纯手动设计特征,它能够学习出一组从输入的数据表示到输出的映射这一套规则。比如AutoEncoder便能够从一组输入中学习出另一组数据的表示,虽然生成的结果基本是模糊的。尽管这些方法具有以上的优势,但是如何学习高效的学习出一组更合适的映射规则是关键。对于高效性来说,以感知机为例,它利用多个MLP来进行特征的学习从而来表征输入数据。但是这样有很明显的缺陷,一方面计算量是非常庞大的,另一方面直接将输入flatten为一个列向量,会破坏图像中目标原有的结构和上下文联系。在此基础上,我们可以继续优化它,把它推广到更一般的表示——CNN,MLP其实是CNN的一种特例。

3. 基于深度学习的方法在图像识别领域最典型的应用便是CNN。CNN是一种分层(hierarchical)的数据表示方式,高层的特征表示依赖于底层的特征表示,由浅入深逐步抽象地提取更具备高级语义信息的特征。比如第一层更倾向于提取边缘,角点,线条等low-level的特征,第二层提取颜色,纹理等mid-level的特征,第三层提取更具抽象语义的high-level的特征。网络的深度有助于模型提取更抽象地高级特征,网络的宽度有利于模型提取更丰富的特征表示。这种连接主义 (connectionism)本质上是一种解决问题很好的思路,每一层都学习各自简单的表示,但最后通过连接起来,却形成了强大的(powerful)的特征表征能力!

此外,CNN还具有一个非常重要的特性,它是通过共享卷积核来提取特征,这样一方面可以极大的降低参数量来避免更多冗余的计算从而提高网络模型计算的效率,另一方面又结合结合卷积和池化使网络具备一定的平移不变性(shift-invariant)和平移等变性(equivariance)。当然,对于分类任务来说,我们是希望网络具备平移不变性的特点,而对于分割任务来说我们则更希望其具备平移等变性,不过这些都是后话,在这里不展开阐述。因此,这便是CNN如何学习高效的学习出一组更合适的映射规则的关键。

虽然CNN具备如此多的优点,但不是一开始就一蹴而就,也并不是完美无瑕的。以图像分割为例,在全卷积神经网络FCN提出以前,大多数基于CNN的方法都是基于Patch-wise即将图像块作为输入输入到CNN中去进行相应类别预测,这种方式一来计算非常冗余,二来也缺乏充足的上下文信息。所以为什么FCN会这么有影响力,甚至可以称为是一个mile-stone的网络,就在于它真正意义上将patch-wise做到了pixel-wise,这对于语义分割这种密集型任务来说是至关重要的。

当然,FCN也存在许多的缺点,诸如分割结果粗糙等,当这并不妨碍我们基于它的思想去进行很多的拓展。比如最近几年提出的很多分割论文都是针对它去进行改进,有人提倡改善编码器利用更强大的卷积模块去提取更具备代表性的特征,有人热衷于改善解码器,比如引入跳跃连接操作来弥补编码器下采样过程中空间细节信息的丢失从而来实现更精准的定位,关于如何跳跃又是一个问题,有直接连线的Unet,继而有人又借助语义鸿沟(semantic gap)或者背景噪声干扰这些口去突破,利用多个卷积去消除,结合高级特征的强语义和低级特征丰富的细节信息去指导融合的也有,另外还有借助注意力方式去消除歧义和抑制背景噪声的也大有人在。除了编解码器之外,我们借用特征金字塔的思想还可以结合多层的结果去融合输出,得到一个更加细化的特征表示。在抛掉模型本身,也可以从任务本身下手,从全监督到半监督,自监督,few-shot learning,ome-shot learning,甚至是无监督域等等也有很多方向可以突破。其他视觉任务如分类,检测或者low-level的任务如超分,去噪等也可以此类比,很多人写不来论文或者解决不了问题的关键点在于根本没发现问题在哪里,又何谈解决问题。

Why transformer?

目前为止,我们已经简要的总结了CNN为什么会被提出以及它的优势在哪。尽管CNN存在以上优势,比如它利用卷积核或滤波器不断地提取抽象地高级特征,理论上来说其感受野应该能覆盖到全图,但许多研究表明其实际感受野远小于理论感受野,这不利于我们充分的利用上下文信息进行特征的捕获,虽然我们可以通过不断的堆叠更深的卷积层,但这显然会造成模型过于臃肿计算量急剧增加,违背了初衷。而transformer的优势就在于利用注意力的方式来捕获全局的上下文信息从而对目标建立起远距离的依赖,从而提取出更强有力的特征。

因此,我们并不需要说一味的抛弃CNN,或许可以转换下思路把两者结合起来,将transformer当做是一种特征提取器利用起来,再结合CNN的一些优势去解决现有的问题。对于接下来这个方向的思考,笔者推测当过了这把trasformer的新鲜劲,即在各个任务上都利用transformer替代一遍后,未来的工作更多的是结合这两者,来实现一个更优或者说是一个更reasonable的结果,让我们拭目以待。

总的来说,每一种技术的提出,都会受到当时所处环境或多或少的影响,然后通过不断地发现问题,提出问题,再到解决问题这样一步步不停地迭代。从宏观角度上来看,一个学科技术要发展的更快更好,其中的一个很重要原因便是具备普适性。个人认为这一点非常重要,普适性意味着入门门槛低,这样涌入这个圈子的人就多,形成的“泡沫”就大,资本才会为其买单,真正意义上潜心研究的专家才能更被凸显出来,才能有更充足的经费和动力去研究,去突破现有的技术将知识的边界不断的拓宽,利用科技造福人类。当然,这里面必定夹杂着许多鱼龙混杂的人或物,但是只要宏观方向把握得当,制度制定得比较完善,就能够避免“泡沫”的幻灭,整体维持一个健康向上的发展。毕竟,任何事物都具备两面性,发展是一把双刃剑。唯有寄希望于巨头公司和机构有更大的担当,当好这个时代的领头羊和风向标,在制度的笼子下引领着这个时代朝着健康向上的道路去发展,而不是诸如一窝蜂的跑到菜市场去搞“社区团购”之类的割韭菜活动,而是应该做到真正意义上的“科技向善”。

02

作者:齐国君

CNN和transformer在处理视觉信息上各有优缺点。

CNN网络在提取底层特征和视觉结构方面有比较大的优势。这些底层特征构成了在patch level 上的关键点、线和一些基本的图像结构。这些底层特征具有明显的几何特性,往往关注诸如平移、旋转等变换下的一致性或者说是共变性。比如,一个CNN卷积滤波器检测得到的关键点、物体的边界等构成视觉要素的基本单元在平移等空间变换下应该是同时变换(共变性)的。CNN网络在处理这类共变性时是很自然的选择。

但当我们检测得到这些基本视觉要素后,高层的视觉语义信息往往更关注这些要素之间如何关联在一起进而构成一个物体,以及物体与物体之间的空间位置关系如何构成一个场景,这些是我们更加关心的。目前来看,transformer在处理这些要素之间的关系上更自然也更有效。

从这两方面的角度来看,将CNN在处理底层视觉上的优势和transformer在处理视觉要素和物体之间关系上的优势相结合,应该是一个非常有希望的方向。

03

作者:小小将

先简单来看一下transformer在分类,检测和分割上的应用:

(1)分类 ViT: An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale

把图像分成固定大小的patchs,把patchs看成words送入transformer的encoder,中间没有任何卷积操作,增加一个class token来预测分类类别。

(2)检测 DETR:End-to-End Object Detection with Transformers

先用CNN提取特征,然后把最后特征图的每个点看成word,这样特征图就变成了a sequence words,而检测的输出恰好是a set objects,所以transformer正好适合这个任务。

(3)分割 SETR:Rethinking Semantic Segmentation from a Sequence-to-Sequence Perspective with Transformers

用ViT作为的图像的encoder,然后加一个CNN的decoder来完成语义图的预测。

当然,目前基于transformer的模型在分类,检测和分割上的应用绝不止上面这些,但基本都是差不多的思路。比如ViT-FRCNN:Toward Transformer-Based Object Detection这个工作是把ViT和RCNN模型结合在一起来实现检测的。

关于transformer更多在CV上的工作,可以看最新的一篇综述文章:A Survey on Visual Transformer

这里来谈一下自己几点粗鄙的认识:

(1)CNN是通过不断地堆积卷积层来完成对图像从局部信息到全局信息的提取,不断堆积的卷积层慢慢地扩大了感受野直至覆盖整个图像;但是transformer并不假定从局部信息开始,而且一开始就可以拿到全局信息,学习难度更大一些,但transformer学习长依赖的能力更强,另外从ViT的分析来看,前面的layers的“感受野”(论文里是mean attention distance)虽然迥异但总体较小,后面的layers的“感受野“越来越大,这说明ViT也是学习到了和CNN相同的范式。

(2)CNN对图像问题有天然的inductive bias,如平移不变性等等,以及CNN的仿生学特性,这让CNN在图像问题上更容易;相比之下,transformer没有这个优势,那么学习的难度很大,往往需要更大的数据集(ViT)或者更强的数据增强(DeiT)来达到较好的训练效果。好在transformer的迁移效果更好,大的数据集上的pretrain模型可以很好地迁移到小数据集上。还有一个就是ViT所说的,transformer的scaling能力很强,那么进一步提升参数量或许会带来更好的效果(就像惊艳的GPT模型)。

(3)目前我们还看到很大一部分工作还是把transformer和现有的CNN工作结合在一起,如ViT其实也是有Hybrid Architecture(将ResNet提出的特征图送入ViT)。而对于检测和分割这类问题,CNN方法已经很成熟,难以一下子用transformer替换掉,目前的工作都是CNN和transformer的混合体,这其中有速度和效果的双重考虑。另外也要考虑到如果输入较大分辨率的图像,transformer的计算量会很大,所以ViT的输入并不是pixel,而是小patch,对于DETR它的transformer encoder的输入是1/32特征这都有计算量的考虑,不过这肯定有效果的影响,所以才有后面改进工作deform DETR。短期来看,CNN和transformer应该还会携手同行。最新的论文Rethinking Transformer-based Set Prediction for Object Detection,还是把现有的CNN检测模型和transformer思想结合在一起实现了比DETR更好的效果(训练收敛速度也更快):

(4)这我想到了神经网络的本质:一个复杂的非线性系统来拟合你的问题。无论是CNN,RNN或者transformer都是对问题一种拟合罢了,也没有孰优孰劣。就一个受限的问题来看,可能有个高低之分,但我相信随着数据量的增加,问题的效果可能最终取决于模型的计算量和参数,而不是模型是哪个,因为之前的工作已经证明:一个三层神经网络可以逼近任何一个非线性函数,前提是参数足够大,而且更重要的是你找到一个好的训练方法。

未来虽然很难说,但依然可期!

原文链接:

【1】https://www.zhihu.com/question/437495132/answer/1656908750

【2】https://www.zhihu.com/question/437495132/answer/1658559732

【3】https://www.zhihu.com/question/437495132/answer/1656610825

觉得有用麻烦给个在看啦~  



推荐阅读
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 背景应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入、跨站等攻击仍然占据着较前的位置。WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在 ... [详细]
  • 干货 | 携程AI推理性能的自动化优化实践
    作者简介携程度假AI研发团队致力于为携程旅游事业部提供丰富的AI技术产品,其中性能优化组为AI模型提供全方位的优化方案,提升推理性能降低成本࿰ ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • bat大牛带你深度剖析android 十大开源框架_请收好!5大领域,21个必知的机器学习开源工具...
    全文共3744字,预计学习时长7分钟本文将介绍21个你可能没使用过的机器学习开源工具。每个开源工具都为数据科学家处理数据库提供了不同角度。本文将重点介绍五种机器学习的 ... [详细]
  • 【BERT】BERT的嵌入层是如何实现的?看完你就明白了
    作者:__编译:ronghuaiyang导读非常简单直白的语言解释了BERT中的嵌入层的组成以及实现的方式。介绍在本文中,我将解释BERT ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • TensorFlow入门上
    前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te ... [详细]
  • 鄂维南:从数学角度,理解机器学习的「黑魔法」,并应用于更广泛的科学问题...
    作者|Hertz来源|科学智能AISI北京时间2022年7月8日晚上22:30,鄂维南院士在2022年的国际数学家大会上作一小时大会报告(plenarytalk)。今 ... [详细]
  • 分享篇:第十届“泰迪杯”数据挖掘挑战赛农田害虫图像识别(特等奖)一
    1.1赛题背景昆虫的种类浩如烟海,农田常见的昆虫是人工生态系统的重要组成部分。分辨益虫和害虫,保留益虫,消灭害虫,对于减轻害 ... [详细]
  • 基于深度学习的遥感应用
    文章目录深度学习的发展过程深度学习在遥感中的应用基于深度学习的遥感样例库建设基于深度学习的遥感影像目标及场景检索基于深度学习的建筑物提取基于深度学习的密集建筑物自动检测基于深度学习 ... [详细]
  • 点击上方,选择星标或置顶,每天给你送干货!阅读大概需要4分钟跟随小博主,每天进步一丢丢来自:NLP太难了公众号 ... [详细]
  • 开源真香 离线识别率高 Python 人脸识别系统
    本文主要介绍关于python,人工智能,计算机视觉的知识点,对【开源真香离线识别率高Python人脸识别系统】和【】有兴趣的朋友可以看下由【000X000】投稿的技术文章,希望该技术和经验能帮到 ... [详细]
author-avatar
何zzz小宝
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有