热门标签 | 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

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



推荐阅读
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 每日一书丨AI圣经《深度学习》作者斩获2018年图灵奖
    2019年3月27日——ACM宣布,深度学习之父YoshuaBengio,YannLeCun,以及GeoffreyHinton获得了2018年的图灵奖, ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 从2019年AI顶级会议最佳论文,探索深度学习的理论根基与前沿进展 ... [详细]
  • 视觉图像的生成机制与英文术语解析
    近期,Google Brain、牛津大学和清华大学等多家研究机构相继发布了关于多层感知机(MLP)在视觉图像分类中的应用成果。这些研究深入探讨了MLP在视觉任务中的工作机制,并解析了相关技术术语,为理解视觉图像生成提供了新的视角和方法。 ... [详细]
  • 「爆干7天7夜」入门AI人工智能学习路线一条龙,真的不能再透彻了
    前言应广大粉丝要求,今天迪迦来和大家讲解一下如何去入门人工智能,也算是迪迦对自己学习人工智能这么多年的一个总结吧,本条学习路线并不会那么 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 非计算机专业的朋友如何拿下多个Offer
    大家好,我是归辰。秋招结束后,我已顺利入职,并应公子龙的邀请,分享一些秋招面试的心得体会,希望能帮助到学弟学妹们,让他们在未来的面试中更加顺利。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 2019年斯坦福大学CS224n课程笔记:深度学习在自然语言处理中的应用——Word2Vec与GloVe模型解析
    本文详细解析了2019年斯坦福大学CS224n课程中关于深度学习在自然语言处理(NLP)领域的应用,重点探讨了Word2Vec和GloVe两种词嵌入模型的原理与实现方法。通过具体案例分析,深入阐述了这两种模型在提升NLP任务性能方面的优势与应用场景。 ... [详细]
  • 表面缺陷检测数据集综述及GitHub开源项目推荐
    本文综述了表面缺陷检测领域的数据集,并推荐了多个GitHub上的开源项目。通过对现有文献和数据集的系统整理,为研究人员提供了全面的资源参考,有助于推动该领域的发展和技术进步。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • TensorFlow入门上
    前置准备在阅读本文之前,请确定你已经了解了神经网络的基本结构以及前向传播、后向传播的基本原理,如果尚未了解,可以查看下文。神经网络初探​chrer.com也可以直接在我博客阅读Te ... [详细]
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社区 版权所有