李飞飞计算机视觉_李飞飞 计算机视觉 - CSDN
  • 内容列表Lecture 7 Convolutional Neural Networks卷积神经网络历史卷积神经网络具体结构卷积层池化层全连接层神经网络架构发展LeNetAlexNetZFNetVGGNetGoogleNetResNet其他网络模型小结 Lecture 7 Convolutional ...

    Lecture 7 Convolutional Neural Networks

    本章将开始进入正经的卷积神经网络学习中,一些细节部分前面分析的很多了,这里不会过多赘述,需要进入到网络架构层面学习。

    卷积神经网络历史

    还是要讲到1959年Hubel与Wiesel关于猫的实验:
    在这里插入图片描述
    当年,他们通过对单神经元对于视觉的感兴趣情况做的实验,结果表明,某一神经元只会对某一简单特征做出反应,例如物体向某一方向的平移,某一种特定边缘,而且大脑中视觉皮质内靠近的细胞代表视野中的附近区域(颜色,方向等):
    在这里插入图片描述
    所以,人类的视觉里如此多变的世界其实都是由很简单的神经元对于视觉信息处理的整合形式,一种网络结构。

    而后,Fukushima在1980年使用了这种简单神经元的堆叠结构来组成了现有神经网络的雏形;再由LeCun在1998年使用反向传播方法更新了神经网络进行手写体图像识别;再到2012年的AlexNet几乎没有对LeCun的网络进行什么修改就夺得了ImageNet大赛的冠军。

    卷积神经网络最近被用来做了什么事呢?其实卷积神经网络现在可以说到处都是,图像分类,自动驾驶,人脸识别语音语义识别,它可以说是无所不能,而且在2014年的实验中,将猴子在IT皮层对物体的分类与卷积神经网络进行比对,发现二者相似矩阵很大部分是相同的,这是否意味着卷积神经网络很大程度上模仿了大脑的神经结构呢?接下来进入卷积神经网络的学习!

    卷积神经网络具体结构

    一个简单的卷积神经网络是由各种层按照顺序排列组成,网络中的每个层使用一个可以微分的函数将激活数据从一个层传递到另一个层。卷积神经网络主要由三种类型的层构成:卷积层,池化层和全连接层(全连接层和常规神经网络中的一样)。通过将这些层叠加起来,就可以构建一个完整的卷积神经网络。

    卷积层

    卷积层(Convolution layer)是很好理解的,将原始图片看作是一个有深度的三位立方体(因为彩色图像是三通道的,这里深度为3),使用一个小一点的立方体滤波器对这个图像进行卷积操作(这个立方体的深度一定等于原图的深度),一次卷积得到一个数字,那么从原图从左至右,从上至下每一个位置卷积一次,就会得到卷积后的结果,最后的结果再加上一个偏执参数,就得到了最后结果图,这个图一般会再经过激活函数,得到这一层卷积层的最终结果:
    在这里插入图片描述
    如下图所示,使用一个5535*5*3滤波器对原始图像3232332*32*3进行滤波,得到结果为2828128*28*1,也就是一个卷积核(kernel)或者说这个滤波器下的结果,那么我们可以对一张图使用多个滤波器,也就是多个核,一般每个核在同一层的大小都是相同的(也有不同,但是最终结果一般维度相同),例如下图例子中使用了6个滤波器,最终结果堆叠在一起得到了一个2828628*28*6的结果:
    在这里插入图片描述
    这里要注意一下,上图中结果相当于卷积层一层所得到的结果,那么下一层怎么操作呢?这里注意上一层得到深度为几层,那么下一层的滤波器也一定要与上层深度一致,如下图这个例子中第二层采用5565*5*6的滤波器:
    在这里插入图片描述
    从下图就能看出滤波器可视化的样子,低级特征是很普通的64个滤波器,有颜色的,由角度边缘的,中级与高级特征就能够明显的看出这是更加杂乱的多维滤波器:
    在这里插入图片描述
    上图是滤波器的可视化结果,经过滤波器的图像在卷积滤波器操作并激活后的可视化为下图所示,最上面是32个滤波器,下面32个分别是对左上角的车灯位置滤波并激活后的结果:
    在这里插入图片描述
    看过了滤波器可视化结果,现在讲一下滤波器的卷积的过程:具体过程就不细说了,就是拿滤波器相当于权重矩阵WTW^T与原图进行卷积,需要说一下的是有关于步长的问题,卷积后图像大小如下图公式所算得:
    在这里插入图片描述
    可以看到当步长为3时,不能整除,所以,不可以使用结果为非整数的步长。并且一般卷积核都为奇数边长矩阵,最小为333*3

    这里再说一下补边(padding)操作,一般进行补边操作都是为了使原图通过卷积后不改变其大小而作,因为当卷积神经网络层数很多时,原图在每一次卷积都被缩小会使操作无法进行,所以,一般补边操作补的大小与卷积核大小有关:
    在这里插入图片描述
    一般在卷积层都会计算卷积层的参数复杂度,每一层的卷积操作都由卷积核参数与偏置参数组成:
    在这里插入图片描述
    可以在很多卷积神经网络中看到111*1卷积核,其实这个卷积核滤波后将原图大小不改变,只改变其深度,也就是通道数:
    在这里插入图片描述
    以上讲到的都是从滤波器的角度看卷积核,下面从神经元的角度看卷积操作:
    在这里插入图片描述
    可以看到,其实卷积操作就相当于卷积后的282828*28个神经元,共享一个参数矩阵,对原图进行卷积操作,再经过激活函数激活,得到282828*28的结果。

    下图为一张车辆图片经过整个网络最终得到预测分数的结构框图,可以清楚地看出每一层所得到可视化的结果,其中每一层都使用10个滤波器对上一层所有结果滤波:
    在这里插入图片描述

    池化层

    通常,在连续的卷积层之间会周期性地插入一个池化层(Pooling layer)。它的作用是逐渐降低数据体的空间尺寸,这样的话就能减少网络中参数的数量,使得计算资源耗费变少,也能有效控制过拟合。

    池化层可以使用MAX操作,又叫最大池化,对输入数据体的每一个深度切片独立进行操作,改变它的空间尺寸。最常见的形式是汇聚层使用尺寸222*2的滤波器,以步长为2来对每个深度切片进行下采样,将其中75%的激活信息都丢掉。每个MAX操作是从4个数字中取最大值(也就是在深度切片中某个2x2的区域)。深度保持不变。池化层的一些公式:
    输入数据体尺寸:W1H1D1W_1\cdot H_1\cdot D_1
    有两个超参数:空间大小 FF 与步长 SS
    输出数据体尺寸:W2H2D2W_2\cdot H_2\cdot D_2,其中W2=(W1F)/S+1W_2=(W_1-F)/S+1H2=(H1F)/S+1H_2=(H_1-F)/S+1D2=D1D_2=D_1
    在这里插入图片描述
    在这里插入图片描述
    卷积层除了最大池化,还有平均池化,就是将每一个最大值滤波器换成平均值滤波器,但是一般来说效果没有最大池化好。

    需要注意,当使用池化层后,反向传播时,因为最大池化的函数是max(x,y)max(x,y),所以只有最大值的位置是有梯度的,这样在反向传播的时候梯度的路由就很高效。

    全连接层

    在全连接层(Full Connect layer,简称FC)中,神经元对于前一层中的所有激活数据是全部连接的,这个与常规神经网络中一样。将前面卷积与池化最后得到的结果拍成一列展开,有多少个参数就有多少维,这么多维的数字与全连接层进行点乘,得到的数就为该类得分,一共有多少类,就有多少列全连接层的参数,下图很好的诠释了这一操作:
    在这里插入图片描述
    其实,转换为一列参数是为了与之前讲过的全连接相对应,而这里也可以将全连接层看作是卷积操作,具体如下:比如,一个K=4096K=4096的全连接层,输入数据体的尺寸是775127*7*512,这个全连接层可以被等效地看做一个F=7,P=0,S=1,K=4096F=7,P=0,S=1,K=4096的卷积层。注意这里是4096个滤波器中每一个滤波器都要对原来深度为512的数据体滤波,可以看出是一个很庞大的操作。因为只有一个单独的深度列覆盖并滑过输入数据体,所以输出将变成1140961*1*4096,这个结果就和使用初始的那个全连接层一样了,全连接层4096在很多模型中都会被使用。

    以下是一个在线训练的网站,里面包含整个模型(虽然模型较为简单),有整个模型在每一步的可视化结果,非常具有参考性:https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html

    神经网络架构发展

    现如今,各种各样的网络架构被设计出来,本节就讲一讲比较知名的Net结构。

    LeNet

    每次都要提一句的LeNet,当初作为邮政手写体识别,首次将神经网络与反向传播结合,看下途中具体的结构没有什么难点,卷积1-池化1-卷积2-池化2-全连接1-全连接2-输出,其中,卷积2的位置并不是全局连接,而是每个滤波器分别连接前项6个图片中的某个,在下方具体给出:
    在这里插入图片描述
    卷积2位置滤波器模板:

    在这里插入图片描述
    这个结构几乎只在这里出现过,印象里没有其他网络会这么卷积了。

    AlexNet

    AlexNet卷积神经网络在计算机视觉领域中受到欢迎,它由Alex Krizhevsky,Ilya Sutskever和Geoff Hinton实现。AlexNet在2012年的ImageNet ILSVRC 竞赛中夺冠,性能远远超出第二名(16%的top5错误率,第二名是26%的top5错误率)。这个网络的结构和LeNet非常类似,但是更深更大,并且使用了层叠的卷积层来获取特征(之前通常是只用一个卷积层并且在其后马上跟着一个汇聚层):
    在这里插入图片描述
    这里要注意,第一层图片大小应该是2272273227*227*3,而不是图片模型中的2242243224*224*3,上图左边为每一层结构与输出结果,注意第一层卷积结构,图片中模型显示的是2个48维滤波器,但是实际上我们在做的时候,直接将其混合为一个96维滤波器,因为当时还没有GPU,承受不了那么大的计算极限;剩下的可以看右边的细节总结,这里归纳一下:

    1. 首次使用ReLU激活函数
    2. 使用均衡化层,但是因为作用不大,之后没有在被使用过
    3. 使用了大量的数据扩充
    4. 使用随机失活dropout方法,并设置为0.5
    5. 将batch设置为128,使用SGD+Momentum且momentum=0.9的方法进行梯度下降
    6. 使用学习率下降的方法,当准确率走平时下降10倍
    7. 使用L2正则化权重操作
    8. 初次使用卷积-卷积的方法,将错误率下降了一些

    可以看出,AlexNet其实对卷积神经网络已经使用了我们之前学过的大多数知识,并且达到了很好的效果,算是深度学习的开端!

    ZFNet

    Matthew Zeiler和Rob Fergus发明的网络在ILSVRC 2013比赛中夺冠,它被称为 ZFNet(Zeiler & Fergus Net的简称)。它通过修改结构中的超参数来实现对AlexNet的改良,具体说来就是增加了中间卷积层的尺寸,让第一层的步长和滤波器尺寸更小,能够采到更多的原图信息,就是这些改动让它在错误率上降低了5%,可以看出卷积层的重要性。
    在这里插入图片描述

    VGGNet

    ILSVRC 2014的第二名是Karen Simonyan和 Andrew Zisserman实现的卷积神经网络,现在称其为VGGNet。它主要的贡献是展示出网络的深度是算法优良性能的关键部分。他们最好的网络包含了16个卷积/全连接层。网络的结构非常一致,从头到尾全部使用的是3x3的卷积和2x2的汇聚。他们的预训练模型是可以在网络上获得并在Caffe中使用的。VGGNet不好的一点是它耗费更多计算资源,并且使用了更多的参数,导致更多的内存占用(200M)。其中绝大多数的参数都是来自于第一个全连接层。后来发现这些全连接层即使被去除,对于性能也没有什么影响,这样就显著降低了参数数量,并且后来使用平均法可以大大降低参数数量,大致意思就是在第一个全连接层中将上层的775127*7*512结果层中每一个777*7结构取平均值,得到115121*1*512个参数,大大降低参数数量:
    在这里插入图片描述
    其实还有一个要点,就是ZFNet中第一层的777*7卷积核完全可以用3个333*3卷积核来代替,不止效果相同,并且777*7卷积核有49个参数,而3个333*3卷积核才只有27个参数。

    GoogleNet

    ILSVRC 2014的胜利者是谷歌的Szeged等实现的卷积神经网络。它主要的贡献就是实现了一个奠基模块,它能够显著地减少网络中参数的数量(AlexNet中有60M,该网络中只有4M)。还有,这个论文中没有使用卷积神经网络顶部使用全连接层,而是使用了一个平均汇聚,把大量不是很重要的参数都去除掉了。GooLeNet还有几种改进的版本,最新的一个是Inception-v4。
    在这里插入图片描述
    它用了22层结构,不使用全连接层,大大降低了参数数量,并且提高了准确率。

    这里着重讲一下GoogleNet中重要改进:inception模型:
    在这里插入图片描述
    上图可以看出,它将输入通过不同大小的卷积核,但是都输出同样大小结果,只有通道数不同,而可以看到最后将通道整合所达到的参数数量有854M,这样的参数似乎有些太多了,如何减少并且达到我们要的效果呢?这里使用了bottleneck结构来缓解参数过多问题,其实bottleneck相当于卷积层讲到的111*1卷积核,只改变通道数,就能大大降低参数数量:
    在这里插入图片描述
    经过上图的计算,可以看到,bottleneck结构将输入图像的256个通道缩小到64通道,而后面的参数基于这个操作减少了很多层滤波器,效果很棒!

    其实在之后的GoogleNet改进中,将555*5卷积核改成两个333*3卷积核,将333*3卷积核改成两个131*3卷积核都对参数下降起到了很大的帮助。

    ResNet

    残差网络(Residual Network)是ILSVRC2015的胜利者,由何恺明等实现。它使用了特殊的跳跃链接,大量使用了批量归一化(batch normalization)。这个结构同样在最后没有使用全连接层。

    我们先探讨一下为什么在传统网络层数越深,训练与测试损失会如此呈现:
    在这里插入图片描述
    可以看到训练损失与测试损失都是层数深的较高,这里不是过拟合的问题,而是层数越深,算出来的结果就与原图越远,导致一直在学习很抽象的东西。这里ResNet使用残差块来解决这个问题,这样会使传统网络能够层数越来越深也不用担心效果会越来越差了:
    在这里插入图片描述
    上图可以看出通过最后的H(x)=F(x)+xH(x) = F(x) + xF(x)F(x)为经过卷积操作后的结果,xx为将上一层结果直接加入到这个结果中,相当于将上一层结果直接影响这一层,单独这样看不出来有如何
    变化,可是放入反向传播中,当每次都有一部分xx直接来自于上层,并且最后传给输入图像时,直接由输入图像特征影响权重更新,达到增加层数而不影响损失的效果(这里每一个残差块一般都用大于2个卷积层),而增加层数又可以提升模型效果,所以,ResNet一般层数很多,达到152层。

    可以看一下ResNet的整体结构:
    在这里插入图片描述
    其中当特征图尺寸减半时,残差模块内会对原图进行下采样操作,来匹配缩小后的特征图,而原图进行尺寸减半操作使用的是333*3卷积,步长为2,并且注意下图内残差网络中每层衰减使用的是单独补边操作,也就是只长宽只增加1:
    在这里插入图片描述
    可以看到,当ResNet大于50层时,一般会在每个残差块内加入bottleneck来减小计算参数。

    下面说一下ResNet内的一些细节:

    1. 在每一个卷积层后都会跟着一个BN层
    2. 权重初始化操作使用Xavier方法
    3. 梯度下降法使用SGD+Momentum且momentum=0.9
    4. 学习率略微调高了一些,从0.1开始衰减,此处因为BN层的加入
    5. batch设置为256
    6. 使用L2正则化权重操作
    7. 不使用dropout,因为BN层的加入

    其他网络模型

    之前看了很多模型,RCNN、fast-RCNN、faster-CNN、DenseNet、DPN、以后有时间将这些模型优缺点都讲一下!

    网络架构对比

    下面这张图片可以看出各个模型准确率与模型复杂度的对比:
    在这里插入图片描述
    在右面的坐标轴内越靠近左上角说明模型越好,可以看出Inception-v3与ResNet-50效果很不错。

    小结

    1. 对整个卷积神经网络展开逐层分解,探究每一层的作用,了解卷积层、池化层与全连接层的操作方式。
    2. 讲述神经网络架构发展情况,从最初的LeNet到变革性的AlexNet还有最近的一些net,了解其中不同层的作用。

    资料来源:

    1. 斯坦福CS231n李飞飞计算机视觉视频课程:https://study.163.com/course/courseMain.htm?courseId=1003223001
    2. CS231n官方笔记授权翻译总集篇:https://zhuanlan.zhihu.com/p/21930884
    3. CS231n官方PPT:http://vision.stanford.edu/teaching/cs231n/syllabus.html
    4. 残差网络论文:https://arxiv.org/pdf/1512.03385.pdf
    展开全文
  • 内容列表Lecture 8 Spatial Localization and Detection目标检测Region ProposalsR-CNNSPPNetFast R-CNNFaster R-CNNMask R-CNNYOLO小结 Lecture 8 Spatial Localization and Detection 目标检测 ...

    Lecture 8 Spatial Localization and Detection

    目标检测

    要了解目标检测问题,先要了解图像的分类与定位问题,可以看到下图中,分类与预测一般是同一个网络下,经过不同的全连接而生成的不同结果,一边是分类,评价分数,另一边是对检测位置标框,进行回归计算,这里的L2 Loss为测量两个张量之间或张量与0之间的误差。,这些可以用于测量回归任务中的网络的精确度,最后的损失函数将二者相加,这样就完成了整个模型:
    在这里插入图片描述
    这里说一下回归与分类的区别,回归其实是分类的连续化,如预测房价、未来的天气情况等等,例如一个产品的实际价格为500元,通过回归分析预测值为499元,我们认为这是一个比较好的回归分析。一个比较常见的回归算法是线性回归算法(LR)。另外,回归分析用在神经网络上,其最上层是不需要加上softmax函数的,而是直接对前一层累加即可。回归是对真实值的一种逼近预测;而分类问题是用于将事物打上一个标签,通常结果为离散值。

    回归中我们将预测与正确(groundtruth)候选框用4各参数表示:x,y表示候选框左上角坐标位置;w,h表示候选框宽与高。这两者之间差值损失就是候选框预测损失。

    后来看了一下里面的边框回归的含义,有一个文章解释边框回归的比较好:https://blog.csdn.net/zijin0802034/article/details/77685438
    只是其中我认为里面预测与真实边框坐标差值处以框宽与框高是要对应尺度,因为普通的相减会因为框的大小为失去意义。最后的损失函数与优化函数为:
    在这里插入图片描述
    Φ5(P)Φ5(P)是输入 Proposal 的特征向量,ww∗是要学习的参数(*表示 x,y,w,hx,y,w,h, 也就是每一个变换对应一个目标函数) ,wTΦ5(P)w^T∗Φ5(P) 是得到的预测值。,我们要让预测值跟真实值t=(tx,ty,tw,th)t∗=(tx,ty,tw,th)差距最小,而里面的wTΦ5(P)w^T∗Φ5(P)t=(tx,ty,tw,th)t∗=(tx,ty,tw,th)都是偏移量。

    其实一张图片中可能出现很多种物体的情况:
    在这里插入图片描述
    如果我们再进行回归,参数就太多了,那么假如将目标检测不看成是回归问题,而是看成分类问题,下面的滑窗思想就可以很好的解释分类结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    上图可以看出就是通过在图片中裁剪不同的框,分别判别是否为背景与物体的分类。

    Region Proposals

    上面所展示出的框可以说是非常非常多的,那么对这些框的筛选就是一个大问题,这里面的方法革新就要说到选择性搜索(Selective Search),它将之前的方法进行融合创新,这个方法优点在于:捕捉不同尺度(Capture All Scales)、多样化(Diversification)、快速计算(Fast to Compute)。

    总结为:选择性搜索是用于目标检测的区域提议算法,它计算速度快,具有很高的召回率,基于颜色,纹理,大小和形状兼容计算相似区域的分层分组。

    具体操作是使用Felzenszwalb and Huttenlocher的方法对图像找出相似区域(通过像素相近的聚合方法),再使用贪心算法对区域迭代分组:

    1. 计算所有邻近区域之间的相似性;
    2. 两个最相似的区域被组合在一起;
    3. 计算合并区域和相邻区域的相似度;
    4. 重复2、3过程,直到整个图像变为一个地区。

    在这里插入图片描述
    这样就可以将原图通过区域预测出包含物体或者背景的少数框,但是框数依然可能很多,一张图可能有2000个左右。

    R-CNN

    R-CNN方法就是将上面的选择性搜索与卷积神经网络进行结合,将选择性搜索所得到的图形丢入卷积神经网络中,输出分类结果(目标或背景),另一个就是对选择性搜索出来的框使用回归进行微调:
    在这里插入图片描述
    大概说一下详细过程:先将所有选择性搜索出来的框保存下来,使用一个分类模型专门学习目标与背景分类,再通过回归对搜索出来的区域进行调整,使其更加完美。

    但是R-CNN也有很多缺点:

    1. 训练与测试的时间都太长了。
    2. 无法对具体的问题进行调整网络(使用AlexNet网络进行分类)。
    3. 被选择性搜索出来的区域丢入AlexNet时必须要重新调整尺寸到统一大小,这就让它丢失了很多的信息,内部图形也被形变了

    SPPNet

    针对R-CNN中的难点,一个是每次都要单独将区域保存下来,并且单独送入CNN,另一个是每次保存下来的图片都要重新调整大小到同样尺寸,SPPNet对之进行了很好的改进,它的思想是这样的:
    在这里插入图片描述
    上图中将一张图片先送入卷积层得到最后一层卷积层的结果特征图,然后对特征图规定同样大小,比如最后输出为256通道,那么针对每个通道,都进行一次161616*16444*4111*1最大池化,将输出堆叠起来,再送入全连接层分类,可以大大减少R-CNN需要保存的空间,也将输出统一了尺度,这个方法也是接下来要讲的Fast R-CNN的ROI pooling思想的原型。

    Fast R-CNN

    Fast R-CNN与SPPNet同样大大简化了R-CNN在前期做选择性搜索的查找,而是直接将一张图片丢入CNN进行计算:
    在这里插入图片描述
    这里面最大的革新就是在ROI pooling部分,在R-CNN中,被形变操作在这里得到整合,不需要形变,这里使用了最大池化操作使得输出为确定的大小,下面的图片很显然地描述了这一操作:
    在这里插入图片描述
    而且在反向传播里池化操作也可以很简单的回传梯度,这样会节省很多的时间。

    Fast R-CNN比R-CNN训练与测试时间都提升了几十倍,可是,很明显的看出来训练的时间有一大部分都是选择性搜索消耗的,那么可不可能将选择性搜索直接在CNN内操作呢?

    Faster R-CNN

    Faster R-CNN直接丢弃了选择性搜索的操作,使用了Region Proposal Network代替选择性搜索,整体操作如下图所示:
    在这里插入图片描述
    这里讲几个技术要点:

    1. 通过最开始的卷积层输出feature map,一部分带入RPN结构,一部分放到ROI pooling层

    2. RPN结构内分为两部分操作,一部分对anchors所对应的区域进行二分类(目标或背景),另一部分进行边框回归,找到最好的位置

    3. 大体讲一下anchors,下图中右边是anchors的具体表示,这里的(x1,y1,x2,y2)(x_1, y_1, x_2, y_2)是9个anchors的左上角与右下角的坐标,左边图形是三种不同尺寸的anchors width:height{1:1,1:2,2:1}\text{width:height}\in\{1:1, 1:2, 2:1\},这里的anchors是原图的坐标。
      在这里插入图片描述在这里插入图片描述

    4. 因为所有的anchors都是在原图上产生的,那么一共有多少个anchors呢?如果通过前置CNN将原图变为特征图变为1/16大小,那么特征图一共有多少个点aa,就有9a9a个anchors(9代表anchors数量,每个anchor就是以特征图中的点在原图的161616*16大小为中点,向外找anchors)
      在这里插入图片描述

    5. 接下来是给anchors打标签:
      在这里插入图片描述

    6. 这样学习出来的就是对于不同anchors的数值,将之从大到小排序,提取前6000(举例)个,在其中筛选掉anchors超出原图边框情况,筛选掉特别小的,再进行非极大值抑制(方法参考https://www.cnblogs.com/makefile/p/nms.html),最后得到200(举例)个框,也就是得到的region proposal

    7. 剩下的就和Fast R-CNN一样了,将框与特征图丢入POI Pooling,再进行最后的分类与回归,就大功告成了

    在这里插入图片描述
    Fast R-CNN相当于在原始图像上选择性搜索找到region proposals,并且映射到特征图谱上;而Faster R-CNN则相当于在特征图谱上通过不同的anchors映射到原始图像中,我觉得这是两者很大的区别,而这个区别也就使图像处理的更加快速。

    在最原始的Faster R-CNN版本中,是先进行RPN网络训练,再统一一起训练,后来改进的版本中至今实现了端对端的操作,最后的损失由RPN的分类与回归损失和最后整体分类与回归损失一起调控网络。

    Mask R-CNN

    Mask R-CNN意义在于在Faster R-CNN基础上增加一个Mask蒙版层,使得最后的输出可以是像素级的目标,而不是单纯的框:
    在这里插入图片描述
    它对Faster R-CNN的改进是在于新增加了一个RoI Align与预测Mask操作,其中RoI Align在于之前的RoI pooling是将原来的特征像素级归一化到同一尺寸使用的取整操作,这里新的RoI Align使用的是双线性插值方法,使物体位置更加精确;而RoI Align之后有一个"head"部分,主要作用是将RoI Align的输出维度扩大,这样在预测Mask时会更加精确。在Mask Branch的训练环节,作者没有采用FCN式的SoftmaxLoss,反而是输出了K个Mask预测图(为每一个类都输出一张),并采用average binary cross-entropy loss训练,当然在训练Mask branch的时候,输出的K个特征图中,也只是对应ground truth类别的那一个特征图对Mask loss有贡献。

    最后的损失函数由五部分构成,Lfinal=L({pi},{ti})+(Lcls+Lbox+Lmask)L_{final} = L(\{p_i\},\{t_i\})+(L_{cls}+L_{box}+L_{mask})

    这里对于Faster R-CNN还有一点改进是positive RoI被定义成与groundtruth的IoU大于0.5的(Faster R-CNN是0.7)
    在这里插入图片描述
    再提一句,Mask R-CNN在蒙版级目标检测是比当时的FCIS方法要优秀一些的,这里就不解读FCIS方法了,感兴趣可以看大神的解读:https://blog.csdn.net/jiongnima/article/details/78961147

    YOLO

    YOLO与其他目标检测网络的区别在于,它不使用Region Proposal进行物体位置识别,而是直接使用回归方法,看下图:
    在这里插入图片描述
    大体意思为将图片平均分成S*S的小格,每个格子负责检测‘落入’该格子的物体。若某个物体的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。如下图所示,图中物体狗的中心点(红色原点)落入第5行、第2列的格子内,所以这个格子负责预测图像中的物体狗:
    在这里插入图片描述
    每个格子输出B个bounding box(包含物体的矩形区域)信息,以及C个物体属于某种类别的概率信息。

    Bounding box信息包含5个数据值,分别是x,y,w,h,和confidence。其中x,y是指当前格子预测得到的物体的bounding box的中心位置的坐标。w,h是bounding box的宽度和高度。注意:实际训练过程中,w和h的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。

    confidence反映当前bounding box是否包含物体以及物体位置的准确性,计算方式如下:
    confidence=P(object)IOUconfidence = P(object) * IOU, 其中,若bounding box包含物体,则P(object) = 1;否则P(object) = 0. IOU(intersection over union)为预测bounding box与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间)。

    因此,YOLO网络最终的全连接层的输出维度是 SS(B5+C)S*S*(B*5 + C)

    最后的特征提取就是将之前的每一个小格子变成特征图上的每一个元素:
    在这里插入图片描述
    具体细节查看论文:https://arxiv.org/pdf/1506.02640.pdf

    说一下YOLO的优缺点:

    1. 快。YOLO将物体检测作为回归问题进行求解,整个检测网络pipeline简单。在titan x GPU上,在保证检测准确率的前提下(63.4% mAP,VOC 2007 test set),可以达到45fps的检测速度
    2. 背景误检率低。YOLO在训练和推理过程中能‘看到’整张图像的整体信息,而基于region proposal的物体检测方法(如rcnn/fast rcnn),在检测过程中,只‘看到’候选框内的局部图像信息。因此,若当图像背景(非物体)中的部分数据被包含在候选框中送入检测网络进行检测时,容易被误检测成物体。测试证明,YOLO对于背景图像的误检率低于fast rcnn误检率的一半
    3. 通用性强。YOLO对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法
    4. 但是物体识别精确度要差
    5. 召回率较低

    以上所说的都是YOLO的最初版本,也就是YOLO V1,看了几篇论文了解了之后的几个版本,这里来说一下这几个版本的不同点与改进:

    YOLO V2:YOLO V2和YOLO 9000是当时一起推出的两款模型,但是YOLO V2是主要的检测网络,YOLO 9000只是YOLO V1的改进版,这里主要讲YOLO V2,他对于原来版本最大的改进是在最后的特征图上由V1的777*7变成了131313*13并引入anchor box的思想,从原本的只有7727*7*2个bounding box,而V2由于anchor box可以提升很多倍的bounding box,达到1000多,而且这个anchor box是不同于Fast R-CNN的固定anchors大小,而是通过聚类得到的;还有V2在每一个层前都加了BN层加速收敛;还有将原图尺寸进行扩大,以提升分辨率与最后特征图的准确度,还有一些其他的小细节就不一一说明了。

    YOLO V3:YOLO V3比V2大体上改进的方面不多,他引入了类似FPN的思想,就是多尺度融合,将最后一层131313*13与倒数第二层262626*26与前一层525252*52进行连接,加强了小目标的检测准确性。

    小结

    本节主要讲述了目标检测的方法,如何对目标位置框查找,再对框内物体分类,从最原始的滑窗操作到衍生出的选择性搜索,再到R-CNN的几种变形,到后来的Mask R-CNN,最后大致讲解YOLO模型的不同点,具体细节需要上手代码!

    资料来源:

    1. 斯坦福CS231n李飞飞计算机视觉视频课程:https://study.163.com/course/courseMain.htm?courseId=1003223001
    2. CS231n官方笔记授权翻译总集篇:https://zhuanlan.zhihu.com/p/21930884
    3. CS231n官方PPT:http://vision.stanford.edu/teaching/cs231n/syllabus.html
    4. 残差网络论文:https://arxiv.org/pdf/1512.03385.pdf
    5. L2 Loss解释:https://blog.csdn.net/JNingWei/article/details/77839385
    6. 边框回归解释:https://blog.csdn.net/zijin0802034/article/details/77685438
    7. 选择性搜索(Selective Search)解释:https://zhuanlan.zhihu.com/p/39927488
    8. 一文读懂Faster R-CNN:https://zhuanlan.zhihu.com/p/31426458
    9. R-CNN、Fast R-CNN、Faster R-CNN总结:https://blog.csdn.net/xiaoye5606/article/details/71191429
    10. 非极大值抑制:https://www.cnblogs.com/makefile/p/nms.html
    11. Mask R-CNN论文:https://arxiv.org/pdf/1703.06870.pdf
    12. 实例分析R-CNN、Fast R-CNN、Faster R-CNN、Mask R-CNN:https://blog.csdn.net/jiongnima/article/details/79094159
    13. FCIS解读:https://blog.csdn.net/jiongnima/article/details/78961147
    14. YOLO解读:https://zhuanlan.zhihu.com/p/25236464
    15. YOLO论文:https://arxiv.org/pdf/1506.02640.pdf
    展开全文
  • 内容列表Lecture 6 Training Neural Networks,Part 2多种梯度下降优化方式SGDSGD + MomentumNesterov momentumAdaGradRMSPropAdam学习率衰减一些二阶算法(L-BFGS)几种方法的比较小结 Lecture 6 Training Neural ...

    Lecture 6 Training Neural Networks,Part 2

    多种梯度下降优化方式

    SGD

    本节讨论多种梯度下降的优化方式,之前我们着重讲了随机梯度下降SGD方式,这是一种很容易理解的梯度下降方式,但是,其实SGD方式在某些特定情况会很慢,比如,当数据处于下图这种椭圆形式的梯度时,SGD可能沿浅维度进展非常缓慢,并且沿陡峭方向抖动,虽然下降到了极小值点,但是速度极慢:
    在这里插入图片描述
    还有其他两种情况,SGD都到不了全局极小值点,比如当SGD运行到局部极小值点与鞍点时,梯度下降为0,SGD被卡住,并且其实在多维数据中,鞍点情况极为常见,这里说一下局部极小值点,在越来越多的研究表明,当你的规模越大时,局部极小值与全局极小值会越来越接近,这也是一个对模型设计有益现象:
    在这里插入图片描述

    SGD + Momentum

    动量(Momentum)更新是另一个方法,这个方法在深度网络上几乎总能得到更好的收敛速度。该方法可以看成是从物理角度上对于最优化问题得到的启发。损失值可以理解为是山的高度(因此高度势能是U=mghU=mgh,所以有UhU\propto h)。用随机数字初始化参数等同于在某个位置给质点设定初始速度为0。这样最优化过程可以看做是模拟参数向量(即质点)在地形上滚动的过程。因为作用于质点的力与梯度的潜在能量(F=UF=-\nabla U)有关,质点所受的力就是损失函数的(负)梯度。还有,因为F=maF=ma,所以在这个观点下(负)梯度与质点的加速度是成比例的。

    注意这个理解和上面的随机梯度下降(SGD)是不同的,在普通版本中,梯度直接影响位置。而在这个版本的更新中,物理观点建议梯度只是影响速度,然后速度再影响位置:
    在这里插入图片描述
    这里将速度初始化为0,还有一个参数rho,这个参数在最优化的过程中被看做动量(一般值设为0.9),但其物理意义与摩擦系数更一致。这个变量有效地抑制了速度,降低了系统的动能,不然质点在山底永远不会停下来。通过交叉验证,这个参数通常设为[0.5,0.9,0.95,0.99]中的一个。这个动量也可以随时间慢慢变化改善效果,一个典型的设置是刚开始将动量设为0.5而在后面的多个周期(epoch)中慢慢提升到0.99。

    还有另一种解释方法:在普通的梯度下降法x=xVx =x- V中,每次xx的更新量VVV=dxλV = dx * λ;

    当使用动量时,VV考虑为本次的梯度下降量与部分上次更新量的矢量和,即dWλ-dW*λ与上次xx的更新量VV乘以一个介于[0, 1]的系数momemtum的和,即:V=dWλ+VmomemtumV = dW * λ+ V*momemtum

    从而使得动量方法有以下两条性质:

    1. 当本次梯度下降方向与上次更新量的方向相同时,上次的更新量能够对本次的搜索起到一个正向加速的作用。
    2. 当本次梯度下降方向与上次更新量的方向相反时,上次的更新量能够对本次的搜索起到一个减速的作用。

    这个理解方法个人觉得更好一些。

    Nesterov momentum

    Nesterov动量与普通动量有些许不同,最近变得比较流行。在理论上对于凸函数它能得到更好的收敛,在实践中也确实比标准动量表现更好一些。

    Nesterov动量的核心思路是,当参数向量位于某个位置x时,观察上面的动量更新公式可以发现,动量部分(忽视带梯度的第二个部分)会通过ρv\rho * v稍微改变参数向量。因此,如果要计算梯度,那么可以将未来的近似位置x+ρvx + \rho * v看做是“向前看”,这个点在我们一会儿要停止的位置附近。因此,计算x+ρvx + \rho * v的梯度而不是“旧”位置x的梯度就有意义了。
    在这里插入图片描述
    注意上图左边,将实际方向看作是初始梯度向量与动量向量的和,“向前看”意味着直接在动量向量结尾处直接计算梯度向量:
    在这里插入图片描述
    上图中上面方块中的等式(原始梯度计算等式)通过中间的等式可以转换为下面方块中的等式(动量向量结尾处的梯度计算等式),也就是新的梯度计算方法,下面是代码表示:
    在这里插入图片描述

    AdaGrad

    此方法是一种自适应性学习率算法,下面是它的代码:

    grad_squared = 0
    while True:
    	dx = compute_gradient(x)
    	grad_squared += dx * dx
    	x -= lraening_rate * dx / (np.sqrt(grad_squared) + 1e-7)
    

    注意,此方法跟踪了每个参数的梯度的平方和。归一化是逐元素进行的。值得参考的是,接收到高梯度值的权重更新的效果被减弱,而接收到低梯度值的权重的更新效果将会增强。有趣的是平方根的操作非常重要,如果去掉,算法的表现将会糟糕很多。用于平滑的式子epseps(一般设为1e41e-41e81e-8之间)是防止出现除以0的情况。Adagrad的一个缺点是,在深度学习中单调的学习率被证明通常过于激进且过早停止学习。

    RMSProp

    RMSProp方法就是在AdaGrad方法上的改进,此方法让AdaGrad方法不再那么激进,可以单调的降低学习率,因为它使用了一个梯度平方的滑动平均:
    在这里插入图片描述
    在上面的代码中,decay_rate是一个超参数,常用的值是[0.9,0.99,0.999]。剩下和AdaGrad完全一样,因此,RMSProp仍然是基于梯度的大小来对每个权重的学习率进行修改,这同样效果不错。但是和Adagrad不同,其更新不会让学习率单调变小。

    Adam

    可以看到上面几种方法中,Momentum与Nesterov momentum方法是结合动量,AdaGrad与RMSProp是通过类似于学习率的衰减,那么将他们结合会不会有更好的效果呢?这就是Adam算法:
    在这里插入图片描述
    上图中first_moment是运用动量特性,second_moment结合学习率衰减特性,二者结合后比以往的单独方法要效果更好,一般beta1设置为0.9,beta2设置为0.999,学习率一般1e-3或5e-4为最好模型;注意上面是这个方法的简单代码,而完整代码会将first_moment与second_moment增加一个偏执,使其不会在初始为0处失去效果:
    在这里插入图片描述
    在实际操作中,推荐使用Adam作为默认的算法,一般而言跑起来比其他的算法都要好。

    学习率衰减

    在训练深度网络的时候,让学习率随着时间衰减通常是有帮助的。可以这样理解:如果学习率很高,系统的动能就过大,参数向量就会无规律地跳动,不能够稳定到损失函数更深更窄的部分去。知道什么时候开始衰减学习率是有技巧的:慢慢减小它,可能在很长时间内只能是浪费计算资源地看着它混沌地跳动,实际进展很少。但如果快速地减少它,系统可能过快地失去能量,不能到达原本可以到达的最好位置。通常,实现学习率衰减有3种方式:

    1. 随步数衰减:每进行几个周期就根据一些因素降低学习率。典型的值是每过5个周期就将学习率减少一半,或者每20个周期减少到之前的0.1。这些数值的设定是严重依赖具体问题和模型的选择的。在实践中可能看见这么一种经验做法:使用一个固定的学习率来进行训练的同时观察验证集错误率,每当验证集错误率停止下降,就乘以一个常数(比如0.5)来降低学习率。
    2. 指数衰减。数学公式是α=α0ekt\alpha=\alpha_0e^{-kt},其中α0,k\alpha_0,k是超参数,tt是迭代次数(也可以使用周期作为单位)。
    3. 1/t衰减的数学公式是α=α0/(1+kt)\alpha=\alpha_0/(1+kt),其中α0,k\alpha_0,k是超参数,tt是迭代次数。

    在实践中,我们发现随步数衰减的随机失活(dropout)更受欢迎,因为它使用的超参数(衰减系数和以周期为时间单位的步数)比k更有解释性。最后,如果你有足够的计算资源,可以让衰减更加缓慢一些,让训练时间更长些,而且在进行其他梯度下降法时,也结合着学习率衰减也是很不错的选择。

    一些二阶算法(L-BFGS)

    在深度网络背景下,第二类常用的最优化方法是基于牛顿法的,其迭代如下:
    xx[Hf(x)]1f(x)\displaystyle x\leftarrow x-[Hf(x)]^{-1}\nabla f(x)
    这里Hf(x)Hf(x)是Hessian矩阵,它是函数的二阶偏导数的平方矩阵。f(x)\nabla f(x)是梯度向量,这和梯度下降中一样。直观理解上,Hessian矩阵描述了损失函数的局部曲率,从而使得可以进行更高效的参数更新。具体来说,就是乘以Hessian转置矩阵可以让最优化过程在曲率小的时候大步前进,在曲率大的时候小步前进。需要重点注意的是,在这个公式中是没有学习率这个超参数的,这相较于一阶方法是一个巨大的优势。

    然而上述更新方法很难运用到实际的深度学习应用中去,这是因为计算(以及求逆)Hessian矩阵操作非常耗费时间和空间。举例来说,假设一个有一百万个参数的神经网络,其Hessian矩阵大小就是[1,000,000 x 1,000,000],将占用将近3,725GB的内存。这样,各种各样的拟-牛顿法就被发明出来用于近似转置Hessian矩阵。在这些方法中最流行的是L-BFGS,该方法使用随时间的梯度中的信息来隐式地近似(也就是说整个矩阵是从来没有被计算的)。

    然而,即使解决了存储空间的问题,L-BFGS应用的一个巨大劣势是需要对整个训练集进行计算,而整个训练集一般包含几百万的样本。和小批量随机梯度下降(mini-batch SGD)不同,让L-BFGS在小批量上运行起来是很需要技巧,同时也是研究热点。

    几种方法的比较

    以上两张gif可以很直观的看出几种方法的更新速度与更新方式。

    正则化

    之前讲过的正则化意思是通过对权重参数的抑制使其不会过度学习,其实正则化的目的就是减少训练误差,有不少方法是通过控制神经网络的容量来防止其过拟合的,在训练数据不够多时,或者overtraining时,常常会导致overfitting(过拟合)。随着训练过程的进行,模型复杂度增加,在训练集上的error渐渐减小,但是在验证集上的error却反而渐渐增大——因为训练出来的网络过拟合了训练集,对训练集外的数据却不work,这里说一下,正则化一般是在验证数据集中体现出来的,并且从验证数据集的表现来影响训练数据集。

    L2正则化

    L2正则化可能是最常用的正则化方法了。可以通过惩罚目标函数中所有参数的平方将其实现。即对于网络中的每个权重ww,向目标函数中增加一个12λw2\frac{1}{2}\lambda w^2,其中λ\lambda是正则化强度。前面这个 12\frac{1}{2} 很常见,是因为加上 12\frac{1}{2} 后,该式子关于 ww 梯度(导数)就是λw\lambda w而不是2λw2\lambda w了。L2正则化可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量。在Lecture 3中讨论过,由于输入和权重之间的乘法操作,这样就有了一个优良的特性:使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。最后需要注意在梯度下降和参数更新的时候,使用L2正则化意味着所有的权重都以w=wλww =w -\lambda w向着0线性下降。

    L1正则化

    L1正则化是另一个相对常用的正则化方法。对于每个ww我们都向目标函数增加一个λw\lambda|w|。L1和L2正则化也可以进行组合:λ1w+λ2w2\lambda_1|w|+\lambda_2w^2,这也被称作Elastic net regularizaton。L1正则化有一个有趣的性质,它会让权重向量在最优化的过程中变得稀疏(即非常接近0)。也就是说,使用L1正则化的神经元最后使用的是它们最重要的输入数据的稀疏子集,同时对于噪音输入则几乎是不变的了。相较L1正则化,L2正则化中的权重向量大多是分散的小数字。在实践中,如果不是特别关注某些明确的特征选择,一般说来L2正则化都会比L1正则化效果好。

    最大范式约束

    最大范式约束(Max norm constraints)。另一种形式的正则化是给每个神经元中权重向量的量级设定上限,并使用投影梯度下降来确保这一约束。在实践中,与之对应的是参数更新方式不变,然后要求神经元中的权重向量w\overrightarrow{w}必须满足w2<c||\overrightarrow{w}||_2<c 这一条件,一般 cc 值为3或者4。有研究者发文称在使用这种正则化方法时效果更好。这种正则化还有一个良好的性质,即使在学习率设置过高的时候,网络中也不会出现数值“爆炸”,这是因为它的参数更新始终是被限制着的。

    Dropout

    随机失活(Dropout)是一个简单又极其有效的正则化方法。该方法与L1正则化,L2正则化和最大范式约束等方法互为补充。在训练的时候,随机失活的实现方法是让神经元以超参数p的概率被激活或者被设置为0,一般来说,p值会被设置为0.5。
    在这里插入图片描述
    训练时的网络如图所示,在每一次前向与后向传播中都使用一半的子网络来训练可以大大的提高网络的表现情况,这是为什么呢?从下面的表示方法可以了解到这个理论的具体过程:
    在这里插入图片描述
    如上图所示,每一次在学习过程中防止几项功能的共同适应,而强制使网络有几项冗余特征是很好的消除过拟合的方式,其实在学习的过程中,失活的神经元参数是不会被前向与后向传播更新的,只有被激活的才会更新,就相当于在使用一个数据来训练大网络中的一个子网络,也就是说在多次循环中使用相同的数据点来训练不同的有共有参数的模型。

    所以,整体来说,在训练过程中,随机失活可以被认为是对完整的神经网络抽样出一些子集,每次基于输入数据只更新子网络的参数(然而,数量巨大的子网络们并不是相互独立的,因为它们都共享参数)。

    在测试过程中不使用随机失活,可以理解为是对数量巨大的子网络们做了模型集成(model ensemble),以此来计算出一个平均的预测。
    在这里插入图片描述
    可以看到训练过程中的期望是测试的期望的 12\frac{1}{2},所以,在测试时,可以将测试的过程中参数乘以 12\frac{1}{2}

    数据扩充

    数据扩充(Data Augmentation)也是一种常见的正则化方式,它的意义就在于,数据量更多,那么训练出的模型就会更好,可是往往我们的训练数据就那么些,怎么扩充呢?其实可以在原数据上进行改动,做一些变换,达到扩充数据的效果:

    1. 图像翻转
    2. 图像旋转
    3. 图像增亮
    4. 添加随机噪声
    5. 截取图像的部分
    6. 对图像进行弹性畸变

    以上就是正则化的大致操作,其实上一节的批量归一化(Batch Normalization)也是一种正则化方式,其实还有更多方法,这里就不一一赘述了,可以上网寻找~~

    小结

    1. 讨论几类梯度下降算法,最后推荐在大多数情况下使用Adam算法,或者使用SGD+Momentum算法并且结合学习率衰减的方法。其实当数据量较小时,也可以使用二阶L-BFGS算法。
    2. 讨论几类减小训练误差的正则化方式,有通过控制权重的L1、L2正则化,通过随机失活的Dropout,扩充数据集,还有Batch Normalization的方式,来尽量使验证集的准确率提升,训练出更好的模型。

    资料来源:

    1. 斯坦福CS231n李飞飞计算机视觉视频课程:https://study.163.com/course/courseMain.htm?courseId=1003223001
    2. CS231n官方笔记授权翻译总集篇:https://zhuanlan.zhihu.com/p/21930884
    3. CS231n官方PPT:http://vision.stanford.edu/teaching/cs231n/syllabus.html
    4. 最清晰的讲解各种梯度下降法原理与Dropout:http://baijiahao.baidu.com/s?id=1613121229156499765
    5. 正则化方法:L1和L2 regularization、数据集扩增、dropout:https://blog.csdn.net/u012162613/article/details/44261657
    展开全文
  • 斯坦福大学李飞飞CS231N计算机视觉冬季课程的讲义,欢迎下载学习。一共15课。
  • https://www.bilibili.com/video/av18443065/?p=4 85%的数据都是图像视频数据 从三维建模跳到了识别,回到了AI 2012CNN模型使用 ......

    https://www.bilibili.com/video/av18443065/?p=4

    85%的数据都是图像视频数据

    从三维建模跳到了识别,回到了AI

    2012CNN模型使用

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    展开全文
  • 9 月 26 日,著名华人计算机视觉专家、斯坦福副教授李飞飞,在温哥华会议中心面向全体与会专家学者作了长达一小时的专题报告。 李飞飞与大家讨论了计算机视觉的下一步目标:丰富场景理解,以及计算机视觉与语言...
  • 之前为了熟悉机器学习的东西去搞kaggle的东西,然后就从Titanic入门咯,结果发现并没有对机器学习的东西有深入的理解,做数据挖掘的时候直接调用sklearn里面的框架,根本不用去想机器学习的公式的运用和基础的实现,...
  • 使用juputer notebook分别依次运行一下的每一个文件的所有cell,某些代码块的运行时间可能需要一到两分钟,等吧…… knn.py 完整实现代码: # Load the raw CIFAR-10 data. cifar10_dir = ...
  • 第一章 计算机视觉概述和历史背景课时1 计算机视觉概述 计算机视觉:针对视觉数据的研究。 关键是如何用算法来开发可以利用和理解的数据,视觉数据存在的问题是它们很难理解,有时把视觉数据称为“互联网的暗物质...
  • 2018年最新 斯坦福CS231n李飞飞计算机视觉课程 全部讲义
  • 李飞飞计算机视觉经典课程-自用笔记1 课程介绍-计算机视觉概述1.1 课程介绍-历史背景1.2 课程介绍-课程后勤2 图像分类-数据驱动方法2.1 图像分类-K最近邻算法2.2 图像分类-线性分类3 损失函数和优化介绍 1 课程介绍-...
  • 斯坦福大学人工智能实验室主任李飞飞教授的计算机视觉CS231全套课件
  • 【AI 科技大本营按】斯坦福的 CS231n 是深度学习和计算机视觉领域的经典课程之一。今年 4 月,由李飞飞主讲的 CS231n Spring 2018 又如约而至,截...
  • 提到深度学习与计算机视觉,不得不提ImageNet和它的创建者,斯坦福大学计算机科学系副教授、Google Cloud 人工智能和机器学习团队的首席科学家李飞飞。而她的成名作,斯坦福大学课程《深度学习与计
  • 作业包含2016冬季和2017春季,官网下载 笔记是网友翻译的
  • 内容列表Lecture 13 Segmentation and Soft AttentionSegmentationSoft Attention小结 Lecture 13 Segmentation and Soft Attention 本章节主要介绍分割模型与注意力模型 Segmentation 分割模型其实也会分为两种,一...
  • 一 神经网络 一、线性分类 图像在计算机的样子: 一张图片被表示成三维数组的形 式,每个像素的值从0到255 例如:3001003
  • 内容列表Lecture 9 Understanding and Visualizing Convolution Neural Networks卷积神经网络内部可视化滤波器/卷积核可视化可视化中间激活层结果最大可视化某一类别Deep DreamNeural Style小结 ...
  • 内容列表Lecture 4 Backpropagation and Neural Networks反向传播链式法则反向传播的直观理解矩阵的反向传播神经网络非生物角度了解神经网络生物角度了解神经网络小结 Lecture 4 Backpropagation and Neural ...
  • 内容列表Lecture 5 Training Neural Networks神经网络的历史训练神经网络激活函数数据预处理权重初始化批量归一化小结 Lecture 5 Training Neural Networks 神经网络的历史 这次的历史就直接讲神经网络的历史(和第...
1 2 3 4 5 ... 20
收藏数 1,950
精华内容 780
关键字:

李飞飞计算机视觉