残差

OpenCV基于残差网络实现人脸检测

纵然是瞬间 提交于 2020-01-14 14:29:34
OpenCV基于残差网络实现人脸检测 OpenCV3.3版本第一次把深度神经网络(DNN)模块引入到正式发布版本中,最新的OpenCV3.4中DNN模块发布了两个必杀技,一个支持Faster R-CNN的对象检测,比SSD与YOLO这些模型有更好的检测精度与小对象检测能力,另外一个是支持基于SSD+Resnet模型的人脸检测,虽然速度还达不到HAAR级联检测器的实时性,但是准确性与模型泛化能力可以说完爆HAAR级联检测器方式的人脸检测算法。作为OpenCV开发者需要人脸检测功能时候又多了一种更加可靠的选择,这里我们首先简单介绍一下什么是残差网络,然后给出其人脸检测模型在OpenCV基于摄像头实时人脸检测演示。 一:残差网络(Resnet) 最初的CNN网络LeNet与AlexNet卷积层都比较少,VGG通过小的卷积核实现了网络深度的增加取得了显著效果,但是当层数过度增加的时候就发现训练错误与测试错误都在增加,图示如下: 最开始人们以为是因为梯度消失或者梯度爆炸导致的,不过随着大家的努力,认为这个不是一个过拟合问题,而是网络褪化现象,所以针对这种情况,MSRA何凯明团队提出了一种新的网络模型-Residual Networks,其主要思想是使用残差结构来训练网络,一个残差结构如下: 作者认为F(x) = H(x)-x所以得到H(x) = F(x) + x这样的恒等映射

BP 算法之一种直观的解释

喜夏-厌秋 提交于 2020-01-10 07:15:11
本文转载自: https://www.cnblogs.com/daniel-d/archive/2013/06/03/3116278.html 作者:daniel-D 转载请注明该声明。 0. 前言 之前上模式识别课程的时候,老师也讲过 MLP 的 BP 算法, 但是 ppt 过得太快,只有一个大概印象。后来课下自己也尝试看了一下 stanford deep learning 的 wiki, 还是感觉似懂非懂,不能形成一个直观的思路。趁着这个机会,我再次 revisit 一下。本文旨在说明对 BP 算法的直观印象,以便迅速写出代码,具体偏理论的链式法则可以参考 我的下一篇博客 (都是图片,没有公式)。 1. LMS 算法 故事可以从线性 model 说起(顺带复习一下)~在线性 model 里面,常见的有感知机学习算法、 LMS 算法等。感知机算法的损失函数是误分类点到 Target 平面的总距离,直观解释如下:当一个实例点被误分,则调整 w, b 的值,使得分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面的距离,在 Bishop 的 PRML一书中,有一个非常优雅的图展现了这个过程。但是了解了 MLP 的 BP 算法之后,感觉这个算法与 LMS 有点相通之处。虽然从名字上 MLP 叫做多层感知机,感知机算法是单层感知机。 LMS (Least mean squares)

SRResNet与EDSR

放肆的年华 提交于 2020-01-10 01:03:54
SRResNet SRResNet 网络来源于SRGAN,原论文( https://arxiv.org/abs/1609.04802 )提到一种扩展方式,允许修复更高频的细节。 SRResNet 的残差块架构基于这篇文章( http://torch.ch/blog/2016/02/04/resnets.html )。存在两个小的更改:一个是 SRResNet 使用 Parametric ReLU 而不是 ReLU,ReLU 引入一个可学习参数帮助它适应性地学习部分负系数;另一个区别是 SRResNet 使用了图像上采样方法,SRResNet 使用了子像素卷积层。详见: https://arxiv.org/abs/1609.07009 。 SRGAN网络结构如图1所示。 图1 在生成网络部分(SRResNet)部分包含多个残差块,每个残差块中包含两个3×3的卷积层,卷积层后接批规范化层(batch normalization, BN)和PReLU作为激活函数,两个2×亚像素卷积层(sub-pixel convolution layers)被用来增大特征尺寸。在判别网络部分包含8个卷积层,随着网络层数加深,特征个数不断增加,特征尺寸不断减小,选取激活函数为LeakyReLU,最终通过两个全连接层和最终的sigmoid激活函数得到预测为自然图像的概率。 这篇论文( https:/

【深度残差收缩网络】计算机视觉的应用代码

大兔子大兔子 提交于 2019-12-28 13:00:15
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 深度残差收缩网络是一种新的神经网络结构,实际上是深度残差网络的升级版本,能够在一定程度上提高深度学习方法在含噪数据上的特征学习效果。 首先,简要回顾一下深度残差网络,其基本模块如下图所示。相较于传统的卷积神经网络,深度残差网络利用了跨越多层的恒等映射,来缓解模型训练的难度,提高准确性。 然后,和深度残差网络不同的是,深度残差收缩网络引入了一个小型的子网络,用这个子网络学习得到一组阈值,对特征图的各个通道进行软阈值化。 这个过程其实可以看成一个可训练的特征选择的过程 。具体而言,就是通过前面的卷积层将重要的特征转换成绝对值较大的值,将冗余信息所对应的特征转换成绝对值较小的值;通过子网络学习得到二者之间的界限,并且通过软阈值化将冗余特征置为零,同时使重要的特征有着非零的输出。 深度残差收缩网络其实是一种通用的方法,不仅可以用于含噪数据,也可以用于不含噪声的情况。 这是因为,深度残差收缩网络中的阈值是根据样本情况自适应确定的。换言之,如果样本中不含冗余信息、不需要软阈值化,那么阈值可以被训练得非常接近于零,从而软阈值化就相当于不存在了。 最后,堆叠一定数量的基本模块,就得到了完整的网络结构。 利用深度残差收缩网络进行MNIST数据集的分类,可以看到,效果还是不错的。下面是深度残差收缩网络的代码: #!/usr/bin

tensorflow学习笔记——ResNet

自闭症网瘾萝莉.ら 提交于 2019-12-28 09:06:56
  自2012年AlexNet提出以来,图像分类、目标检测等一系列领域都被卷积神经网络CNN统治着。接下来的时间里,人们不断设计新的深度学习网络模型来获得更好的训练效果。一般而言,许多网络结构的改进(例如从VGG到ResNet可以给很多不同的计算机视觉领域带来进一步性能的提高。   ResNet(Residual Neural Network)由微软研究员的 Kaiming He 等四位华人提出,通过使用 Residual Uint 成功训练152层深的神经网络,在 ILSVRC 2015比赛中获得了冠军,取得了 3.57%的top-5 的错误率,同时参数量却比 VGGNet低,效果非常突出,因为它“简单与实用”并存,之后很多方法都建立在ResNet50或者ResNet101的基础上完成的,检测,分割,识别等领域都纷纷使用ResNet,Alpha zero 也使用了ResNet,所以可见ResNet确实很好用。ResNet的结构可以极快的加速超深神经网络的训练,模型的准确率也有非常大的提升。之前我们学习了Inception V3,而Inception V4则是将 Inception Module和ResNet相结合。可以看到ResNet是一个推广性非常好的网络结构,甚至可以直接应用到 Inception Net中。 1,Highway Network简介   在ResNet之前

烧脑!CMU、北大等合著论文真的找到了神经网络的全局最优解

笑着哭i 提交于 2019-12-27 07:16:50
烧脑!CMU、北大等合著论文真的找到了神经网络的全局最优解 机器之心 ​ 已认证的官方帐号 811 人赞同了该文章 选自arXiv,作者:Simon S. Du、Jason D. Lee、Haochuan Li、Liwei Wang、Xiyu Zhai,机器之心编译,参与:思源、王淑婷、张倩。 一直以来,我们都不知道为什么深度神经网络的损失能降到零,降到零不代表着全局最优了么?这不是和一般 SGD 找到的都是局部极小点相矛盾么?最近 CMU、北大和 MIT 的研究者分析了深层全连接网络和残差网络,并表示使用梯度下降训练过参数化的深度神经网络真的能找到全局最优解。 用一阶方法训练的神经网络已经对很多应用产生了显著影响,但其理论特性却依然是个谜。一个经验观察是,即使优化目标函数是非凸和非平滑的,随机初始化的一阶方法(如随机梯度下降)仍然可以找到全局最小值(训练损失接近为零),这是训练中的第一个神秘现象。令人惊讶的是,这个特性与标签无关。在 Zhang 等人的论文 [2016] 中,作者用随机生成的标签取代了真正的标签,但仍发现随机初始化的一阶方法总能达到零训练损失。 人们普遍认为过参数化是导致该现象的主要原因,因为神经网络只有具备足够大的容量时才能拟合所有训练数据。实际上,很多神经网络架构都高度过参数化。例如,宽残差网络(Wide Residual Network)的参数量是训练数据的

深度残差收缩网络:(3)网络结构

给你一囗甜甜゛ 提交于 2019-12-26 21:14:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> (1)回顾一下深度残差网络的结构   在下图中,(a)-(c)分别是三种残差模块,(d)是深度残差网络的整体示意图。BN指的是批标准化(Batch Normalization),ReLU指的是整流线性单元激活函数(Rectifier Linear Unit),Conv指的是卷积层(Convolutional layer),Identity shortcut指的是跨层的恒等映射,RBU指的是残差模块(Residual Building Unit),GAP是全局均值池化(Global Average Pooling),FC是全连接层(Fully Connected Layer)。 C表示特征图的通道数,W表示特征图的宽度,1表示特征图的高度始终为1(这是因为这篇文章以一维的振动信号作为输入)。   在Conv后的括号中,K表示卷积层中卷积核的个数。当K=C时,输出特征图的通道数为C。当K=2C时,输出特征图的通道数为2C。/2表示的是卷积核每次移动的步长为2,从而使得输出特征图的宽度减半。   我们可以看到,在图(a)中,输入特征图的尺寸为C×W×1,输出特征图的尺寸也是C×W×1,也就是说,特征图的尺寸保持不变。在图(b)中,输出特征图的尺寸减小为C×(0.5W)×1,换言之,宽度减小为原先的一半。在图(c)中

深度残差收缩网络:(2)整体思路

瘦欲@ 提交于 2019-12-26 21:07:19
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 其实,这篇文章的摘要很好地总结了整体的思路。一共四句话,非常简明扼要。   我们首先来翻译一下论文的摘要:    第一句:This paper develops new deep learning methods, namely, deep residual shrinkage networks, to improve the feature learning ability from highly noised vibration signals and achieve a high fault diagnosing accuracy.    翻译:本文提出了新的深度学习方法,即深度残差收缩网络,来提高深度学习算法从强噪声信号中学习特征的能力,并且取得较高的故障诊断准确率。    解释:不仅明确了所提出的方法(深度残差收缩网络),而且指出了面向的信号类型(强噪声信号)。    第二句:Soft thresholding is inserted as nonlinear transformation layers into the deep architectures to eliminate unimportant features.    翻译:软阈值化作为非线性层,嵌入到深度神经网络之中

深度残差收缩网络:(1)背景知识

↘锁芯ラ 提交于 2019-12-26 21:04:20
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 深度残差收缩网络(Deep Residual Shrinkage Network)是深度残差网络(Deep Residual Network, ResNet)的一种改进,发表在IEEE Transactions on Industrial Informatics上,面向的是数据包含噪声的情况。 简单地讲,深度残差收缩网络就是,将软阈值化作为可训练的模块,嵌入到ResNet之中。接下来结合自己的理解,解读一下相关的背景知识。 (1)噪声的含义 如上所述,深度残差收缩网络面向的是数据包含噪声的情况。事实上,这里的“噪声”,可以有更宽泛的解释。“噪声”不仅可以指数据获取过程中所掺杂的噪声,而且可以指“与当前任务无关的信息”。 比如说,我们在训练一个猫狗分类器的时候,如果图像中存在老鼠,那么老鼠就可以理解为一种噪声。 或者说,在故障诊断领域,对于一个复杂的机械系统,可能存在很多个激振源。许多个轴、轴承、齿轮和联轴器等的旋转或啮合都可能会激发振动。这些振动成分都混杂在所采集的振动信号中。如果我们的目的是检测某一零件(比如某一个齿轮)是否发生故障,则其他零件所激发的振动,在一定程度上,都可以理解为噪声。 从这个角度来讲的话,深度残差收缩网络可能有着更宽广的应用场景。 (2)软阈值化(soft thresholding)

Tutorial教程:机器/深度学习中的损失函数(loss function)

拟墨画扇 提交于 2019-12-26 19:39:41
机器/深度学习中的损失函数(loss function) 机器学习大部分的算法都有希望最大化/最小化一个函数/指标,这个函数被称为「目标函数(Object function)」(如果修过最佳化理论对这个名词应该不陌生,整本书都在讲这个),比如K-means群集分析就是希望「最小化群内的资料和群心的误差平方和」,PCA则是希望「投影向量让投影后的资料变异量最大化」。不同的演算法用到的假设都不太一样,所以目标函数都不一样。人工智慧(几乎都是深度学习)用到的目标函数基本上都是「损失函数(loss function)」,而模型的好坏有绝大部分的因素来至损失函数的设计。 损失函数基本上可以分成两个面向(分类和回归),基本上都是希望最小化损失函数。 本篇文章将介绍 1.「什么叫做损失函数为什么是最小化」 2.回归常用的损失函数:均方误差(Mean square error,MSE)和平均绝对值误差(Mean absolute error,MAE),和这两个方法的优缺点。 3.分类问题常用的损失函数:交叉熵(cross-entropy)。 什么叫做损失函数跟为什么是最小化 在回归的问题中,我们通常希望模型很棒,预测出来的东西可以跟实际的值一样。但现实是不可能预测出的值跟实际值是一样的,预测出来的东西基本上跟实际值都会有落差,这个落差在统计上称为「残差(residual)」。 换个角度解释