卷积神经网络

图片理解引擎算法实现简介

匿名 (未验证) 提交于 2019-12-03 00:30:01
本文来自 网易云社区 前言 基于文字的图片检索目前已经很成熟,但在很多情况下并不能满足用户的需求。比如,用户向在大街上看到别人拎了一个很漂亮的包包,也产生购买冲动,所以拍下了这个包包的照片,根据这幅照片找到这个包包的销售价格和商家。再比如,用户偶然看到一些不错的图片,想找到相同或相似的图片。再比如,人脸识别,通过图片获取该图片的内容信息。这些情况下,传统的图片搜索引擎无能为力。 一种基于图片内容的图片理解技术就非常必要了,图片理解引擎基本代表了图片检索和识别的主流技术。图片理解的目标是让计算机对图片内容进行准确完善的表述,目前这个目标还比较遥远,但是在其他方面图片理解已经有了较广泛的应用。目前图片理解引擎的主要应用场景有: 1 人脸理解; 2 商品或物体搜索。目前相似图片搜索引擎有: TinEye , Google , Baidu (百度识图)等等。商品图片搜索引擎有 Like (被 Google 收购), Ebay , Amazon ,淘淘搜等等。人脸理解方面代表的公司有 Google , Facebook 等。可见,目前主流的互联网公司均在图片理解方面进行了大量的投入。这些下面主要介绍下我在针对这三个方面所做的工作进展情况,也欢迎感兴趣同学一起讨论。 涉及的技术简介 图片理解,通常要对图片进行特征提取,利用这些特征对图片内容进行描述

卷积神经网络理解

匿名 (未验证) 提交于 2019-12-03 00:28:02
本文转载自这篇文章 为什么要用神经网络? 对于一个分类任务,在用机器学习算法来做时,首先要明确feature和label,然后把这个数据”灌”到算法里去训练,最后保存模型,再来预测分类的准确性。但是这就有个问题,即我们需要实现确定好特征,每一个特征即为一个维度, 特征维度过少,我们可能无法精确的分类出来,即我们所说的欠拟合,如果特征维度过多,可能会导致我们在分类过程中过于注重某个特征导致分类错误,即过拟合。 这就导致我们在特征工程上需要花很多时间和精力,才能使模型训练得到一个好的效果。 然而神经网络的出现使我们不需要做大量的特征工程,譬如提前设计好特征的内容或者说特征的数量等等,我们可以直接把数据灌进去,让它自己训练,自我“修正”,即可得到一个较好的效果。 前面说了很多优点,这里就不多说了,简单说说缺点吧。我们试想一下如果加深我们的网络层,每一个网络层增加神经元的数量,那么参数的个数将是M*N(m为网络层数,N为每层神经元个数),所需的参数会非常多,参数一多,模型就复杂了,越是复杂的模型就越不好调参,也越容易过拟合。此外我们从神经网络的反向传播的过程来看,梯度在反向传播时,不断的迭代会导致梯度越来越小,即 梯度消失的情况,梯度一旦趋于0,那么权值就无法更新,这个神经元相当于是不起作用了,也就很难导致收敛。 尤其是在图像领域,用最基本的神经网络,是不太合适的。 三个基本层 卷积层

转置卷积、反卷积、小数步长卷积

匿名 (未验证) 提交于 2019-12-03 00:28:02
Transposed Convolution, Fractionally Strided Convolution or Deconvolution 转载自: https://buptldy.github.io/2016/10/29/2016-10-29-deconv/ 最近才知道反卷积就是转置卷积,查了查资料,觉得这篇博客写的很不错。 反卷积(Deconvolution)的概念第一次出现是Zeiler在2010年发表的论文Deconvolutional networks中,但是并没有指定反卷积这个名字,反卷积这个术语正式的使用是在其之后的工作中(Adaptive deconvolutional networks for mid and high level feature learning)。随着反卷积在神经网络可视化上的成功应用,其被越来越多的工作所采纳比如:场景分割、生成模型等。其中反卷积(Deconvolution)也有很多其他的叫法,比如:Transposed Convolution,Fractional Strided Convolution等等。 这篇文章的目的主要有两方面: 1. 解释卷积层和反卷积层之间的关系; 2. 弄清楚反卷积层输入特征大小和输出特征大小之间的关系。 卷积层大家应该都很熟悉了,为了方便说明,定义如下: - 二维的离散卷积( N = 2 N = 2

常见的卷积神经网络

匿名 (未验证) 提交于 2019-12-03 00:27:02
1.LeNet 点击见详细描述 1994年由卷积网络之父提出 LeNet网络除去输入输出层总共有六层网络,卷积核都是5*5的,stride=1,池化都是平均池化: conv->pool->conv->pool->conv(fc)->fc 2.AlexNet 2012年,Imagenet比赛冠军。是神经网络在低谷期的第一次发声,极大程度推动了深度学习的发展。 AlexNet的结构及参数如上图所示,是8层网络结构(忽略激活,池化,LRN,和dropout层),有5个卷积层和3个全连接层,第一卷积层使用大的卷积核,大小为11*11,步长为4,第二卷积层使用5*5的卷积核大小,步长为1,剩余卷积层都是3*3的大小,步长为1。激活函数使用ReLu(虽然不是他发明,但是他将其发扬光大),池化层使用重叠的最大池化,大小为3*3,步长为2。在全连接层增加了dropout,第一次将其实用化。 (1)relu激活函数在层数较深时效果比sigmoid好 (2)drop out 降低过拟合,效果好,这算是一个trick吧 (3)步长设置比池化核小,增加特征丰富性 (4)多个LRN就提高0.1%,真是可有可无,好像现在用的也比较少。 (5)由于当时显卡性能在现在看来十分辣鸡,不能满足神经网络训练要求,于是结构被分成两个并行部分 (6)数据集扩增,防止过拟合。 3.VGGNet

AlexNet

匿名 (未验证) 提交于 2019-12-03 00:27:02
AlexNet是较早期的一个卷积神经网络,由于其在ImageNet比赛中的出色表现(top1与top5的error rate分别为37.5%与17%),也掀起了学术界对深度学习的研究热潮,下面结合AlexNet的论文,对AlexNet进行简单的总结,有不足的地方,欢迎指正。 AlexNet为8层结构,其中前5层为卷积层,后面3层为全连接层,学习参数6千万个,神经元约有650,000个。 AlexNet在两个GPU同时训练完成。 如图所示,AlexNet第2、4、5层均是与前一层自己GPU内连接,第3层是与前面两层全连接,全连接层是2个GPU全连接。 RPN层在第1、2个卷积层后。 Max pooling层在RPN层以及第5个卷积层后。 ReLU在每个卷积层以及全连接层后。 卷积核大小数量:(由此也可以看出,第二层连接2个GPU其他没有) conv1: 96 11*11*3 conv2: 256 5*5*48 conv3: 384 3*3*256 conv4: 384 3*3*192 conv5: 256 3*3*192 AlexNet的训练数据主要采用ILSVRC2010数据集,其为ImageNet的子集,包含1000类,共1.2million训练图像,50,000验证集,150,000的测试集。 alexNet对于数据的处理方法如下: 初步处理 首先将不同分辨率图像变换到256

卷积神经网络的网络结构――GoogLeNet

匿名 (未验证) 提交于 2019-12-03 00:26:01
《Going deeper with convolutions》 2014,Google,GoogLeNet(向早期的LeNet致敬),Inception V1 Google Inception Net首次出现在ILSVRC 2014的比赛中(和VGGNet同年),就以较大的优势取得了第一名。它最大的特点是控制了计算量和参数量的同时,获得了非常好的分类性能―top5的错误率6.67%。Inception V1有22层深,比AlexNet的8层或者VGGNet的19层还要更深,但其计算量和参数量仅为AlexNet的1/12,却可以达到远胜于AlexNet的准确率。 (1)Inception V1降低参数量的目的有两点,第一,参数越多模型越庞大,需要供模型学习的数据量就越大,而目前高质量的数据非常昂贵;第二参数越多,耗费的计算资源也会更大。 (2)Inception V1参数少但效果好的原因除了模型层数更深、表达能力更强外,还有两点:一是去除了最后的全连接层,用全局池化层(即将图片尺寸变为1*1)来取代它。全连接层几乎占据了AlexNet或VGGNet中90%的参数量,而且会引起过拟合,去除全连接层后模型训练更快并且减轻了过拟合。二是Inception V1中精心设计的Inception Module提高了参数的利用效率。 1.动机和思考: 一般来说

从LeNet-5到NasNet

匿名 (未验证) 提交于 2019-12-03 00:25:02
LeNet-5 : input:输入图片,32*32像素; C1:5*5卷积核,生成6个feature maps,共需要(6*5*5 + 6)=156个参数; S2:2*2个像素相加,然后乘以一个参数,加上一个偏置,共计2*6=12个参数; C3:5*5卷积核,生成16个feature maps,每个feature map由S2中若干个feature maps卷积得到,如图Table1所示; S4:和S2相同的操作,共计16*2 = 32个参数; C5:与S4全连接,共计(5*5*16*120+120)=48120个参数; F6:与C5全连接,共计(120*84+84) = 10164 个参数; output: 与F6全连接。 附:下图是keras自动生成的网络图,正如图所示在平均池化层中是没有参数的。这与Le net原始论文不同。 Alex net: VGGNet: 堆叠多个小的卷积核而不使用池化操作可以增加网络的表征深度,同时限制参数的数量。 vgg16和vgg19都有5个block块,每个block块有一个MaxPooling2D,是特征图缩小两倍。共缩小32倍。卷机层与全连接层相连接时先进行了扁平化处理,然后连接看了两个4096的全连接,最后再接一个softmax分类函数。如果不加全连接层,在keras中会对特征进行全局平均池化以防止过拟合。 优点: 1.参数量减少了 81

卷积神经网络中全连接层工作原理的解释

匿名 (未验证) 提交于 2019-12-03 00:25:02
在常见的卷积神经网络的最后往往会出现一两层全连接层,全连接一般会把卷积输出的二维特征图(feature map)转化成(N * 1)一维的一个向量,这是怎么来的呢?目的何在呢? 举个例子: 最后的两列小圆球就是两个全连接层,在最后一层卷积结束后,又进行了一次池化操作,输出了20个12*12的图像(20指最后一层的厚度),然后通过了一个全连接层变成了1*100的向量(第一个全连接层神经元的个数是100)。 该操作其实就是用100个 20* 12*12(20指的是吃化层的厚度)的卷积核卷积出来的,对于输入的每一张特征图,都使用一个和图像大小一样的核卷积进行点积运算,这样整幅图就变成了一个数了,如果厚度是20就是那20个核卷积完了之后相加求和。这样就能把一张图高度浓缩成一个数了。 全连接的目的是什么呢?因为传统的端到到的卷积神经网络的输出都是分类(一般都是一个概率值),也就是几个类别的概率甚至就是一个数--类别号,那么全连接层就是高度提纯的特征了,方便交给最后的分类器或者回归。 但是全连接的参数实在是太多了,你想这张图里就有20*12*12*100个参数,前面随便一层卷积,假设卷积核是7*7的,厚度是64,那也才7*7*64,所以现在的趋势是尽量避免全连接,目前主流的一个方法是全局平均值。也就是最后那一层的feature map(最后一层卷积的输出结果),直接求平均值

卷积神经网络系列之softmax,softmax loss和cross entropy

匿名 (未验证) 提交于 2019-12-03 00:22:01
全连接层到损失层 间的计算 先理清下 从全连接层到损失层 之间的计算。 这张图的等号左边部分就是全连接层做的事,W是 全连接层的参数 ,我们也称为权值, X是全连接层的输入,也就是特征 。 从图上可以看出特征X是N*1的向量,这是怎么得到的呢? ,假设全连接层前面连接的是一个卷积层,这个卷积层的输出是100个特征(也就是我们常说的feature map的channel为100),每个特征的大小是4*4, 那么在将这些特征输入给全连接层之前会将这些特征flat成N*1的向量(这个时候N就是100*4*4=1600) 。 解释完X,再来看W,W是全连接层的参数,是个T*N的矩阵,这个N和X的N对应, T表示类别数,比如你是7分类,那么T就是7。我们所说的训练一个网络,对于全连接层而言就是寻找最合适的W矩阵。 向量 (也就是图中的logits[T*1]),这个向量里面的每个数都没有大小限制的, 也就是从负无穷大到正无穷大 。 一般会在全连接层后面接一个softmax层 , 这个softmax的输入是T*1的向量,输出也是T*1的向量(也就是图中的prob[T*1],这个向量的每个值表示这个样本属于每个类的概率),只不过输出的向量的每个值的大小范围为0到1。 softmax的输出向量是就是概率,该样本属于各个类的概率! softmax计算

深度学习模型压缩之MobileNetV2

匿名 (未验证) 提交于 2019-12-03 00:22:01
ժҪ 论文名称:MobileNetV2: Inverted Residuals and Linear Bottlenecks ժҪ 最后,我们的方法从转换开始就允许输入输出域的解耦,其能对未来的分析提供一个便利的框架。我们在ImageNet分类数据集(Imagenet large scale visual recognition challenge.)、COCO目标检测数据集(Microsoft COCO: Common objects in context)、VOC图像分割数据集(The pascal visual object classes challenge a retrospective.)上进行实验。我们测试了准确率、由乘加操作定义的计算量以及实际延迟和阐述数量之间的权衡关系。 我们的主要贡献在于设计一种新型的层模块:具有线性瓶颈的反向残差(the inverted residual with linear bottleneck)。该模块以低维压缩表示作为输入,首先将其扩展到高维,然后用一个轻量级深度卷积来进行滤波。特征随后投影为一个低维表示与一个线性的卷积,官方实现可作为Tensorflow-Slim模型库的一部分来使用( https://github.com/tensorflow/ models/tree/master/research/slim/ nets