VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNTION(翻译)
0 - ABSTRACT
在这个工作中,我们研究了卷积网络的深度对于它在大规模图像识别设置上的准确率的效果。我们的主要贡献是对使用非常小的卷积核(3×3)来增加深度的网络架构进行彻底评估,这说明了通过将深度增加到16-19层能够比之前最好的业界水平更好。这些发现是我们参加ImageNet Challenge 2014的基础,在这个比赛中我们团队在定位和分类追踪任务上分别获得了第一和第二的名次。我们也表明了我们的模型可以很好的扩展到其他数据集上,并都达到了最佳的水平。我们已经将我们的两个效果最好的卷积网络模型开源,以此希望能够促进计算机视觉中深度视觉表达的更进一步的研究。
1 - INTRODUCTION
卷积网络(ConvNets)最近在大规模图像和视频识别上面取得了很大的成功,这可能得益于大型的开源图像库,例如ImageNet,以及高性能的计算系统,例如GPUs或者大规模分布式集群。特别是在深度视觉识别架构发展中扮演重要角色的ImageNet Large-Scale Visual Recognition Challenge (ILSVRC),从高维浅层特征编码到深度卷积网络,它为几代大规模图像分类系统提供了测试平台。
随着卷积网络在计算机视觉领域中的应用越来越广,越来越多人尝试在Krizhevsky等人提出的原始架构上进行改进从而获得更高的准确率。例如,ILSVRC-2013最好的参赛模型在第一个卷积层上使用了较小的接收窗口以及较小的步长。另一种改进方案是在增幅图像和它的几个尺寸上进行训练和测试网络。在本文中,我们关注了另一个卷积网络架构设计的重要方面——它的深度。为此,我们固定了网络架构中的其他参数,并且通过添加更多的卷积层有规则地增加网络的深度,因为沃恩所有层使用的是非常小的卷积核(3×3),因此这是可行的。
因此,我们提出了有着更高精度的卷积网络架构,这个架构不仅实现了在ILSVRC分类和定位任务中的最好效果,而且在其他图像识别数据集上也表现了优异的性能,即时只是用来作为一个相对简单框架的一部分(例如作为无需微调的线性SVM的深度特征分类)。我们开源了两个性能最好的模型来促进进一步的研究。
本文剩下的部分将被组织成如下几部分。在Sect. 2中,我们描述我们的卷积网络结构。Sect. 3将介绍图像分类任务的训练和评估的细节。Sect. 4将对在ILSVRC分类任务上的不同架构进行比较。Sect. 5总结这篇文章。为了文章的完整性,我们也在Appendix A部分描述和评估我们的ILSVRC-2014目标定位系统,并在Appendix B部分讨论了非常深的特征在其他数据集的泛化能力。最后,Appendix C部分包括了本文的主要修订记录。
2 - CONVNET CONFIGURATIONS
为了公平的衡量由增加的卷积层深度所带来的性能提高,我们所有的卷积层都采用相同的方式设计,这由Ciresan等人(2011)Krizhevsky等人(2012)提出。在这个部分,我们首先描述我们卷积网络结构中的通用层(Sect. 2.1),然后描述在评估中具体的配置细节(Sect. 2.2)。在Sect. 2.3中讨论了我们的设计选择并且与向前最好的技术进行比较。
2.1 - ARCHITECTURE
在训练阶段,卷积网络的输入为固定的244×244尺寸的RGB图像。我们唯一做的预处理是对每一个像素减去训练集中的RGB均值。图像通过堆叠起来的卷积层,这些层我们使用了非常小的接收域:3×3(这是用来获取左右、上下以及中心信息的最小尺寸)。在我们的一种配置中,我们也使用了1×1卷积过滤器,这可以看成对于输入通道的一个线性变换(其后面接一个非线性变换)。卷积的步长固定为1像素;卷积层的空间填充(spatial padding)用来保持卷积后的图像的空间分辨率,对于3×3卷积核填充为1个像素。空间池化包含5个最大池化层,它们接在部分卷积层后面(并不是全部卷积层都后接有池化层)。最大池化层是通过2×2像素的窗口,步长为2来表现的。
在堆叠卷积层(在不同架构有着不同的深度)之后接着三个全连接层:前面两个全连接层有4096个通道,第三个用来做1000类的ILSVRC的分类因此包含1000个通道(每一个类别一个通道)。最后一层是soft-max层。全连接层的配置在所有网络中是一致的。
全部的隐藏层都是用非线性修正(ReLU)。注意到我们的网络(除了一个)都不包含了局部响应标准化(LRN):这将在Sect. 4中展示,这个标准化并不会提高网络在ILSVRC数据集上的表现,但是反而增加了内存的消耗以及计算时间。在适用的情况下,LRN层的参数都是那些(Krizhevsky等人在2012提出的)。
2.2 - CONFIGURATIONS
本文所评估的卷积网络配置如表1所示,每一列代表一种网络。接下来我们将分别称它们为(A-E)。所有网络的配置遵循Sect. 2.1的通用设计,它们只有在深度上面不一样:从网络A中有11个权重层(8个卷积层和3个全连接层)到网络E中有19个权重层(16个卷积层和3个全连接层)。卷积层的宽度(通道的数量)非常小,从第一层的64开始,没经过一个最大池化层增加一倍,直到达到512。
表1:卷积网络配置(以列表示)。从A到E网络结构的深度逐步增加,同时加入了更多的层(加入的层用粗体表示)。卷积层的参数表示为"conv<receptive field size>-<number of channels>"。为了简洁,ReLU激活函数没有显示。
在表2,我们展示了每一种配置的参数数量。经过网络很深,我们网络的权重数量并不比一个更浅但有更大卷积层宽度和接收域的网络的权重数量多。
表2:参数数量(单位:百万)
2.3 - DISCUSSION
我们的卷积网络架构与ILSVRC-2013和ILSVRC-2013中表现最好的模型很不一样。我们在整个网络中使用了很小的3×3接收域,而不是在第一层卷积使用相对较大的接收域(11×11以及步长为4)或者7×7和步长为2,这样做可以对输入的每一个像素都进行卷积(步长为1)。很容易发现,两个3×3卷积层堆叠(中间没有空间池化)相当于一个5×5的有效接收域;3个堆叠的话则相当于7×7的有效接收域。所以为何我们要使用三个3×3卷积层而不是一个简单的7×7卷积层呢?首先,我们使用三个非线性修正层而不是简单的一个,这使得决策函数变得更具判别性。其次,我们减少了参数的数量:假设三个3×3卷积层的输入和输出都有C个通道,那么这个堆叠起来的网络有$3(3^2C^2)=27C^2$个权重;同时,一个单一的7×7卷积层将需要$7^2C^2=49C^2$个参数,也就是相对增加了81%。这相当于在7×7卷积核上强加了一个正则化,迫使它们通过3×3的滤波器来分解(中间有非线性的加入)。
1×1卷积层的使用(架构C,表1)是在不影响卷积层接收域的情况下增加非线性决策函数的一种方法。虽然在我们的情况下,1×1卷积层本质上相当于到相同空间维度的一个线性投影(输入和输出的通道数是一样的),但是修正函数使其加入了非线性。值得注意的是,1×1卷积层最近被Lin等人使用在"Network in Network"架构中。
之前Ciresan等人(2011)使用过小尺寸的卷积核,但是它们的网络远没有我们的深,并且他们也没有在大规模ILSVRC数据集上进行评估。Goodfellow等人(2014)在街道数值识别任务中应用了深度卷积网络(11个权重层),并且证明了增加的深度使得模型产生更好的性能。Szegedy等人(2014)提出的GoogLeNet,ILSVRC-2014分类任务的第一名,区分于我们的工作,其有独立的方向研究,但是相似的是我们都是基于非常深的卷积网络(22个权重层)以及小的卷积核(除了3×3,他们还使用了1×1以及5×5卷积)。他们的网络拓扑比我们的更加复杂,并且为了降低计算量,其特征图的空间分辨率在第一层下降非常严重。Sect. 4.5将会展示我们的模型在单一网络分类准确率上优于GoogleNet。
3 - CLASSIFICATION FRAMEWORK
在前面的部分我们展示了我们网络配置的细节。在这个部分,我们将描述用于分类的卷积网络训练和评估的细节。
3.1 - TRAINING
卷积网络训练过程基本遵循Krizhevsky等人(2012)(除了从多尺度训练图像上采样裁剪的输入图像,稍后会做解释)。也就是说,通过使用含动量的最小批量梯度下降(基于反向传播)优化多元逻辑回归来对模型进行训练。其中batch size设置为256,momentum为0.9。训练将通过权值衰减进行调整($L_2$惩罚系数设置为$5\times 10^{-4}$以及对前面两个全连接层执行dropout来进行调整(dropout的比率设置为0.5)。学习率被初始化为$10^{-2}$,而后当验证集的准确率停止提高的时候,将学习率除以10。学习率总共降低了3次,训练一共进行了370K次迭代(74个epoch)。我们猜测,尽管与Krizhevsky等人(2012)相比我们的网络有着更大数目的参数以及更深的深度,当我们的网络只需要更少的epoch来收敛,这得益于(a)更深的深度和更小的卷积核尺寸隐式地增强了正则化;(b)对某些层进行了预初始化。
网络权重的初始化时非常重要的,因为不合适的初始化由于深度网络梯度的不稳定性而会阻碍网络的学习。为了避开这个问题,我们从训练配置A(表1)开始,它足够浅以使得能够使用随机初始化进行训练。然后,当训练更深的架构的时候,我们使用网络A的相应网络层来初始化开始的四个卷积层和后面的三个全连接层(中间层采用随机初始化)。我们对于与初始化层的学习率不进行降低,允许它们(有于初始化的参数?)在训练过程中进行改变。对于随机初始化,我们从均值为$0$以及方差为$10^{-2}$的正态分布中对权重进行采样。偏置项将被初始化为$0$。值得注意的是,在文章提交后我们发现可以使用Glorot & Bengio(2010)中的随机初始化程序来对权重进行初始化而不需要进行预训练。
为了获得固定的244×244尺寸的卷积网络输入图片,将从尺寸放缩过后的训练图像上进行随机裁剪(每一张图像的每一个SGD迭代时候裁剪一次)。为了进一步增强训练集,裁剪图片进行随机的水平翻转以及随机的RGB颜色转换。训练图像的尺寸放缩将在后面部分进行解释。
Training image size 让S表示经过各向同性缩放的训练图像的最小边,卷积网络的输入图像就是从中裁剪的(我们也将S作为训练尺寸)。当裁剪图象的尺寸固定为244×244时,原则上S可以取任何不小于244的值:如果S=244,裁剪图象将会获取整幅图像的统计信息,可以完全覆盖训练图像的最小边;对于S>>244,裁剪图片对应图像的一部分,包括了一个小的对象或者对象的一部分。
我们考虑两种方法来设置训练尺寸S。第一种是固定S,这针对单尺度训练(注意到,在采样的裁剪图像内的内容仍然能够表示多尺度图像的统计信息)。在我们的实验中,我们评估了两种固定尺寸的模型:S=256(这个尺寸在以往的研究中很常用到)以及S=384.给定卷积神经网络一种配置,我们首先使用S=256训练网络。为了加快S=384网络的训练速度,网络的权重采用S=256预训练的权重进行初始化,并且我们使用了一个更小的学习率$10^{-3}$。
第二种设置S的方法是多尺度训练,每一张训练图像都单独使用从$[S_{min},S_{max}]$(我们使用$S_{min}=256$以及$S_{max}=512$)随机抽样的S来进行尺寸放缩。因为图像中的物体可能是各种尺寸的,这种做法对于训练是有利的。这同样可以看成是通过尺寸抖动(scale jittering)来进行训练集增强,使得一个单一模型能够被训练来识别各种尺寸的对象。出于速度原因的考虑,我们训练多尺度模型是通过使用固定的S=384的预训练的有相同配置的单一尺度模型的所有层进行微调。
3.2 - TESTING
在测试的时候,给定一个训练好的卷积网络以及输入图像,由以下方法进行分类。首先,输入图像被各向同性放缩到预定义的最小图像边,设为Q(我们也将此称为测试尺寸)。我们注意到Q并不需要跟训练尺寸S相等(Sect. 4将会展示对于同一个S采用多个不同值的Q将会提高性能)。然后,根据Sermanet等人(2014)中的方法将网络密集地应用到经过尺寸放缩的测试图像上。也就是将全连接层转换成卷积层(第一个全连接层转换成7×7卷积层,最后两个全连接层转换为1×1卷积层)。再将得到的全卷积网络应用到整幅图片(未裁剪)。输出是一个分类得分图,通道的数量和类别的数量相同,空间分辨率随输入图像的尺寸而变化。最后,为了获得固定尺寸的分类得分向量,将分类得分图进行空间平均(求和池化)。我们也通过水平翻转图像来增强测试集;在原始图像和翻转图像上的soft-max分类概率的平均值作为这幅图像的最终得分。
由于测试阶段在整幅图像上应用了全卷积网络,因此没必要对图像进行多个裁剪采样,因为网络对每个裁剪的图像进行重新计算会使得效率降低。同时,正如GoogLeNet,使用大量的裁剪图象可以提高准确率,因为和全卷积网络相比,它能生成关于输入图像更好的采样。同样地,多重裁剪评估与密集评估由于不同的卷积边界条件而是互补的:当在裁剪图象上应用卷积网络时,卷积特征图用0填充,而使用密集评估时,对相同裁剪图形的填充自然而然的来自图像邻近的部分(由于卷积和空间池化),这大大增加了网络整体的接收域,所以更多的信息被捕获。虽然我们认为在实践中多重裁剪带来的计算时间不能成为准确率上收益的理由,但是作为参考,我们仍然在评估时对每个尺寸使用了50个裁剪图象(5×5个规则网络以及它们的翻转),3种尺寸一共150张图像,这和GoogLeNet中使用4种尺寸和144个剪裁图像是由相比性的。
3.3 - IMPLEMENTATION DETAILS
我们的实现来源于开源的C++ Caffe工具包(2013年12月推出的),但包含了一些有意义的修改,使得我们能够在安装在单个系统中的多个GPU上进行训练和评估,也能在多个尺寸上(如上所述)对完整尺寸(没有裁剪)的图片进行训练和评估。多GPU训练利用呢数据的平行性,通过将每一个批次的图片分成几个GPU批次,在每个GPU上进行并行处理。在GPU批次梯度计算之后,将它们平均就获得了整个批次的梯度。梯度计算在GPU之间是同步的,所以结果与只在一个GPU上训练是一致的。
最近提出了更加复杂的方法去加速卷积网络训练,它们实现了对于网络不同层的模型和数据平行,我们发现我们的概念基于单个GPU是比已经提出的在4-GPU系统上提供3.75倍加速的方法更加简单。在配备四个NVIDIA Titan Black GPU系统上,根据架构训练一个简单的网络需要花费2-3周的时间。
4 - CLASSIFICATION EXPERIMENTS
Dataset 在本部分,我们介绍了上述的卷积网络架构在ILSVRC-2012数据集上的图像分类结果(用于ILSVRC 2012-2014挑战)。这个数据集包括了1000个类别的图像,并且它倍划分为三个集合:训练集(130万张图片),验证集(5万张图片)以及测试集(留有标签的10万张图片)。分类性能是通过两个指标进行评估的:top-1错误以及top-5错误。前者是多分类错误,即不正确分类图像的比例;后者是ILSVRC中的主要评估标准,它通过计算图像真实类别不在top-5预测类别的比例。
对于大多数实验,我们使用验证集当作测试集。在测试集上我们也做了一些实验并且提交到官方ILSVRC服务器上作为“VGG”小组在ILSVRC-2014比赛的提交结果。
4.1 - SINGLE SCALE EVALUATION
我们首先使用Sect. 2.2中描述的网络层配置对单个卷积网络模型在单尺度上的性能进行了评估。测试图片大小被设置为:对于固定的$S$,有$Q=S$,而对于抖动的$S \in [S_{min}, S_{max}]$,有$Q=0.5(S_{min}+S_{max})$。结果如表3所示。
表3:单一测试尺度的卷积网络性能
首先,我们注意到使用局部响应归一化(A-LRN网络)与没有使用任何归一化层的模型A相比没有任何改善。我们因此对于更深层的架构(B-E)中不采用归一化。
其次,我们发现随着卷积网络深度的加深,分类错误在减小:模型A的11层到模型E的19层。尤其值得注意的是,尽管有相同深度,结构C(包含三个1×1卷积层)的效果比结构D(在整个网络中使用3×3卷积层)更差。这表明加入的额外非线性层确实有所帮助(C比B好),同时使用具有非平凡感受野的卷积核来捕获空间上下为信息也显得重要(D比C好)。我们架构的错误率当达到19层深度的时候已经饱和了,但是如果有更大的数据集,更深的网络可能会表现出更好的性能。我们将网络B与具有5×5卷积层的浅层网络进行比较,浅层网络可以通过采用单个5×5卷积层代替网络B中的一对3×3卷积层(这在Sect. 2.3中解释了是具有相同接收域的)。浅层网络的top-1错误比例比网络B高了7%(在中心裁剪的图像上),这证实了一个具有小卷积核的深层网络比一个具有大卷积核的浅层网络更优。
最后,训练过程中的尺寸抖动($S \in [256;512]$)使得相比于固定最小边尺寸($S=256$或者$S=384$)可以得到更好的结果,虽然在测试时采用的是单一尺寸。这证明了通过尺寸抖动进行的训练集增强确时有助于捕获多尺度图像统计信息。
4.2 - MULTI-SCALE EVALUATION
在单尺度上评估卷积网络模型之后,我们现在评估测试时候加入尺寸抖动的效果。这包含了在一张测试图像的几个放缩版本上运行模型(对应于不同的$Q$值),然后对所得到的所有类别后验取平均。考虑到训练和测试的尺寸的巨大差异会导致性能的下降,当模型采用固定$S$训练时,采用三个接近于训练尺寸的测试图片尺寸进行评估:$Q={S-32,S,S+32}$。同时,在训练时候的尺寸抖动允许网络在测试时应用于更广的尺寸范围,所以使用变量$S \in [S_{min};S_{max}]$训练的模型可以在更大的尺度范围上$Q={S_{min},0.5(S_{min}+S_{max}),S_{max}}$进行评估。
结果如表4所示,测试时的尺寸抖动使得性能得到了提高(与在统一尺度上相同模型的评估进行比较,见于表3).如前面所述,最深的结构(D和E)表现得最好,并且尺寸抖动优于使用单一固定的最小边$S$进行训练。我们最好的单一网络在验证集上的top-1/top-5 error为24.8%/7.5%(在表4中用粗体突出显示)。在测试集上,结构E在top-5 error达到了7.3%的效果。
表4:多测试尺度的卷积网络性能
4.3 - MULTI-CROP EVALUATION
在表5中我们比较了稠密的卷积网络评估与多裁剪图象评估(细节参见Sect. 3.2)。我们还通过平均其soft-max输出来评估两种评估技术的互补性。 可以看出,使用多裁剪图象表现比稠密评估好一点,并且这两种方法确实是互补的,因为它们的组合优于其中的任意一种。如上所述,我们假设这是由于卷积边界条件的不同处理。
表5:卷积网络评估技术的比较。在所有的实验中,训练尺度S从[; ]中采样,因此三个测试尺度Q为:{, , }
4.4 - CONVNET FUSION
到目前为止,我们评估了独立的卷积网络模型的性能。在这个部分的实验,我们通过对soft-max分别后验进行平均来综合几个模型的输出。由于模型之间的互补性,这样做提高了性能,并且在2012年和2013年的ILSVRC的最好提交中被使用。
结果如表6所示。在ILSVRC提交的时候我们只训练了单尺度网络,以及一个多尺度模型D(只是对全连接层进行微调而不是所有网络层)。由此生成的7个网络的综合效果在ILSVRC的测试上有7.3%的错误比率。在提交之后,我们考虑了只用两个最好性能的多尺度网络(结构D和E)的综合效果,使用稠密时可以将错误比率降低到7.0%,而使用稠密和多裁剪图象综合评估时可以将错误比率降低到6.8%。作为参考,我们最好性能的单一模型达到7.1%的错误比率(表5中的模型E)。
4.5 - COMPARISON WITH THE STATE OF THE ART
最后,我们在表7中将我们的结果与当前最好的技术做比较。在ILSVRC-2014挑战赛的分类任务上,我们的“VGG”团队使用了7个模型的综合使得测试错误比率为7.3%从而获得了第二名。在提交之后,我们通过使用2个最好模型的综合将我们的错误率降低到6.8%。
从表7可以看出,我们的非常深的卷积网络显著优于前一代在ILSVRC-2012和ILSVARC-2013挑战赛中表现最好的模型。我们的结果对于分类任务获胜者(具有6.7%错误比率的GoogLeNet)也具有竞争力,并且大大优于ILSVRC-2013的获胜者Clarifai的提交,其使用外部训练数据取得11.2%的错误比率以及不适用外部训练数据取得11.7%的错误比率。显著地是,考虑到我们的最好结果仅仅是通过综合两个模型——明显少于大多数的ILSVRC提交。在单一网络性能方面,我们的模型实现了最好的结果(7.0%的测试错误比率),超过单一GoogLeNet有0.9%。值得注意的是,我们没有偏离LeCun等人经典的卷积网络架构,但通过大幅度增加其深度而改善了它。
表7:在ILSVRC分类任务上与当前最好的技术进行比较。我们的模型被称为“VGG”。显示的都是没有使用外部训练数据的结果。
5 - CONCLUSION
在这项工作中,我们对大规模图像分类评估了非常深的卷积网络(最多19个权重层)。已经证明,深度是有利于分类精度,并且大幅度加深卷积网络架构的深度可以在ImageNet挑战赛数据集上取得最佳的性能。在附录中,我们还展示了我们的模型可以很好的泛化到各种而言的任务以及数据集上,可以匹敌或者超越更复杂的由不深的图像表示所构建的识别流程。我们的结果再次证实了深度在视觉表示中的重要性。
ACKNOWLEDGEMENTS
这项工作得到ERC授权编号no. 228180的支持。我们非常感谢NVIDIA公司为此研究馈赠的GPU支持。
VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNTION(翻译)的更多相关文章
- 2014-VGG-《Very deep convolutional networks for large-scale image recognition》翻译
2014-VGG-<Very deep convolutional networks for large-scale image recognition>翻译 原文:http://xues ...
- VGGNet论文翻译-Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition Karen Simonyan[‡] & Andrew Zi ...
- Very Deep Convolutional Networks for Large-Scale Image Recognition
Very Deep Convolutional Networks for Large-Scale Image Recognition 转载请注明:http://blog.csdn.net/stdcou ...
- Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition Kaiming He, Xiangyu Zh ...
- 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)
Spatial pyramid pooling in deep convolutional networks for visual recognition 作者: Kaiming He, Xiangy ...
- SPPNet论文翻译-空间金字塔池化Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
http://www.dengfanxin.cn/?p=403 原文地址 我对物体检测的一篇重要著作SPPNet的论文的主要部分进行了翻译工作.SPPNet的初衷非常明晰,就是希望网络对输入的尺寸更加 ...
- 《DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks》研读笔记
<DSLR-Quality Photos on Mobile Devices with Deep Convolutional Networks>研读笔记 论文标题:DSLR-Quality ...
- 深度学习论文翻译解析(九):Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
论文标题:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 标题翻译:用于视觉识别的深度卷积神 ...
- 论文笔记:(2019CVPR)PointConv: Deep Convolutional Networks on 3D Point Clouds
目录 摘要 一.前言 1.1直接获取3D数据的传感器 1.2为什么用3D数据 1.3目前遇到的困难 1.4现有的解决方法及存在的问题 二.本文idea 2.1 idea来源 2.2 初始思路 2.3 ...
- VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 这篇论文
由Andrew Zisserman 教授主导的 VGG 的 ILSVRC 的大赛中的卷积神经网络取得了很好的成绩,这篇文章详细说明了网络相关事宜. 文章主要干了点什么事呢?它就是在在用卷积神经网络下, ...
随机推荐
- operator new和operator delete
从STL源码剖析中看到了operator new的使用 template<class T> inline void _deallocate(T* buffer) { ::operator ...
- Linux下学习摄像头使用
刚接触Linux硬件驱动有关的项目,配置摄像头经历的一些操作 (这篇文章是刚接触Linux下V4L时作为记录记下的,感觉只有几个命令还有参考作用) 一 确定摄像头种类 确定是否符合UVC标准协议,一般 ...
- php mkdir No such file or director问题
有时使用mkdir创建目录时会出现 No such file or director这样的错误,导致这个错误的原是 比如你要创建目录 a\b\c目录,但是创建时父目录b也不存在时就会出现这样的问题. ...
- lucene和solr的区别(六)
Lucene是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言).Lucene的 ...
- docker 基础之镜像加速
国内访问 Docker Hub 有时会遇到困难,此时可以配置镜像加速器 对于使用 systemd 的系统,用 systemctl enable docker 启用服务后,编辑 /etc/systemd ...
- SQL语法基础之ALTER语句
SQL语法基础之ALTER语句 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看ALTER的帮助信息 mysql> ? ALTER Many help items fo ...
- SQL Server 表值函数
表值函数还是很有意思的,我现在想实现一个功能.就是我查询出来的内容,我要对结果进行再次查询,也要输入参数,我想了想 1.存储过程 不能对执行后的结果进行再次查询,需要创建临时表,太麻烦 2.视图 ...
- 11.享元模式(Flyweight Pattern)
面向对象的代价 面向对象很好地解决了系统抽象性的问题,同时在大多数情况下,也不会损及系统的性能.但是,在某些特殊的应用中下,由于对象的数量太大,采用面向对象会给系统带来难以承受的内存开销.比如: ...
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] 学习
http://www.cnblogs.com/jjg0519/p/6707513.html
- Hadoop — Yarn原理解析
1. 概述 Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台:而MapReduce等运算程序则相当运行于操作系统之上的应用程序. 2. YARN的重要概念 ...