求教一个问题,dk与cv在苹果开发者者角度的区别在哪

&img src=&/7dad113dde4de77ac363c_b.jpg& data-rawwidth=&568& data-rawheight=&154& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&/7dad113dde4de77ac363c_r.jpg&&深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏!&br&&br&&p&&b&前言&/b&&/p&&br&&img src=&/7dad113dde4de77ac363c_b.jpg& data-rawwidth=&568& data-rawheight=&154& class=&origin_image zh-lightbox-thumb& width=&568& data-original=&/7dad113dde4de77ac363c_r.jpg&&&p&开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了&b&什么物体&/b&?他们在&b&什么位置&/b&?这还不简单,图中有一个猫和一个人,具体的位置就是上图右侧图像两个边框(bounding-box)所在的位置。其实刚刚的这个过程就是目标检测,目标检测就是“给定一张图像或者视频帧,找出其中所有目标的位置,并给出每个目标的具体类别”。&/p&&p&目标检测对于人来说是再简单不过的任务,但是对于计算机来说,它看到的是一些值为0~255的数组,因而很难直接得到图像中有人或者猫这种高层语义概念,也不清楚目标出现在图像中哪个区域。图像中的目标可能出现在任何位置,目标的形态可能存在各种各样的变化,图像的背景千差万别……,这些因素导致目标检测并不是一个容易解决的任务。&/p&&p&得益于深度学习——主要是卷积神经网络(convolution neural network: CNN)和候选区域(region proposal)算法,从2014年开始,目标检测取得了巨大的突破。本文主要对基于深度学习的目标检测算法进行剖析和总结,文章分为四个部分:第一部分大体介绍下传统目标检测的流程,第二部分介绍以R-CNN为代表的结合region proposal和CNN分类的目标检测框架(R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN); 第三部分介绍以YOLO为代表的将目标检测转换为回归问题的目标检测框架(YOLO, SSD); 第四部分介绍一些可以提高目标检测性能的技巧和方法。&/p&&b&一. 传统目标检测方法&/b&&img src=&/6ac4ba27d1024477aaf4d0c_b.jpg& data-rawwidth=&456& data-rawheight=&77& class=&origin_image zh-lightbox-thumb& width=&456& data-original=&/6ac4ba27d1024477aaf4d0c_r.jpg&&&br&如上图所示,传统目标检测的方法一般分为三个阶段:首先在给定的图像上选择一些候选的区域,然后对这些区域提取特征,最后使用训练的分类器进行分类。下面我们对这三个阶段分别进行介绍。&p&&b&1) 区域选择&/b&&/p&&p&这一步是为了对目标的位置进行定位。由于目标可能出现在图像的任何位置,而且目标的大小、长宽比例也不确定,所以最初采用滑动窗口的策略对整幅图像进行遍历,而且需要设置不同的尺度,不同的长宽比。这种穷举的策略虽然包含了目标所有可能出现的位置,但是缺点也是显而易见的:时间复杂度太高,产生冗余窗口太多,这也严重影响后续特征提取和分类的速度和性能。(实际上由于受到时间复杂度的问题,滑动窗口的长宽比一般都是固定的设置几个,所以对于长宽比浮动较大的多类别目标检测,即便是滑动窗口遍历也不能得到很好的区域)&/p&&p&&b&2) 特征提取&/b&&/p&&p&由于目标的形态多样性,光照变化多样性,背景多样性等因素使得设计一个鲁棒的特征并不是那么容易。然而提取特征的好坏直接影响到分类的准确性。(这个阶段常用的特征有SIFT、HOG等)&/p&&p&&b&3) 分类器&/b&&/p&&p&
主要有SVM, Adaboost等。&/p&&p&&u&总结:传统目标检测存在的两个主要问题:一个是基于滑动窗口的区域选择策略没有针对性,时间复杂度高,窗口冗余;二是手工设计的特征对于多样性的变化并没有很好的鲁棒性。&/u&&/p&&b&二. 基于Region Proposal的深度学习目标检测算法&/b&&p&对于传统目标检测任务存在的两个主要问题,我们该如何解决呢?&/p&&p&对于滑动窗口存在的问题,region proposal提供了很好的解决方案。region proposal(候选区域)是预先找出图中目标可能出现的位置。但由于region proposal利用了图像中的纹理、边缘、颜色等信息,可以保证在选取较少窗口(几千个甚至几百个)的情况下保持较高的召回率。这大大降低了后续操作的时间复杂度,并且获取的候选窗口要比滑动窗口的质量更高(滑动窗口固定长宽比)。比较常用的region proposal算法有selective Search和edge Boxes,如果想具体了解region proposal可以看一下PAMI2015的“What makes for effective detection proposals?”&/p&&p&有了候选区域,剩下的工作实际就是对候选区域进行图像分类的工作(特征提取+分类)。对于图像分类,不得不提的是2012年ImageNet大规模视觉识别挑战赛(ILSVRC)上,机器学习泰斗Geoffrey Hinton教授带领学生Krizhevsky使用卷积神经网络将ILSVRC分类任务的Top-5 error降低到了15.3%,而使用传统方法的第二名top-5 error高达 26.2%。此后,卷积神经网络占据了图像分类任务的绝对统治地位,微软最新的ResNet和谷歌的Inception V4模型的top-5 error降到了4%以内多,这已经超越人在这个特定任务上的能力。所以目标检测得到候选区域后使用CNN对其进行图像分类是一个不错的选择。&/p&&p&2014年,RBG(Ross B. Girshick)大神使用&b&region proposal+CNN&/b&代替传统目标检测使用的滑动窗口+手工设计特征,设计了R-CNN框架,使得目标检测取得巨大突破,并开启了基于深度学习目标检测的热潮。&/p&&br&&b&1)&/b&&b&R-CNN (CVPR2014, TPAMI2015)&/b&&p&(Region-based Convolution Networks for Accurate Object detection and Segmentation)&/p&&img src=&/45f56dabe3ca7852f44bb_b.jpg& data-rawwidth=&655& data-rawheight=&225& class=&origin_image zh-lightbox-thumb& width=&655& data-original=&/45f56dabe3ca7852f44bb_r.jpg&&&br&上面的框架图清晰的给出了R-CNN的目标检测流程:&p&(1) 输入测试图像&/p&&p&(2)
利用selective search算法在图像中提取2000个左右的region proposal。&/p&&p&(3) 将每个region proposal缩放(warp)成227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征。&/p&&p&(4) 将每个region proposal提取到的CNN特征输入到SVM进行分类。&/p&&p&针对上面的框架给出几点解释:&/p&&p&* 上面的框架图是测试的流程图,要进行测试我们首先要训练好提取特征的CNN模型,以及用于分类的SVM:使用在ImageNet上预训练的模型(AlexNet/VGG16)进行微调得到用于特征提取的CNN模型,然后利用CNN模型对训练集提特征训练SVM。&/p&&p&* 对每个region proposal缩放到同一尺度是因为CNN全连接层输入需要保证维度固定。&/p&&p&* 上图少画了一个过程——对于SVM分好类的region proposal做边框回归(bounding-box regression),边框回归是对region proposal进行纠正的线性回归算法,为了让region proposal提取到的窗口跟目标真实窗口更吻合。因为region proposal提取到的窗口不可能跟人手工标记那么准,如果region proposal跟目标位置偏移较大,即便是分类正确了,但是由于IoU(region proposal与Ground Truth的窗口的交集比并集的比值)低于0.5,那么相当于目标还是没有检测到。&/p&&p&&u&小结:R-CNN在PASCAL VOC2007上的检测结果从DPM HSC的34.3%直接提升到了66%(mAP)。如此大的提升使我们看到了region proposal+CNN的巨大优势。&/u&&/p&&p&&u&但是R-CNN框架也存在着很多问题:&/u&&/p&&p&&u&(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练边框回归器&/u&&/p&&p&&u&(2) 训练耗时,占用磁盘空间大:5000张图像产生几百G的特征文件&/u&&/p&&p&&u&(3) 速度慢: 使用GPU, VGG16模型处理一张图像需要47s。&/u&&/p&&p&&u&针对速度慢的这个问题,SPP-NET给出了很好的解决方案。&/u&&/p&&b&2)SPP-NET (ECCV2014, TPAMI2015)&/b&&p&(Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition)&/p&&p&先看一下R-CNN为什么检测速度这么慢,一张图都需要47s!仔细看下R-CNN框架发现,对图像提完region proposal(2000个左右)之后将每个proposal当成一张图像进行后续处理(CNN提特征+SVM分类),实际上对一张图像进行了2000次提特征和分类的过程!&/p&&p&有没有方法提速呢?好像是有的,这2000个region proposal不都是图像的一部分吗,那么我们完全可以对图像提一次卷积层特征,然后只需要将region proposal在原图的位置映射到卷积层特征图上,这样对于一张图像我们只需要提一次卷积层特征,然后将每个region proposal的卷积层特征输入到全连接层做后续操作。(对于CNN来说,大部分运算都耗在卷积操作上,这样做可以节省大量时间)。现在的问题是每个region proposal的尺度不一样,直接这样输入全连接层肯定是不行的,因为全连接层输入必须是固定的长度。SPP-NET恰好可以解决这个问题:&img src=&/83e4105ddeefb64a4e43bbd662d451bc_b.jpg& data-rawwidth=&643& data-rawheight=&485& class=&origin_image zh-lightbox-thumb& width=&643& data-original=&/83e4105ddeefb64a4e43bbd662d451bc_r.jpg&&&/p&&br&上图对应的就是SPP-NET的网络结构图,任意给一张图像输入到CNN,经过卷积操作我们可以得到卷积特征(比如VGG16最后的卷积层为conv5_3,共产生512张特征图)。图中的window是就是原图一个region proposal对应到特征图的区域,只需要将这些不同大小window的特征映射到同样的维度,将其作为全连接的输入,就能保证只对图像提取一次卷积层特征。SPP-NET使用了空间金字塔采样(spatial pyramid pooling):将每个window划分为4*4, 2*2, 1*1的块,然后每个块使用max-pooling下采样,这样对于每个window经过SPP层之后都得到了一个长度为(4*4+2*2+1)*512维度的特征向量,将这个作为全连接层的输入进行后续操作。&p&&u&小结:使用SPP-NET相比于R-CNN可以大大加快目标检测的速度,但是依然存在着很多问题:&/u&&/p&&p&&u&(1) 训练分为多个阶段,步骤繁琐: 微调网络+训练SVM+训练训练边框回归器&/u&&/p&&p&&u&(2) SPP-NET在微调网络的时候固定了卷积层,只对全连接层进行微调,而对于一个新的任务,有必要对卷积层也进行微调。(分类的模型提取的特征更注重高层语义,而目标检测任务除了语义信息还需要目标的位置信息)&/u&&/p&&p&&u&针对这两个问题,RBG又提出Fast R-CNN, 一个精简而快速的目标检测框架。&/u&&/p&&br&&b&3)
Fast R-CNN(ICCV2015)&/b&&p&有了前边R-CNN和SPP-NET的介绍,我们直接看Fast R-CNN的框架图:&/p&&img src=&/ee3deb45e1ec8_b.jpg& data-rawwidth=&633& data-rawheight=&258& class=&origin_image zh-lightbox-thumb& width=&633& data-original=&/ee3deb45e1ec8_r.jpg&&&br&与R-CNN框架图对比,可以发现主要有两处不同:一是最后一个卷积层后加了一个ROI pooling layer,二是损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。&p&(1) ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个7x7的特征图。对于VGG16网络conv5_3有512个特征图,这样所有region proposal对应了一个7*7*512维度的特征向量作为全连接层的输入。&/p&&p&(2) R-CNN训练过程分为了三个阶段,而Fast R-CNN直接使用softmax替代SVM分类,同时利用多任务损失函数边框回归也加入到了网络中,这样整个的训练过程是端到端的(除去region proposal提取阶段)。&/p&&p&(3) Fast R-CNN在网络微调的过程中,将部分卷积层也进行了微调,取得了更好的检测效果。&/p&&p&&u&小结:Fast R-CNN融合了R-CNN和SPP-NET的精髓,并且引入多任务损失函数,使整个网络的训练和测试变得十分方便。在Pascal VOC2007训练集上训练,在VOC2007测试的结果为66.9%(mAP),如果使用VOC训练集训练,在VOC2007上测试结果为70%(数据集的扩充能大幅提高目标检测性能)。使用VGG16每张图像总共需要3s左右。&/u&&/p&&p&&u&缺点:region proposal的提取使用selective search,目标检测时间大多消耗在这上面(提region proposal 2~3s,而提特征分类只需0.32s),无法满足实时应用,而且并没有实现真正意义上的端到端训练测试(region proposal使用selective search先提取处来)。那么有没有可能直接使用CNN直接产生region proposal并对其分类?Faster R-CNN框架就是符合这样需要的目标检测框架。&/u&&/p&&p&&b&4)Faster R-CNN(NIPS2015)&/b&&/p&&p&(Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks)&/p&&p&在region proposal + CNN分类的这种目标检测框架中,region proposal质量好坏直接影响到目标检测任务的精度。如果找到一种方法只提取几百个或者更少的高质量的预选窗口,而且召回率很高,这不但能加快目标检测速度,还能提高目标检测的性能(假阳例少)。RPN(Region Proposal Networks)网络应运而生。&/p&&p&RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口。RPN的设计比较巧妙,RPN只需在最后的卷积层上滑动一遍,因为anchor机制和边框回归可以得到多尺度多长宽比的region proposal。&/p&&img src=&/8acabd5b0604_b.jpg& data-rawwidth=&584& data-rawheight=&347& class=&origin_image zh-lightbox-thumb& width=&584& data-original=&/8acabd5b0604_r.jpg&&&br&我们直接看上边的RPN网络结构图(使用了ZF模型),给定输入图像(假设分辨率为600*1000),经过卷积操作得到最后一层的卷积特征图(大小约为40*60)。在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,最后一层卷积层共有256个feature map,那么这个3*3的区域卷积后可以获得一个256维的特征向量,后边接cls layer和reg layer分别用于分类和边框回归(跟Fast R-CNN类似,只不过这里的类别只有目标和背景两个类别)。3*3滑窗对应的每个特征区域同时预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的region proposal,这种映射的机制称为anchor。所以对于这个40*60的feature map,总共有约*9)个anchor,也就是预测20000个region proposal。&p&这样设计的好处是什么呢?虽然现在也是用的滑动窗口策略,但是:滑动窗口操作是在卷积层特征图上进行的,维度较原始图像降低了16*16倍(中间经过了4次2*2的pooling操作);多尺度采用了9种anchor,对应了三种尺度和三种长宽比,加上后边接了边框回归,所以即便是这9种anchor外的窗口也能得到一个跟目标比较接近的region proposal。&/p&&p&NIPS2015版本的Faster R-CNN使用的检测框架是RPN网络+Fast R-CNN网络分离进行的目标检测,整体流程跟Fast R-CNN一样,只是region proposal现在是用RPN网络提取的(代替原来的selective search)。同时作者为了让RPN的网络和Fast R-CNN网络实现卷积层的权值共享,训练RPN和Fast R-CNN的时候用了4阶段的训练方法:&/p&&p&(1) 使用在ImageNet上预训练的模型初始化网络参数,微调RPN网络;&/p&&p&(2) 使用(1)中RPN网络提取region proposal训练Fast R-CNN网络;&/p&&p&(3) 使用(2)的Fast R-CNN网络重新初始化RPN, 固定卷积层进行微调;&/p&&p&(4) 固定(2)中Fast R-CNN的卷积层,使用(3)中RPN提取的region proposal微调网络。&/p&&p&权值共享后的RPN和Fast R-CNN用于目标检测精度会提高一些。&/p&&p&使用训练好的RPN网络,给定测试图像,可以直接得到边缘回归后的region proposal,根据region proposal的类别得分对RPN网络进行排序,并选取前300个窗口作为Fast R-CNN的输入进行目标检测,使用VOC07+12训练集训练,VOC2007测试集测试mAP达到73.2%(selective search + Fast R-CNN是70%), 目标检测的速度可以达到每秒5帧(selective search+Fast R-CNN是2~3s一张)。&/p&&p&需要注意的是,最新的版本已经将RPN网络和Fast R-CNN网络结合到了一起——将RPN获取到的proposal直接连到ROI pooling层,这才是一个真正意义上的使用一个CNN网络实现端到端目标检测的框架。&/p&&p&&u&小结:Faster R-CNN将一直以来分离的region proposal和CNN分类融合到了一起,使用端到端的网络进行目标检测,无论在速度上还是精度上都得到了不错的提高。然而Faster R-CNN还是达不到实时的目标检测,预先获取region proposal,然后在对每个proposal分类计算量还是比较大。比较幸运的是YOLO这类目标检测方法的出现让实时性也变的成为可能。&/u&&/p&&p&&u&总的来说,从R-CNN, SPP-NET, Fast R-CNN, Faster R-CNN一路走来,基于深度学习目标检测的流程变得越来越精简,精度越来越高,速度也越来越快。可以说基于region proposal的R-CNN系列目标检测方法是当前目标最主要的一个分支。&/u&&/p&&b&三. 基于回归方法的深度学习目标检测算法&/b&&p& Faster R-CNN的方法目前是主流的目标检测方法,但是速度上并不能满足实时的要求。YOLO一类的方法慢慢显现出其重要性,这类方法使用了回归的思想,既给定输入图像,直接在图像的多个位置上回归出这个位置的目标边框以及目标类别。&/p&&p&&b&1)YOLO (CVPR2016, oral)&/b&&/p&&p&(You Only Look Once: Unified, Real-Time Object Detection)&/p&&img src=&/bc9e1cb0bab76ae73275f_b.jpg& data-rawwidth=&644& data-rawheight=&407& class=&origin_image zh-lightbox-thumb& width=&644& data-original=&/bc9e1cb0bab76ae73275f_r.jpg&&&br&我们直接看上面YOLO的目标检测的流程图:&p&(1) 给个一个输入图像,首先将图像划分成7*7的网格&/p&&p&(2) 对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)&/p&&p&(3) 根据上一步可以预测出7*7*2个目标窗口,然后根据阈值去除可能性比较低的目标窗口,最后NMS去除冗余窗口即可。&/p&&p&可以看到整个过程非常简单,不需要中间的region proposal在找目标,直接回归便完成了位置和类别的判定。&/p&&p&&img src=&/8bc0c1f057cacaa2fdd96f9e1a3c9608_b.jpg& data-rawwidth=&655& data-rawheight=&275& class=&origin_image zh-lightbox-thumb& width=&655& data-original=&/8bc0c1f057cacaa2fdd96f9e1a3c9608_r.jpg&&那么如何才能做到直接在不同位置的网格上回归出目标的位置和类别信息呢?上面是YOLO的网络结构图,前边的网络结构跟GoogLeNet的模型比较类似,主要的是最后两层的结构,卷积层之后接了一个4096维的全连接层,然后后边又全连接到一个7*7*30维的张量上。实际上这7*7就是划分的网格数,现在要在每个网格上预测目标两个可能的位置以及这个位置的目标置信度和类别,也就是每个网格预测两个目标,每个目标的信息有4维坐标信息(中心点坐标+长宽),1个是目标的置信度,还有类别数20(VOC上20个类别),总共就是(4+1)*2+20 = 30维的向量。这样可以利用前边4096维的全图特征直接在每个网格上回归出目标检测需要的信息(边框信息加类别)。&/p&&p&&u&小结:YOLO将目标检测任务转换成一个回归问题,大大加快了检测的速度,使得YOLO可以每秒处理45张图像。而且由于每个网络预测目标窗口时使用的是全图信息,使得false positive比例大幅降低(充分的上下文信息)。但是YOLO也存在问题:没有了region proposal机制,只使用7*7的网格回归会使得目标不能非常精准的定位,这也导致了YOLO的检测精度并不是很高。&/u&&/p&&b&2)SSD &/b&&p&(SSD: Single Shot MultiBox Detector)&/p&&p&上面分析了YOLO存在的问题,使用整图特征在7*7的粗糙网格内回归对目标的定位并不是很精准。那是不是可以结合region proposal的思想实现精准一些的定位?SSD结合YOLO的回归思想以及Faster R-CNN的anchor机制做到了这点。&/p&&img src=&/f18b105bea8e2f0cdcab_b.jpg& data-rawwidth=&640& data-rawheight=&244& class=&origin_image zh-lightbox-thumb& width=&640& data-original=&/f18b105bea8e2f0cdcab_r.jpg&&&br&上图是SSD的一个框架图,首先SSD获取目标位置和类别的方法跟YOLO一样,都是使用回归,但是YOLO预测某个位置使用的是全图的特征,SSD预测某个位置使用的是这个位置周围的特征(感觉更合理一些)。那么如何建立某个位置和其特征的对应关系呢?可能你已经想到了,使用Faster R-CNN的anchor机制。如SSD的框架图所示,假如某一层特征图(图b)大小是8*8,那么就使用3*3的滑窗提取每个位置的特征,然后这个特征回归得到目标的坐标信息和类别信息(图c)。&p&不同于Faster R-CNN,这个anchor是在多个feature map上,这样可以利用多层的特征并且自然的达到多尺度(不同层的feature map 3*3滑窗感受野不同)。&/p&&p&&u&小结:SSD结合了YOLO中的回归思想和Faster R-CNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测的跟Faster R-CNN一样比较精准。SSD在VOC2007上mAP可以达到72.1%,速度在GPU上达到58帧每秒。&/u&&/p&&p&&u&总结:YOLO的提出给目标检测一个新的思路,SSD的性能则让我们看到了目标检测在实际应用中真正的可能性。&/u&&/p&&b&四. 提高目标检测方法&/b&&p&R-CNN系列目标检测框架和YOLO目标检测框架给了我们进行目标检测的两个基本框架。除此之外,研究人员基于这些框架从其他方面入手提出了一系列提高目标检测性能的方法。&/p&&p&&b&(1) 难分样本挖掘(hard negative mining)&/b&&/p&&p&R-CNN在训练SVM分类器时使用了难分样本挖掘的思想,但Fast R-CNN和Faster R-CNN由于使用端到端的训练策略并没有使用难分样本挖掘(只是设置了正负样本的比例并随机抽取)。CVPR2016的Training Region-based Object Detectors with Online Hard Example Mining(oral)将难分样本挖掘(hard example mining)机制嵌入到SGD算法中,使得Fast R-CNN在训练的过程中根据region proposal的损失自动选取合适的region proposal作为正负例训练。实验结果表明使用OHEM(Online Hard Example Mining)机制可以使得Fast R-CNN算法在VOC2007和VOC2012上mAP提高 4%左右。&/p&&p&&b&(2) 多层特征融合&/b&&/p&&p&Fast R-CNN和Faster R-CNN都是利用了最后卷积层的特征进行目标检测,而由于高层的卷积层特征已经损失了很多细节信息(pooling操作),所以在定位时不是很精准。HyperNet等一些方法则利用了CNN的多层特征融合进行目标检测,这不仅利用了高层特征的语义信息,还考虑了低层特征的细节纹理信息,使得目标检测定位更精准。&/p&&p&&b&(3) 使用上下文信息&/b&&/p&&p&在提取region proposal特征进行目标检测时,结合region proposal上下文信息,检测效果往往会更好一些。(Object detection via a multi-region & semantic segmentation-aware CNN model以及Inside-Outside Net等论文中都使用了上下文信息)&/p&&p&&b&该文章属于“深度学习大讲堂”原创,如需要转载,请联系&a href=&/people/guo-dan-qing& class=&internal&&@果果是枚开心果&/a&.&/b&&/p&&br&&p&&b&作者简介:&/b&&/p&&img src=&/5f25f953d_b.jpg& data-rawwidth=&84& data-rawheight=&81& class=&content_image& width=&84&&&p&&b&王斌&/b&,中科院计算所前瞻研究实验室跨媒体计算课题组博士生,导师张勇东研究员。研究方向为基于深度学习的目标检测。2015年作为计算所MCG-ICT-CAS团队成员,参加ImageNet竞赛ILSVRC2015的目标检测任务获得全球第5名。&/p&&p&&b&原文链接:&a href=&/?target=http%3A//mp./s%3F__biz%3DMzI1NTE4NTUwOQ%3D%3D%26mid%3Didx%3D1%26sn%3Dbb3e8e6aeee2ee1f4d3f%23rd& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&mp./s?&/span&&span class=&invisible&&__biz=MzI1NTE4NTUwOQ==&mid=&idx=1&sn=bb3e8e6aeee2ee1f4d3f#rd&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&/b&&/p&&p&&b&欢迎大家关注我们的微信公众号,搜索微信名称:深度学习大讲堂&/b&&br&&/p&&img src=&/499b12b5d7aaa692b6637_b.jpg& data-rawwidth=&327& data-rawheight=&55& class=&content_image& width=&327&&
深度学习大讲堂致力于推送人工智能,深度学习方面的最新技术,产品以及活动。请关注我们的知乎专栏! 前言 开始本文内容之前,我们先来看一下上边左侧的这张图,从图中你看到了什么物体?他们在什么位置?这还不简单,图中有一个猫和一个人,具体的位置就是…
&p&为了解释这个问题,我觉得很有必要去了解一下CNN架构模型的发展,从CNN模型架构的发展去看待不同的网络之间的区别,去学习CNN模型的定义。&/p&&br&-------------------&br&&br&&p&深度学习算法最近变得越来越流行和越来越有用的算法,然而深度学习或者深度神经网络的成功得益于层出不穷的神经网络模型架构。这篇文章当中作者回顾了从1998年开始,近18年来深度神经网络的架构发展情况。&/p&&br&&img src=&/v2-fe04a17f1_b.png& data-rawwidth=&619& data-rawheight=&405& class=&origin_image zh-lightbox-thumb& width=&619& data-original=&/v2-fe04a17f1_r.png&&&br&&p&图中的坐标轴我们可以看出横坐标是操作的复杂度,纵坐标是精度。模型设计一开始的时候模型权重越多模型越大,其精度越高,后来出现了resNet、GoogleNet、Inception等网络架构之后,在取得相同或者更高精度之下,其权重参数不断下降。值得注意的是,并不是意味着横坐标越往右,它的运算时间越大。在这里并没有对时间进行统计,而是对模型参数和网络的精度进行了纵横对比。&/p&&p&其中有几个网络作者觉得是必学非常值得学习和经典的:AlexNet、LeNet、GoogLeNet、VGG-16、NiN。&/p&&br&&p&如果你想了解更多关于深度神经网络的架构及其对应的应用,不妨看一下这篇综述 &a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&An Analysis of Deep Neural Network Models for Practical Applications&i class=&icon-external&&&/i&&/a&。&/p&&br&&blockquote&&p&转载自ZOMI的博客 [&a href=&///?target=https%3A//chenzomi12.github.io//CNN-Architectures/chenzomi12.github.io& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&chenzomi12.github.io&i class=&icon-external&&&/i&&/a&]&/p&&/blockquote&&br&LeNet5&br&&br&&p&1998年。LeCun乐春大神发布了&a href=&///?target=http%3A///exdb/publis/pdf/lecun-01a.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LeNet&i class=&icon-external&&&/i&&/a&网络架构,从而揭开了深度学习的神秘面纱。从1998年开始,深度学习这一领域就开始不断地被人们所熟知,也是因为这个网络架构,不断地推动着深度学习这一领域。当然啦,为什么不叫LeNet而叫LeNet5呢,因为Yann LeCun经过了很多次反复的试验之后的结果,同时也因为有5个卷基层因此以lenet5命名!&/p&&br&&p&lenet5架构是一个开创性的工作,因为图像的特征是分布在整个图像当中的,并且学习参数利用卷积在相同参数的多个位置中提取相似特性的一种有效方法。回归到1998年当时没有GPU来帮助训练,甚至CPU速度都非常慢。因此,对比使用每个像素作为一个单独的输入的多层神经网络,Lenet5能够节省参数和计算是一个关键的优势。lenet5论文中提到,全卷积不应该被放在第一层,因为图像中有着高度的空间相关性,并利用图像各个像素作为单独的输入特征不会利用这些相关性。因此有了CNN的三个特性了:1.局部感知、2.下采样、3.权值共享。&/p&&br&&img src=&/v2-f442c8cdae572ad898af_b.jpg& data-rawwidth=&800& data-rawheight=&232& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-f442c8cdae572ad898af_r.jpg&&&br&&p&&strong&LeNet5小结:&/strong&&/p&&ul&&li&卷积神经网络使用3层架构:卷积、下采样、非线性激活函数&/li&&li&使用卷积提取图像空间特征&/li&&li&下采样使用了图像平均稀疏性&/li&&li&激活函数采用了tanh或者sigmoid函数&/li&&li&多层神经网络(MLP)作为最后的分类器&/li&&li&层之间使用稀疏连接矩阵,以避免大的计算成本&/li&&/ul&&p&总的来说LeNet5架构把人们带入深度学习领域,值得致敬。从2010年开始近几年的神经网络架构大多数都是基于LeNet的三大特性。&/p&&br&&b&GAP&br&&/b&&br&&p&从年这10年当中,神经网络的发展却变得非常缓慢,就连人工智能领域的大牛吴恩达教授在2003年的公开课花了2节课的时间讲解SVM的推导,而对于神经网络只用了不到20分钟带过。在2012年coresea新的人工智能公开课上面反而SVM用了不到一节课的时间讲解,神经网络却用了2节课的时间进行算法介绍,可见科学家们对神经网络越来越重视。并且随着CPU和GPU的速度不断提升之下,带来了性能上的飞跃、也带来存储上的飞跃,让深度神经网络变得更加可算,于是从2010年开启了深度学习的大门。&/p&&br&&b&Dan Ciresan Net&br&&/b&&br&&p&2010年Dan Claudiu Ciresan和Jurgen Schmidhuber发表了一个&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GPU神经网络&i class=&icon-external&&&/i&&/a&。论文里面证明了使用 NVIDIA GTX 280 GPU之后能够处理高达9层的神经网络。&/p&&p&从此之后,Nvidia公司的股价开始不断攀升,深度学习也越来越为人们所熟知。&/p&&br&&b&AlexNet&br&&/b&&br&&p&2012年,Alex Krizhevsky发表了&a href=&///?target=https%3A//papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AlexNet&i class=&icon-external&&&/i&&/a&,相对比LeNet它的网络层次更加深,从LeNet的5层到AlexNet的7层,更重要的是AlexNet还赢得了2012年的ImageNet竞赛的第一。AlexNet不仅比LeNet的神经网络层数更多更深,并且可以学习更复杂的图像高维特征。&/p&&br&&p&&strong&AlexNet小结:&/strong&&/p&&ul&&li&使用ReLU函数作为激活函数,降低了Sigmoid类函数的计算量&/li&&li&利用dropout技术在训练期间选择性地剪掉某些神经元,避免模型过度拟合&/li&&li&引入max-pooling技术&/li&&li&利用双GPU NVIDIA GTX 580显著减少训练时间&/li&&/ul&&br&&img src=&/v2-e04b054b5bf19bcb56558_b.jpg& data-rawwidth=&700& data-rawheight=&331& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&/v2-e04b054b5bf19bcb56558_r.jpg&&&br&&p&随着GPU提供越来越强悍的性能,同时允许超过10x倍数的训练增长时间,于是可以处理越来越大的图片和越来越庞大的数据集。暴风雨来临了,AlexNet的成功开始了一场小革命,卷积神经网络CNN现在是深度学习的主力,于是有人称“网络越复杂处理的任务越厉害”。&/p&&br&&b&Network-in-network&/b&&br&&br&&p&2013年年尾,Min Lin提出了在卷积后面再跟一个1x1的卷积核对图像进行卷积,这就是&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Network-in-network&i class=&icon-external&&&/i&&/a&的核心思想了。NiN在每次卷积完之后使用,目的是为了在进入下一层的时候合并更多的特征参数。同样NiN层也是违背LeNet的设计原则(浅层网络使用大的卷积核),但却有效地合并卷积特征,减少网络参数、同样的内存可以存储更大的网络。&/p&&p&根据Min Lin的NiN论文,他们说这个“网络的网络”(NIN)能够提高CNN的局部感知区域。例如没有NiN的当前卷积是这样的:3x3 256 [conv] -& [maxpooling],当增加了NiN之后的卷积是这样的:3x3 256 [conv] -& 1x1 256 [conv] -& [maxpooling]。&/p&&img src=&/v2-6d72cc2c7f964f9d84d62_b.jpg& data-rawwidth=&800& data-rawheight=&234& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&/v2-6d72cc2c7f964f9d84d62_r.jpg&&&br&&p&MLP多层感知的厉害之处就在于它把卷积特征结合起来成为一个更复杂的组合,这个思想将会在后面ResNet和Inception中用到。&/p&&br&&b&VGG&/b&&br&&br&&p&2014年是个绽放年,出了两篇重要的论文:VGG、GoogLeNet。&/p&&br&&p&来自牛津大学的&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VGG&i class=&icon-external&&&/i&&/a&网络是第一个在每个卷积层使用更小的3×3卷积核对图像进行卷积,并把这些小的卷积核排列起来作为一个卷积序列。通俗点来讲就是对原始图像进行3×3卷积,然后再进行3×3卷积,连续使用小的卷积核对图像进行多次卷积。&/p&&br&&p&或许很多人看到这里也很困惑为什么使用那么小的卷积核对图像进行卷积,并且还是使用连续的小卷积核?VGG一开始提出的时候刚好与LeNet的设计原则相违背,因为LeNet相信大的卷积核能够捕获图像当中相似的特征(权值共享)。AlexNet在浅层网络开始的时候也是使用9×9、11×11卷积核,并且尽量在浅层网络的时候避免使用1×1的卷积核。但是VGG的神奇之处就是在于使用多个3×3卷积核可以模仿较大卷积核那样对图像进行局部感知。后来多个小的卷积核串联这一思想被GoogleNet和ResNet等吸收。&/p&&br&&p&从下图我们可以看出来,VGG使用多个3x3卷积来对高维特征进行提取。因为如果使用较大的卷积核,参数就会大量地增加、运算时间也会成倍的提升。例如3x3的卷积核只有9个权值参数,使用7*7的卷积核权值参数就会增加到49个。因为缺乏一个模型去对大量的参数进行归一化、约减,或者说是限制大规模的参数出现,因此训练核数更大的卷积网络就变得非常困难了。&/p&&p&VGG相信如果使用大的卷积核将会造成很大的时间浪费,减少的卷积核能够减少参数,节省运算开销。虽然训练的时间变长了,但是总体来说预测的时间和参数都是减少的了。&/p&&br&&img src=&/v2-c443c058fe802d203abbdd5_b.jpg& data-rawwidth=&700& data-rawheight=&808& class=&origin_image zh-lightbox-thumb& width=&700& data-original=&/v2-c443c058fe802d203abbdd5_r.jpg&&&br&&b&GoogLeNet&br&&/b&&br&&p&2014年,在google工作的Christian Szegedy为了找到一个深度神经网络结构能够有效地减少计算资源,于是有了这个&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GoogleNet&i class=&icon-external&&&/i&&/a&了(也叫做Inception V1)。&/p&&br&&p&从2014年尾到现在,深度学习模型在图像内容分类方面和视频分类方面有了极大的应用。在这之前,很多一开始对深度学习和神经网络都保持怀疑态度的人,现在都涌入深度学习的这个领域,理由很简单,因为深度学习不再是海市蜃楼,而是变得越来越接地气。就连google等互联网巨头都已经在深度学习领域布局,成立了各种各样的额人工智能实验室。&/p&&br&&p&Christian在思考如何才能够减少深度神经网络的计算量,同时获得比较好的性能的框架。即使不能两全其美,退而求其次能够保持在相同的计算成本下,能够有更好的性能提升这样的框架也行。于是后面Christian和他的team在google想出了这个模型:&/p&&br&&img src=&/v2-afb833c8a10b8b6edb028f6c57f659ce_b.jpg& data-rawwidth=&692& data-rawheight=&366& class=&origin_image zh-lightbox-thumb& width=&692& data-original=&/v2-afb833c8a10b8b6edb028f6c57f659ce_r.jpg&&&br&&p&其乍一看基本上是1×1,3×3和5×5卷积核的并行合并。但是,最重要的是使用了1×1卷积核(NiN)来减少后续并行操作的特征数量。这个思想现在叫做“bottleneck layer”。&/p&&br&&b&Bottleneck layer&br&&/b&&p&受NiN的启发,googleNet的Bottleneck layer减少了特征的数量,从而减少了每一层的操作复杂度,因此可以加快推理时间。在将数据传递到下一层卷积之前,特征的数量减少了4左右。因此这种设计架构因为大量节省计算成本而名声大噪。&/p&&br&&p&让我们详细研究一下这个Bottleneck layer。假设输入时256个feature map进来,256个feature map输出,假设Inception层只执行3x3的卷积,那么这就需要这行 (256x256) x (3x3) 次卷积左右(大约589,000次计算操作)。再假设这次589,000次计算操作在google的服务器上面用了0.5ms的时间,计算开销还是很大的。现在Bottleneck layer的思想是先来减少特征的数量,我们首先执行256 -& 64 1×1卷积,然后在所有Bottleneck layer的分支上对64大小的feature map进行卷积,最后再64 -& 256 1x1卷积。 操作量是:&/p&&ul&&li&256×64 × 1×1 = 16,000s&/li&&li&64×64 × 3×3 = 36,000s&/li&&li&64×256 × 1×1 = 16,000s&/li&&/ul&&br&&p&总共约70,000,而我们以前有近600,000。几乎减少10倍的操作!&/p&&br&&p&虽然我们做的操作较少,但我们并没有失去这一层特征。实际上,Bottleneck layer已经在ImageNet数据集上表现非常出色,并且也将在稍后的架构例如ResNet中使用到。&/p&&br&&p&成功的原因是输入特征是相关的,因此可以通过适当地与1x1卷积组合来去除冗余。然后,在卷积具有较少数目的特征之后,它们可以再次扩展并作用于下一层输入。&/p&&br&&b&Inception V3&/b&&br&&br&&p&Christian的团队确实很厉害,2015年2月他们又发表了新的文章关于在googleNet中加入一个&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Batch-normalized&i class=&icon-external&&&/i&&/a&层。Batch-normalized层归一化计算图层输出处所有特征图的平均值和标准差,并使用这些值对其响应进行归一化。这对应于“白化”数据非常有效,并且使得所有神经层具有相同范围并且具有零均值的响应。这有助于训练,因为下一层不必学习输入数据中的偏移,并且可以专注于如何最好地组合特征。&/p&&br&&p&2015年12月,他们发布了一个新版本的GoogLeNet(&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Inception V3&i class=&icon-external&&&/i&&/a&)模块和相应的架构,并且更好地解释了原来的GoogLeNet架构,GoogLeNet原始思想:&/p&&br&&ul&&li&通过构建平衡深度和宽度的网络,最大化网络的信息流。在进入pooling层之前增加feature maps&/li&&li&当网络层数深度增加时,特征的数量或层的宽度也相对应地增加&/li&&li&在每一层使用宽度增加以增加下一层之前的特征的组合&/li&&li&只使用3x3卷积&/li&&br&&/ul&&p&因此最后的模型就变成这样了:&/p&&br&&img src=&/v2-bda73a1a50db52fcd5d992ad_b.jpg& data-rawwidth=&450& data-rawheight=&326& class=&origin_image zh-lightbox-thumb& width=&450& data-original=&/v2-bda73a1a50db52fcd5d992ad_r.jpg&&&br&&p&网络架构最后还是跟GoogleNet一样使用pooling层+softmax层作为最后的分类器。&/p&&br&&b&ResNet&/b&&br&&br&&p&2015年12月&a href=&///?target=https%3A//arxiv.org/pdf/v1.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ResNet&i class=&icon-external&&&/i&&/a&发表了,时间上大概与Inception v3网络一起发表的。其中ResNet的一个重要的思想是:输出的是两个连续的卷积层,并且输入时绕到下一层去。这句话不太好理解可以看下图。&/p&&br&&img src=&/v2-eb2f45c33d405f2cf2d63d_b.png& data-rawwidth=&436& data-rawheight=&963& class=&origin_image zh-lightbox-thumb& width=&436& data-original=&/v2-eb2f45c33d405f2cf2d63d_r.png&&&br&&br&&p&但在这里,他们绕过两层,并且大规模地在网络中应用这中模型。在2层之后绕过是一个关键,因为绕过单层的话实践上表明并没有太多的帮助,然而绕过2层可以看做是在网络中的一个小分类器!看上去好像没什么感觉,但这是很致命的一种架构,因为通过这种架构最后实现了神经网络超过1000层。傻了吧,之前我们使用LeNet只是5层,AlexNet也最多不过7层。&/p&&br&&br&&p&该层首先使用1x1卷积然后输出原来特征数的1/4,然后使用3×3的卷积核,然后再次使用1x1的卷积核但是这次输出的特征数为原来输入的大小。如果原来输入的是256个特征,输出的也是256个特征,但是这样就像Bottleneck Layer那样说的大量地减少了计算量,但是却保留了丰富的高维特征信息。&/p&&br&&p&ResNet一开始的时候是使用一个7x7大小的卷积核,然后跟一个pooling层。当然啦,最后的分类器跟GoogleNet一样是一个pooling层加上一个softmax作为分类器。下图左边是VGG19拥有190万个参数,右图是34层的ResNet只需要36万个参数:&/p&&br&&br&&p&&strong&ResNet网络特征&/strong&&/p&&br&&ul&&li&ResNet可以被看作并行和串行多个模块的结合&/li&&li&ResNet上部分的输入和输出一样,所以看上去有点像RNN,因此可以看做是一个更好的生物神经网络的模型&/li&&br&&/ul&&b&SqueezeNet&/b&&br&&br&&p&2016年11月才发表的文章,一看论文的标题可以被镇住:&a href=&///?target=https%3A//arxiv.org/pdf/v4.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and & 0.5MB model size&i class=&icon-external&&&/i&&/a&。文章直接说SqueezeNet有着跟AlexNet一样的精度,但是参数却比Alex少了接近50倍并且参数只需要占用很小的内存空间。这里的设计就没有SegNet或者GoogleNet那样的设计架构惊艳了,但SqueezeNet却是能够保证同样的精度下使用更少的参数。&/p&&br&&img src=&/v2-aa836e3a36338a7bae99d_b.png& data-rawwidth=&1620& data-rawheight=&1190& class=&origin_image zh-lightbox-thumb& width=&1620& data-original=&/v2-aa836e3a36338a7bae99d_r.png&&&br&&b&Xception&/b&&br&&br&&p&&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Xception&i class=&icon-external&&&/i&&/a&模型使用与ResNet和Inception V4一样简单且优雅的架构,并且改进了Inception模型。&/p&&br&&p&从Xception模型我们可以看出来Xception模型的架构具有36个卷积层,与ResNet-34非常相似。但是模型的代码与ResNet一样简单,并且比Inception V4更容易理解。&/p&&br&&br&&img src=&/v2-692dd448fbd_b.jpg& data-rawwidth=&2474& data-rawheight=&1694& class=&origin_image zh-lightbox-thumb& width=&2474& data-original=&/v2-692dd448fbd_r.jpg&&&br&&p&从 &a href=&///?target=https%3A///culurciello/554c8e56d3bbaf7c66bf66c& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&here&i class=&icon-external&&&/i&&/a& 或者 &a href=&///?target=https%3A//keras.io/applications/%23xception& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&here&i class=&icon-external&&&/i&&/a& 可以找到Xception的实现代码。&/p&&br&&p&&b&总结&/b&&br&&/p&&br&&p&我们再来回顾开篇的对比图。从图中我们可以看出来,AlexNet一类的模型没有考虑太多权重参数的问题,因此圆圈比较大。一开始AlexNet只是希望用深度网络能够找到更多图像当中的高维特征,后来发现当网络越深的时候需要的参数越多,硬件总是跟不上软件的发展,这个时候如果加深网络的话GPU的显存塞不下更多的参数,因此硬件限制了深度网络的发展。为了能够提高网络的深度和精度,于是大神们不断地研究,尝试使用小的卷积核代替大的卷积核能够带来精度上的提升,并且大面积地减少参数,于是网络的深度不再受硬件而制约。&/p&&img src=&/v2-fe04a17f1_b.png& data-rawwidth=&619& data-rawheight=&405& class=&origin_image zh-lightbox-thumb& width=&619& data-original=&/v2-fe04a17f1_r.png&&&br&&p&可是另外一方面,随着网络的深度越深,运算的时间就越慢,这也是个很蛋疼的事情,不能两全其美。作者相信在未来2-3年我们能够亲眼目睹比现有网络更深、精度更高、运算时间更少的网络出现。因为硬件也在快速地发展,特斯拉使用的NVIDIA Driver PX 2的运算速率已经比现在Titan X要快7倍。&/p&&br&&b&后话&/b&&br&&br&&p&其实作者觉得神经网络的架构体系对于了解“深度学习”和对于了解深度学习的发展是非常重要的,因此强烈推荐大家去深入研读一下上面提到的网络架构对应的文章。&/p&&p&总是有一些人会问为什么我们需要那么多时间去了解这些深度网络的架构体系呢,而不是去研究数据然后了解数据背后的意义和如何对数据进行预处理呢?对于如何研究数据可以搜一下另外一篇文章《人工智能的特征工程问题》。对,数据很重要,同时模型也很重要。简单的举一个例子,如果你对某种图像数据很了解,但是不懂CNN如何对这些图像进行提取高维特征,那么最后可能还是会使用HOG或者传统的SIFT特征检测算法。&/p&&p&还要注意的是,在这里我们主要谈论计算机视觉的深度学习架构。类似的神经网络架构在其他领域还在不断地发展,如果你有精力和时间,那么可以去研究更多不一样的架构进化历。&/p&&br&&blockquote&&p&转载自ZOMI的博客 [&a href=&///?target=https%3A//chenzomi12.github.io//CNN-Architectures/chenzomi12.github.io& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&chenzomi12.github.io&i class=&icon-external&&&/i&&/a&]&/p&&/blockquote&&br&引用&ol&&li&&a href=&///?target=https%3A//chenzomi12.github.io//CNN-Architectures/chenzomi12.github.io& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&chenzomi12.github.io&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A///exdb/publis/pdf/lecun-01a.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&LeNet&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Dan Ciresan Net&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&AlexNet&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Network-in-network&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&VGG&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&GoogleNet&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Inception V3&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=http%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Batch-normalized Layer&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//arxiv.org/pdf/v1.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ResNet&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//arxiv.org/pdf/v4.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&SqueezeNet&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Xception&i class=&icon-external&&&/i&&/a&&/li&&li&&a href=&///?target=https%3A//culurciello.github.io/tech//nets.html& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Neural Network Architectures&i class=&icon-external&&&/i&&/a&&/li&&/ol&&br&-----------------------------------------------------------------------------------------------&br&&br&为什么不支持markdown!!!!!
为了解释这个问题,我觉得很有必要去了解一下CNN架构模型的发展,从CNN模型架构的发展去看待不同的网络之间的区别,去学习CNN模型的定义。 ------------------- 深度学习算法最近变得越来越流行和越来越有用的算法,然而深度学习或者深度神经网络的成功得益…
&img src=&/v2-b18f554d13c4b3d99fd383bb_b.jpg& data-rawwidth=&1466& data-rawheight=&1080& class=&origin_image zh-lightbox-thumb& width=&1466& data-original=&/v2-b18f554d13c4b3d99fd383bb_r.jpg&&&blockquote&&p&&em&风格迁移是近来人工智能领域内的一个热门研究主题,此前各路媒体也报道了很多相关的研究。近日,来自浙江大学和亚利桑那州立大学的几位研究者在 arXiv 上发布了一篇「神经风格迁移(Neural Style Transfer)」的概述论文,对当前神经网络风格迁移技术的研究、应用和难题进行了全面的总结:&a href=&/?target=https%3A//arxiv.org/abs/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&[] Neural Style Transfer: A Review&i class=&icon-external&&&/i&&/a&。&/em&&br&&/p&&/blockquote&&img src=&/v2-72e8d6bad376ecd5505ad61bff1fae9c_b.png& data-rawheight=&302& data-rawwidth=&870& class=&origin_image zh-lightbox-thumb& width=&870& data-original=&/v2-72e8d6bad376ecd5505ad61bff1fae9c_r.png&&&p&&strong&摘要&/strong&&/p&&br&&p&Gatys 等人的近期研究证实了卷积神经网络(CNN)的力量:通过分离和重新组合图片内容与风格,CNN 可以创作出具有艺术魅力的作品。使用 CNN 将一张图片的语义内容与不同风格融合起来的过程被称为神经风格迁移(Neural Style Transfer)。从那以后,在学术研究和产业应用中,神经风格迁移已成为一个很受欢迎的主题,不仅日益受到计算机视觉研究者的关注,研究人员还提出了几种方法来提升或扩展 Gatys et al. 提出的神经算法。不过,有关这方面的全面综述、总结性文献还付之阙如。这篇论文回顾了神经网络风格迁移研究近期取得的进展,并讨论了这一技术的不同应用以及尚未解决的问题,这也是未来研究的方向。&/p&&br&&p&&em&&img src=&/v2-abaecb214e1c9bdf09813a_b.png& data-rawheight=&240& data-rawwidth=&960& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&/v2-abaecb214e1c9bdf09813a_r.png&&图 1:使用了 Gatys 等人的风格迁移算法的例子,将中国画风格(b)转移到了一张长城相片(a)上。提供风格的那幅作品是黄公望的《富春山居图》。&/em&&/p&&br&&p&&strong&1 引言&/strong&&/p&&br&&p&本文的余下部分的逻辑结构如下。第 2 节对现有的神经风格迁移方法进行分类,并详细解释了这些方法。第 3、4 节介绍了这些方法的一些改进以及扩展。文章第 5 节给出了风格化输出效果的评估方法。第 6 节讨论了这些神经风格迁移方法的商业化应用。最后,第 7 节总结了当前面临的挑战以及可能的解决方案。第 8 部分总结全文并抛出了几个有前途的研究方向。&/p&&br&&p&文章所涉论文以及相应的代码、预训练模型请移步至:&a href=&/?target=https%3A///ycjing/Neural-Style-Transfer-Papers& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Build software better, together&i class=&icon-external&&&/i&&/a& ycjing/Neural-Style-Transfer-Papers&/p&&br&&p&&strong&2 神经风格迁移方法的二分法&/strong&&/p&&br&&p&在这一部分,我们提出了一种分类方法。当前的神经风格迁移方法符合其中之一:基于图片迭代的描述性神经方法(Descriptive Neural Methods Based On Image Iteration)和基于模型迭代的生成式神经方法(Generative Neural Methods Based On Model Iteration)。第一类方法通过直接迭代更新图片像素来实现图像风格迁移,第二种方法首先会迭代优化生成模型,接着通过一个单独前向通过来生成风格化图像。&/p&&br&&p&&strong&2.1 基于图像迭代的描述性神经方法(Descriptive Neural Methods Based On Image Iteration)&/strong&&/p&&br&&p&第一个用来转移图片风格的神经方法就是描述性神经方法。这一方法会从随机噪音开始,通过反向传播迭代更新(尚未知晓的)风格化图像。图像迭代的目标是最小化总损失,这样风格化后的图像就能同时将内容图像的内容与风格图像的风格匹配起来。&/p&&br&&p&神经风格迁移的关键之一就是风格表征(representation of style),即预定义的风格损失函数。风格损失函数会被优化以匹配风格图像特征统计。根据采用的风格损失函数不同,我们可以进一步将这一方法分为基于最大均值差(MMD)的方法和基于马尔科夫随机场(MRF)的方法。简便起见,我们称之为基于 MMD 和基于 MRF 的方法。&/p&&br&&p&&strong&2.1.1 基于 MMD 的描述性神经方法&/strong&&/p&&br&&p&MMD 是一个很受欢迎的评估两个分布之差的标准,以希尔伯特空间特征均值为基础[20]。最近,Li 等人的研究表明风格迁移能够被视为一个从内容图像到风格图像的分布对齐过程 [30]。因此,MMD 能被用于测量风格差异。基于 MMD 的描述性神经方法是指使用带有不同核函数的 MMD 作为优化的风格损失的神经方法。&/p&&br&&p&&strong&2.1.2 基于 MRF 的描述性神经方法&/strong&&/p&&br&&p&MRF 是一种用于图像合成的经典框架。假设局部图像块包含了一张图像中的最相关统计依存性。描述性神经方法的第二类是以 MRF 为基础的,还考虑到了局部水平的神经风格迁移,比如局部图像块的风格匹配。&/p&&br&&p&&strong&2.2 基于模型迭代的生成式神经方法&/strong&&/p&&br&&p&尽管描述性神经方法能够生成出色的风格化图像,但仍有局限性。其中之一就是效率问题。第二类,亦即基于模型迭代的生成式神经方法(在某些论文中,也被成为「快速」神经风格迁移)解决了速度和计算成本问题,不过牺牲了模型的灵活性。关键思想就是在每个针对特定风格图像的大型图像数据集上提前训练一个前馈网络。使用梯度下降,通过迭代式地更新模型来优化网络模型。&/p&&br&&p&&strong&3 当前方法上的轻微修改&/strong&&/p&&br&&p&有几项研究提出了基于目前最好的神经网络风格迁移算法的改进版。这些改进版保留了现有算法的架构和处理过程,但稍稍改变了损失函数来获得更好的性能。&/p&&br&&p&&em&&img src=&/v2-5c1a346b99da1ccdca15_b.png& data-rawheight=&226& data-rawwidth=&1092& class=&origin_image zh-lightbox-thumb& width=&1092& data-original=&/v2-5c1a346b99da1ccdca15_r.png&&图 2:控制神经风格迁移中的画笔大小可以生成不同风格的结果。风格样式来自梵高的《The Starry Night》&/em&&/p&&br&&p&&strong&3.1 描述性神经方法的衍生&/strong&&/p&&br&&p&&strong&3.2 生成式神经方法的衍生&/strong&&/p&&br&&p&&strong&4 特定类型图像的扩展&/strong&&/p&&br&&p&上述神经风格迁移方法都是对静态图像进行处理的。它们可能不适用于其他类型的图像(如涂鸦、头像和视频)。目前已有很多研究正试图将最先进的神经风格迁移算法应用到这些特殊类型的图像,或指定目标的图像风格迁移中。&/p&&br&&p&在涂鸦中的神经风格迁移。Champandard 完成了一些有趣的研究 [7](如 2.1.2 节所示)。除了将语义映射引入到神经风格迁移算法中以外,人们也可以通过这种方法在图像中输入高级注释来把简单的草图转换为精细的图画。&/p&&br&&p&头像的神经风格转移。尽管 Gatys 等人的算法已可以进行通用图像的风格转移,但它还不适用于头像的风格转移。由于空间约束不强,直接应用 Gatys 等人的方法可能会使人物头部变形。它对于这种类型的风格转移是不可接受的。Selim 等人 [41] 经过研究解决了这一问题,他们拓展了 Gatys 等人的算法。他们使用了增益图(gain maps)的概念来约束空间,从而在风格迁移的同时可以保留人物的面部轮廓。&/p&&br&&p&指定对象的神经风格迁移。Castillo 等人 [5] 提出了指定风格迁移目标的算法。该算法是在图像中仅对单个用户指定的对象进行风格化的过程。这个想法是使用最先进的语义分割算法从风格化图像中分割目标对象,然后提取风格迁移后的对象与非风格化背景合并。&/p&&br&&p&对视频的神经风格迁移。Ruder 等人 [40] 拓展了 Gatys 等人的研究,用神经风格前以算法对视频图像序列进行了处理,在本文中神经视频风格迁移中有提到。给定目标风格图片,Ruder 等人的算法引入时间损失函数来让整个视频都可以得到风格迁移。该算法背后的关键思想是使用时间约束来保持各帧之间的平滑过渡,即惩罚沿着点轨迹的偏差。Ruder 等人的算法已被证明可以能够在大多数情况下消除人工痕迹,并产生平滑的风格化视频。另一个此方向上的研究由 Anderson 等人 [3] 提出,它能够利用光流对风格迁移进行初始化,为一段影片进行渲染。&/p&&br&&p&&strong&5 评估方法&/strong&&/p&&br&&p&对于神经风格迁移问题,并不存在什么 ground truth。神经风格迁移是一种艺术创作。不同的人可能会对同一个迁移后的结果有不同乃至截然相反的看法。因此,对神经风格迁移算法所得到的视觉结果的评估仍然还是一个悬而未决的重要问题。&/p&&br&&p&从我们的角度来看,在神经风格迁移领域有两种类型的评估方法可以使用,即:定性评估(qualitative evaluation)和定量评估(quantitative evaluation)。定性评估要求参与者评估排序不同算法的结果,这依赖于参与者的观察(被称为「风格感知研究(Stylization Perceptual Studies)」)。这种评估结果可能会因参与者属性(比如年龄、职业)的不同而不同。尽管在定性评估方法上存在一定程度的不确定性,但该方法至少能够提供一些有关人们的神经艺术风格偏好的信息。而定量评估则侧重于在算法上的精确评估指标(比如时间复杂度)。&/p&&br&&p&在目前的神经风格迁移领域,生成式的神经方法已经成为了一个热门的主题,其中速度是工业应用所考虑的主要问题之一。但就我们所知,之前还没有研究在同样的实验设置下运行过所有当前最佳的生成式神经方法,并在定性和定量上对它们进行比较。因此,在这一章中,我们的目标是比较 5 种当前最佳的生成式神经方法,并且使用了 Gatys et al. 的描述式神经方法作为参考。&/p&&br&&p&实验设置。总体而来,实验使用了 10 张风格图像和 20 张内容图像。所有风格转换结果都是使用作者提供的代码 [43, 23, 27, 19, 8] 得到的,但 [14] 是例外。对于 [14],我们使用了一种有所修改的(见第 3 章)流行的开源代码 [22]。我们的实验中使用的所有这些代码的参数都是原作者对应论文提供的默认参数,但 [12, 9] 是例外。我们为 [12,9] 使用了作者提供的预训练的模型。对于我们实验中所有的生成式神经方法,所有测试内容图像在训练过程中都没有被观察过。&/p&&br&&p&&strong&5.1 定性评估&/strong&&/p&&br&&p&&em&&img src=&/v2-fe6b40899cedd5f5bfa2f4_b.png& data-rawheight=&684& data-rawwidth=&1001& class=&origin_image zh-lightbox-thumb& width=&1001& data-original=&/v2-fe6b40899cedd5f5bfa2f4_r.png&&图 3:定性评估的一些结果示例&/em&&/p&&br&&p&&em&&img src=&/v2-437a97c4ce99f6625bbf50aaf076bb00_b.png& data-rawheight=&206& data-rawwidth=&784& class=&origin_image zh-lightbox-thumb& width=&784& data-original=&/v2-437a97c4ce99f6625bbf50aaf076bb00_r.png&&表 1:对于图 3 中图像上的六种算法的平均风格排名分数(∈ [1, 6])&/em&&/p&&br&&p&&strong&5.2 定量评估&/strong&&/p&&br&&p&&em&&img src=&/v2-e981bddd6a_b.png& data-rawheight=&245& data-rawwidth=&689& class=&origin_image zh-lightbox-thumb& width=&689& data-original=&/v2-e981bddd6a_r.png&&表 2:在 256×256、512×512、 三种像素大小上的神经风格迁移算法的速度比较(硬件:NVIDIA Quadro M6000)&/em&&/p&&br&&p&&strong&6 应用&/strong&&/p&&br&&p&因为神经风格迁移的结果惊人,所以也带来了很多成功的业界应用并且也开始实现了商业回报。同时,也有一些应用论文调查了神经风格迁移技术在不同应用领域的应用方式 [4,25]。本节对这些应用进行了总结,并提出了一些潜在的用途。&/p&&br&&p&&strong&6.1 社交&/strong&&/p&&br&&p&&strong&6.2 辅助用户创作的工具&/strong&&/p&&br&&p&&strong&6.3 用于娱乐应用的生产工具&/strong&&/p&&br&&p&&strong&7 难题与可能的解决方案&/strong&&/p&&br&&p&神经风格迁移领域的进展惊人,在产业中也已有所应用。尽管目前的算法取得了惊人的结果,该领域仍有一些挑战与仍待解决的问题。在此章节中,我们将总结神经风格迁移领域内的问题,并讨论对应的解决方案。&/p&&br&&p&&strong&7.1 难题&/strong&&/p&&br&&ul&&li&&p&参数调整的问题&/p&&/li&&li&&p&笔触方向控制问题&/p&&/li&&li&&p&神经风格迁移中「快」与「更快」的问题&/p&&/li&&/ul&&br&&p&&em&&img src=&/v2-fade21ebbe58f_b.png& data-rawheight=&228& data-rawwidth=&953& class=&origin_image zh-lightbox-thumb& width=&953& data-original=&/v2-fade21ebbe58f_r.png&&图 4:带有画笔大小控制的描述性神经方法的高分辨率结果,以及不带画笔大小控制的生成式神经方法的高分辨率结果。&/em&&/p&&br&&p&&strong&7.2 可能的解决方案&/strong&&/p&&br&&p&参数调整问题的解决方案。在未来自动参数调整问题的研究中,我们分别讨论了对描述性神经方法和生成式方法的解决方案。对描述性神经方法,可能的一个解决方案是跟随 Risser 等人的方法,进一步的结合一些无梯度信息,比如损失的量级以及损失内的统计。另一个方向是从分类问题中使用的自动参数优化策略获取灵感(例如,Domhan 等人的研究 [11],Luo 的研究 [32])。&/p&&br&&p&对生成式神经方法,一种思路是研究不需要为不同风格训练单独模型的新方法(就像 [9]),同时还要保证结果的高质量。(也就是,突破速度、灵活性和质量之间的权衡)。然后参数调整的过程就不会特别耗费时间,而且把参数调整交给用户也可接受。此外,目前自动参数优化策略中的一些方法对生成式神经方法中的自动参数调整也会有帮助。&/p&&br&&p&对笔触方向控制问题的可能解决方案。目前的神经风格迁移算法不考虑对笔触方向的控制。相反,在非真实感绘制技术(NPR:Non-photorealistic Rendering)领域,对笔触方向控制有很好的研究 [39]。我们相信 NPR 领域中的一些思路可被借鉴来解决神经风格迁移中的方向问题。例如,Zhang 等人要求用户明确笔触方向的位置与方式 [49],因为不同的用户有不同的偏好。同样的思路可借鉴到神经风格迁移算法中,要求用户提前选择全局笔触方向。此外,结合神经风格迁移算法和 NPR 领域中指导笔触方向的策略(例如,[50] 中的向量场方法)是该问题的另一个潜在的解决方案。&/p&&br&&p&神经风格迁移中「快」与「更快」问题的解决方案。该研究方向的关键问题是如何突破速度、灵活性、质量三者的权衡。可能的一个解决方案是跟随 Chen 和 Schmidt 的研究 [9]。他们的算法是目前最有效的算法,但图片质量并不高。改进他们的方法所产生的风格迁移图像的质量是突破速度、灵活性、质量三者权衡的有潜力的方向。目前已有一些相关工作,比如 [51]。&/p&&br&&p&对神经风格迁移算法「快」与「更快」的笔触大小控制而言,思路类似于之前提到的笔触方向控制的可能解决方案。在 NPR 领域,有大量的研究人员在做笔触大小控制。若要进行回顾,我们推荐 [39] 中的章节 1。&/p&&br&&p&&strong&8 结论和未来工作&/strong&&/p&&br&&p&过去三年来,神经风格迁移已经持续成长为了一个蓬勃发展的研究领域。这一研究领域内越来越多的活动受到了科学挑战和工业需求的推动。而且在神经风格迁移领域内,研究者们也已经进行了数量可观的研究。这一领域内的关键进展见于表 3。总体而言,这篇概述提供了对神经风格迁移现有研究的广泛调研,覆盖了当前方法的类别、它们的改进和扩展、评估方法以及现有的挑战和对应的可能解决方案。此外,我们还概述了神经风格迁移的三个应用领域,包括社交、辅助用户创作的工具和用于娱乐应用的产品工具。&/p&&br&&p&&em&&img src=&/v2-6a155c01d401b81ac80faae_b.png& data-rawheight=&739& data-rawwidth=&808& class=&origin_image zh-lightbox-thumb& width=&808& data-original=&/v2-6a155c01d401b81ac80faae_r.png&&表 3:总结神经风格迁移领域内的当前进展&/em&&/p&&br&&p&未来研究神经风格迁移,有前景的方向主要集中在两个方面。一是解决前面提到的当前算法所面临的难题,即参数微调问题、笔触方向控制问题和神经风格迁移中「快」与「更快」的问题。对这些难题及其对应的可能解决方案的描述见于第 7 节。第二个有前景的方向是关注神经风格迁移的新扩展(比如,时尚风格迁移和字符风格迁移),在这个方向上已经有了一些初步的研究成果,比如最近 Yang et al. [47] 的关于文本效果迁移(Text Effects Transfer)的研究。这些有趣的扩展可能会变为未来的研究主题趋势,之后又可能会创造出新的相关领域。&/p&&p&选自&a href=&/?target=https%3A//arxiv.org/pdf/.pdf& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&arXiv&i class=&icon-external&&&/i&&/a& &b&机器之心编译&/b&&/p&
风格迁移是近来人工智能领域内的一个热门研究主题,此前各路媒体也报道了很多相关的研究。近日,来自浙江大学和亚利桑那州立大学的几位研究者在 arXiv 上发布了一篇「神经风格迁移(Neural Style Transfer)」的概述论文,对当前神经网络风格迁移技术的研究…。
都起开起开!看民科小王子如何用小学数学知识给你们讲明白什么叫傅里叶变换!
不懂频域时域?我们换个词,长和宽总看得懂了吧!不懂函数空间?长方形总可以理解吧!什么是傅里叶变换,那就是高级一点的乘法交换律!&br&&img src=&/b56fde61bfda0a57730ed9_b.jpg& data-rawwidth=&519& data-rawheight=&340& class=&origin_image zh-lightbox-thumb& width=&519& data-original=&/b56fde61bfda0a57730ed9_r.jpg&&OK,这是一个矩形,我们记长为a=4,宽为b=3,要计算这个矩形的面积(不准用小学二年级以上的数学),你们会怎么做?&br& 有三种方法: &br&1、一个一个数:1+1+1……=12 &br&2、按行分解成三行:4+4+4=12&br&3、按列分解成四列:3+3+3+3=12
是不是很简单?
我们进阶一点,按行分解成好多好多行,按列分解成好多好多列……&br&&img src=&/ded3eedf267c92f95cbc7_b.jpg& data-rawwidth=&549& data-rawheight=&421& class=&origin_image zh-lightbox-thumb& width=&549& data-original=&/ded3eedf267c92f95cbc7_r.jpg&&
还是刚才那个矩形!
(读者众:明明不一样大!
答主:朕说一样大就一样大!)
现在每小格边长变成了0.2,长度变为20格,宽度15格,此时一列的总面积变成了0.2×0.2=0.04,每列的面积变为0.04×15=0.6,每行面积为0.04×20=0.8,还用刚才的方法计算面积,&br&S=0.6+0.6+……(20个0.6)……=12 &br&或S=0.8+0.8+……(15个0.8)……=12 &br&以及……S=0.04+0.04+……(300个)……=12
聪明的你一定发现了,如果我们将小方格越分越细,那就变成了最简单的定积分了!而这三种方法也就变成了如下三种形式: &br&以长边积分:
&img src=&///equation?tex=S%28a%29%3D%5Cint_%7B0%7D%5E%7B4%7D+3da%3D12& alt=&S(a)=\int_{0}^{4} 3da=12& eeimg=&1&&&br&以宽边积分:&br&&img src=&///equation?tex=S%28b%29%3D%5Cint_%7B0%7D%5E%7B3%7D4db%3D12& alt=&S(b)=\int_{0}^{3}4db=12& eeimg=&1&&&br&以及一个一个数……
&img src=&///equation?tex=S%3D%5Cint_%7B%5COmega+%7D%5E%7B%7Dd%5COmega%3D12& alt=&S=\int_{\Omega }^{}d\Omega=12& eeimg=&1&&&br&回到我们的20格×15格的矩形,现在我们不是单纯的算面积,我们给每个格子里填入一些数字,让它变成一个矩阵
&img src=&/c70bddb52fb7d186ae105_b.jpg& data-rawwidth=&538& data-rawheight=&409& class=&origin_image zh-lightbox-thumb& width=&538& data-original=&/c70bddb52fb7d186ae105_r.jpg&&想要计算这个矩阵所有数字的和,怎么办?
还跟以前一样,我们可以把每列数字加起来,做成一个20元素的数列An,然后相加,
&img src=&///equation?tex=S_%7Bn%7D+%3D%5Csum_%7Bn%3D0%7D%5E%7B20%7D%7BA_%7Bn%7D+%7D+& alt=&S_{n} =\sum_{n=0}^{20}{A_{n} } & eeimg=&1&&
或者把每行数字加起来,做成15元素的数列Bn,再相加
&img src=&///equation?tex=S_%7Bn%7D%3D%5Csum_%7Bn%3D0%7D%5E%7B15%7D%7BB_%7Bn%7D%7D+& alt=&S_{n}=\sum_{n=0}^{15}{B_{n}} & eeimg=&1&&
或者依然一个一个加……
这三个值肯定是相等的。
如果把这个矩阵越分越细,就逐渐变为一个定义在矩形范围内的二元函数
&img src=&/cd5482cc_b.jpg& data-rawwidth=&1201& data-rawheight=&900& class=&origin_image zh-lightbox-thumb& width=&1201& data-original=&/cd5482cc_r.jpg&&设这个函数的为f(a,b),想要计算这个函数在定义域上的积分,依然可以沿用上面的方法:
先对b积分,则整个函数变成一个关于a的一元函数&br&&img src=&///equation?tex=g%28a%29%3D%5Cint_%7B%5Calpha+%7D%5E%7B%5Cbeta+%7D+f%28a%2Cb%29db& alt=&g(a)=\int_{\alpha }^{\beta } f(a,b)db& eeimg=&1&&&br&对b也一样 &br&&img src=&///equation?tex=h%28b%29%3D%5Cint_%7B%5Cxi+++%7D%5E%7B%5Ceta%7D+f%28a%2Cb%29da& alt=&h(b)=\int_{\xi
}^{\eta} f(a,b)da& eeimg=&1&&,(其中α,β为b的定义域,下同)则必然满足&img src=&///equation?tex=%5Cint_%7B%5Cxi+%7D%5E%7B%5Ceta+%7D+g%28a%29da%3D%5Cint_%7B%5Calpha+%7D%5E%7B%5Cbeta+%7Dh%28b%29db& alt=&\int_{\xi }^{\eta } g(a)da=\int_{\alpha }^{\beta }h(b)db& eeimg=&1&&&br&下面该说傅里叶变换了。没学过信号,我就用量子力学举例吧。
比如一个波函数&img src=&///equation?tex=%5CPhi%28x%2Cp%2Ct%29%3DAe%5E%7B+-i%5Cfrac%7BE%7D%7B%5Chbar%7Dt+%2Bi%5Cfrac%7Bp%7D%7B%5Chbar%7Dx%7D& alt=&\Phi(x,p,t)=Ae^{ -i\frac{E}{\hbar}t +i\frac{p}{\hbar}x}& eeimg=&1&&&br&当t=0的时候就变成了 &br&&img src=&///equation?tex=%5CPhi%28x%2Cp+%29%3DAe%5E%7Bi%5Cfrac%7Bp%7D%7B%5Chbar%7Dx%7D& alt=&\Phi(x,p )=Ae^{i\frac{p}{\hbar}x}& eeimg=&1&&&br& 看不懂没关系,你只要知道这就是一个关于x与p的二元函数,
如何计算它?跟上面一样,先对p积分,就得到一个关于x的一元函数,先对x积分,就得到一个关于p的一元函数,这两个函数在定义域上的积分必然相等
于是我们得到:
(注意这里定义域变成了正负无穷,也就是全实数域)
&img src=&///equation?tex=%5Cphi++%28x%29%3D%5Cint_%7B-%5Cinfty+%7D%5E%7B%5Cinfty%7D+%5CPhi+%28x%2Cp%29dp& alt=&\phi
(x)=\int_{-\infty }^{\infty} \Phi (x,p)dp& eeimg=&1&&&br&&img src=&///equation?tex=%5Cvarphi+%28p%29%3D%5Cint_%7B-%5Cinfty+%7D%5E%7B%5Cinfty%7D+%5CPhi+%28x%2Cp%29dx& alt=&\varphi (p)=\int_{-\infty }^{\infty} \Phi (x,p)dx& eeimg=&1&&&br&
他们俩在各自定义域上的积分也必然是相等的,等于原二元函数在全定义域的积分,记为&img src=&///equation?tex=S%3D%5Cint_%7B%5COmega+%7D+%5CPhi+d%5COmega+& alt=&S=\int_{\Omega } \Phi d\Omega & eeimg=&1&&&br&我们长方形的长宽ab,在这里也有了一个高大上的名字,坐标空间x和动量空间p。 &br&关键部分来了:
可以看到,在各自空间内,函数的值已经与另一个参数无关了,&img src=&///equation?tex=%5Cphi+%28x%29& alt=&\phi (x)& eeimg=&1&&中只含x,&img src=&///equation?tex=%5Cvarphi+%28p%29& alt=&\varphi (p)& eeimg=&1&&中也只含p。现在你大概可以明白坐标空间(类似信号中的时域)与动量空间(类似信号中的频域)的含义了吧?所谓求坐标空间的波函数,即当坐标参数等于某个值时,把该位置上所有可能的动量积分;而所谓求动量空间波函数,即取动量为某个定值,然后将具有该动量的所有位置参数进行积分,这种积分方式其实也就是开头所写的计算长方形面积的方式。这也就是为什么答主看到傅里叶变换的时候第一个想到的就是乘法交换律。&br&那傅里叶变换都是用来干嘛的呢?在通常情况下,我们并不能同时得到位置、动量两个空间的方程,可能只有其中一个,这时候,通过傅里叶变换就可以求出另一空间的方程。比如我们得到了&img src=&///equation?tex=%5Cphi++%28x%29& alt=&\phi
(x)& eeimg=&1&&,如何用它求&img src=&///equation?tex=%5Cvarphi+%28p%29& alt=&\varphi (p)& eeimg=&1&&?前面已经说过,所谓坐标空间波动方程不过是在某个确定的位置将所有可能的p取值的平面波相叠加,而不同p的取值则对应不同的系数。若p是离散的,方程写作&img src=&///equation?tex=%5Cphi++%28x%29%3D%5Csum_%7Bn%7D%5E%7B%7D%7BC_%7Bn%7D+e%5E%7B+i%5Cfrac%7Bp_%7Bn%7D+%7D%7B%5Chbar%7Dx+%7D%7D+& alt=&\phi
(x)=\sum_{n}^{}{C_{n} e^{ i\frac{p_{n} }{\hbar}x }} & eeimg=&1&&&br&若p的取值越发密集,上式逐渐形似积分形式,系数Cn变为连续函数&img src=&///equation?tex=u_%7Bx%7D+%28p%29& alt=&u_{x} (p)& eeimg=&1&&,数列写作如下形式&br&&img src=&///equation?tex=%5Cphi++%28x%29%3D%5Cint_%7B-%5Cinfty+%7D%5E%7B%5Cinfty%7D+u_x%28p%29++e%5E%7Bi%5Cfrac%7Bp+%7D%7B%5Chbar%7Dx+%7Ddp& alt=&\phi
(x)=\int_{-\infty }^{\infty} u_x(p)
e^{i\frac{p }{\hbar}x }dp& eeimg=&1&&&br&这两个方程代表了在坐标表象波函数里,每一个空间点对应的取值并不简简单单是一个值,而是后面跟了一长串不同的p所对应的函数值,即&img src=&///equation?tex=u_%7Bx%7D+%28p%29+e%5E%7Bi%5Cfrac%7Bp+%7D%7B%5Chbar%7Dx+%7Ddp& alt=&u_{x} (p) e^{i\frac{p }{\hbar}x }dp& eeimg=&1&&,因此我们便可以通过一定手段将每个坐标点上不同的p值取出来。也因为它们是波函数,即使被积分了,p的信息也蕴含在坐标空间x的函数里。&b&回头看波函数&img src=&///equation?tex=%5CPhi%28x%2Cp+%29%3DAe%5E%7Bi%5Cfrac%7Bp%7D%7B%5Chbar%7Dx%7D& alt=&\Phi(x,p )=Ae^{i\frac{p}{\hbar}x}& eeimg=&1&&,它是什么意思?意味着xp平面上每个点的函数值都是由A个&img src=&///equation?tex=e%5E%7Bi%5Cfrac%7Bp%7D%7B%5Chbar%7Dx%7D& alt=&e^{i\frac{p}{\hbar}x}& eeimg=&1&&叠加而成的,A是个跟x,p都相关的系数。而整个xp平面非常像一个密集的矩阵。&/b&&br&我们研究一下这个东西&img src=&///equation?tex=%5Cint_%7B-%5Cinfty+%7D%5E%7B%5Cinfty%7D+e%5E%7Bik%5Calpha++%7Dd%5Calpha& alt=&\int_{-\infty }^{\infty} e^{ik\alpha
}d\alpha& eeimg=&1&&它有什么特点。&br&当且仅当k=0的时候积分才不为0,并且&img src=&///equation?tex=%5Cfrac%7B1%7D%7B2%5Cpi%7D+%5Cint_%7B-%5Cinfty+%7D%5E%7B%5Cinfty%7D%5Cint_%7B-%5Cinfty+%7D%5E%7B%5Cinfty%7D+e%5E%7Bik%5Calpha++%7Dd%5Calpha+dk%3D+1& alt=&\frac{1}{2\pi} \int_{-\infty }^{\infty}\int_{-\infty }^{\infty} e^{ik\alpha
}d\alpha dk= 1& eeimg=&1&&,利用这个性质,我们将&img src=&///equation?tex=%5Cfrac%7B1%7D%7B2%5Cpi%7D+e%5E%7Bikx++%7D& alt=&\frac{1}{2\pi} e^{ikx
}& eeimg=&1&&乘入&img src=&///equation?tex=%5Cphi++%28x%29& alt=&\phi
(x)& eeimg=&1&&,&b&此时,坐标空间函数变成了&img src=&///equation?tex=%5Cfrac%7B1%7D%7B2%5Cpi%7D+e%5E%7Bikx++%7D%5Cphi++%28x%29%3D%5Cfrac%7B1%7D%7B2%5Cpi%7D%5Cint_%7B-%5Cinfty+%7D%5E%7B%5Cinfty%7D+u_%7Bx%7D+%28p%29+e%5E%7Bi%28%5Cfrac%7Bp+%7D%7B%5Chbar%7D+%2Bk%29x%7Ddp& alt=&\frac{1}{2\pi} e^{ikx
(x)=\frac{1}{2\pi}\int_{-\infty }^{\infty} u_{x} (p) e^{i(\frac{p }{\hbar} +k)x}dp& eeimg=&1&&&br&&/b&&br&接着对x进行积分,那么只有&img src=&///equation?tex=p++%2F%5Chbar%3D-k& alt=&p
/\hbar=-k& eeimg=&1&&的点在积分中会被体现出来,也就意味着在一连串&img src=&///equation?tex=+u_%7Bx%7D+%28p%29+e%5E%7Bi%5Cfrac%7Bp+%7D%7B%5Chbar%7Dx+%7Ddp& alt=& u_{x} (p) e^{i\frac{p }{\hbar}x }dp& eeimg=&1&&中,具有给定p值的函数值被“挑”出来了。&br&&br&&b&回头看开头的乘法交换律,答主特地在开头提到它,其实是因为它与傅里叶变换一样体现了一个“挑”的思想,即挑出特定的数字重新组合。大家回想一下小时候是怎么证明整数乘法交换律的?四组三个苹果相加,为什么就等于三组四个苹果相加?很简单,以四组三个苹果为例,我们可以在每组里给苹果标上号,分别标1,2,3,然后将每组1号苹果挑出来,相同的号码重新编为一组,正好是三组,每组四个。傅里叶变换能够挑出特定频率波函数,也正是体现了这种思想。&/b&&br&&br&经过计算可写成如下形式:&br&&img src=&///equation?tex=%5Cvarphi+%28p%29%3D%5Cfrac%7B1%7D%7B2%5Cpi+%7D%5Cint_%7B-%5Cinfty%7D%5E%7B%5Cinfty%7D++%5Cphi++%28x%29+e%5E%7Bi+%5Cfrac%7Bp%7D%7B%5Chbar%7D+x+%7D+dx& alt=&\varphi (p)=\frac{1}{2\pi }\int_{-\infty}^{\infty}
(x) e^{i \frac{p}{\hbar} x } dx& eeimg=&1&&&br&经简单整理之后动量空间与坐标空间波函数可作如下互相转换:&br&&img src=&///equation?tex=%5Cvarphi+%28p%29%3D%5Cfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%5Chbar%7D+%7D%5Cint_%7B-%5Cinfty%7D%5E%7B%5Cinfty%7D++%5Cphi++%28x%29+e%5E%7Bi+%5Cfrac%7Bp%7D%7B%5Chbar%7D+x+%7D+dx& alt=&\varphi (p)=\frac{1}{\sqrt{2\pi\hbar} }\int_{-\infty}^{\infty}
(x) e^{i \frac{p}{\hbar} x } dx& eeimg=&1&&&br&同理&br&&img src=&///equation?tex=%5Cphi++%28x%29%3D%5Cfrac%7B1%7D%7B%5Csqrt%7B2%5Cpi%5Chbar%7D+%7D%5Cint_%7B-%5Cinfty%7D%5E%7B%5Cinfty%7D%5Cvarphi+%28p%29e%5E%7B-i+%5Cfrac%7Bp%7D%7B%5Chbar%7D+x+%7D+dp& alt=&\phi
(x)=\frac{1}{\sqrt{2\pi\hbar} }\int_{-\infty}^{\infty}\varphi (p)e^{-i \frac{p}{\hbar} x } dp& eeimg=&1&&&br&至于&img src=&///equation?tex=e%5E%7Bi+%5Cfrac%7Bp%7D%7B%5Chbar%7D+x+%7D& alt=&e^{i \frac{p}{\hbar} x }& eeimg=&1&&与&img src=&///equation?tex=e%5E%7B-i+%5Cfrac%7Bp%7D%7B%5Chbar%7D+x+%7D& alt=&e^{-i \frac{p}{\hbar} x }& eeimg=&1&&其实并没有太大区别;只有当想要把变过来的函数变回去时,波函数的相位必须相反,才需要区分正负。&br&&b&感谢大家的鼓励与批评,事实上答主在提笔的时候并没有对这个问题想太多,一开始觉得很简单,真以为自己能用小学知识解释清楚,写到后面才发现还是有难点绕不开的,尤其是如何通俗地解释波函数正交归一性。答主写作的动机主要想把自己学习过程中最激动的那个时刻分享给大家,也就是偶然想到傅里叶变换与乘法交换律在内涵上的相似性。后面专业内容答主也没有自信写得比书本还好,大家若有兴趣,可以阅读专业书籍,当然若愿意与答主继续交流,答主也会非常高兴。&/b&
都起开起开!看民科小王子如何用小学数学知识给你们讲明白什么叫傅里叶变换!
不懂频域时域?我们换个词,长和宽总看得懂了吧!不懂函数空间?长方形总可以理解吧!什么是傅里叶变换,那就是高级一点的乘法交换律! OK,这是一个矩形,我们记长为a=4,宽为b…
&img src=&/f56ced0fef5ae0_b.jpg& data-rawwidth=&500& data-rawheight=&500& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&/f56ced0fef5ae0_r.jpg&&&p&(转载请注明出处,真的不费事)&/p&&p&已于更新,地址:&a href=&/wille/& class=&internal&&傅里叶分析之掐死教程(完整版)更新于 - 与时间无关的故事 - 知乎专栏&/a&&/p&我保证这篇文章和你以前看过的所有文章都不同,这是12年还在果壳的时候写的,但是当时没有来得及写完就出国了……于是拖了两年,嗯,我是拖延症患者……&br&&p&这篇文章的核心思想就是:&/p&&h2&要让读者在不看任何数学公式的情况下理解傅里叶分析。&/h2&&p&傅里叶分析不仅仅是一个数学工具,更是一种可以彻底颠覆一个人以前世界观的思维模式。但不幸的是,傅里叶分析的公式看起来太复杂了,所以很多大一新生上来就懵圈并从此对它深恶痛绝。老实说,这么有意思的东西居然成了大学里的杀手课程,不得不归咎于编教材的人实在是太严肃了。(您把教材写得好玩一点会死吗?会死吗?)所以我一直想写一个有意思的文章来解释傅里叶分析,有可能的话高中生都能看懂的那种。所以,不管读到这里的您从事何种工作,我保证您都能看懂,并且一定将体会到通过傅里叶分析看到世界另一个样子时的快感。至于对于已经有一定基础的朋友,也希望不要看到会的地方就急忙往后翻,仔细读一定会有新的发现。&/p&&br&&p&————以上是定场诗————&/p&&p&下面进入正题:&/p&&p&抱歉,还是要啰嗦一句:其实学习本来就不是易事,我写这篇文章的初衷也是希望大家学习起来更加轻松,充满乐趣。但是千万!千万不要把这篇文章收藏起来,或是存下地址,心里想着:以后有时间再看。这样的例子太多了,也许几年后你都没有再打开这个页面。无论如何,耐下心,读下去。这篇文章要比读课本要轻松、开心得多……&/p&&h2&一、嘛叫频域&/h2&&p&
从我们出生,我

我要回帖

更多关于 百度开发者平台 的文章

 

随机推荐