精华内容
下载资源
问答
  • 卷积神经网络内容概括 卷积神经网发展历程和基本概念 内容概括 什么是卷积神经网络 以卷积结构为主,搭建起来的深度网络。 将图片作为网络的输入(n(批次),w(宽度),h(长度),c(图的通道数量)),自动提取特征...

    卷积神经网络内容概括

    卷积神经网发展历程和基本概念

    内容概括

    在这里插入图片描述

    什么是卷积神经网络

    以卷积结构为主,搭建起来的深度网络。
    将图片作为网络的输入(n(批次),w(宽度),h(长度),c(图的通道数量)),自动提取特征,并且对图像的变形等具有高度不变形。

    重要的组成单元
    在这里插入图片描述

    卷积运算的定义

    卷积的基本定义

    对图像和滤波矩阵(卷积核)做内积(逐个元素相乘在求和)的操作
    滤波器:可以理解为卷积,可以通过滤波器来对图像进行降噪等。
    例如:均值滤波器[1/3,1/3,1/3]进行内积相乘相加后等于相对应的求均值运算。
    另外,每一种卷积对应一种特征

    im2col实现卷积运算:可以自己去了解。

    卷积的重要参数

    在这里插入图片描述

    卷积核(线性运算)

    最常用的为2d卷积核(wh)(当然也有1D以及3D)
    权重和偏置项:权值为w
    x,偏置项:b;
    常用的卷积核:11,33,5*5(一般为奇数,这样的卷积具有一个中心点,从而再卷积之后能保护位置信息,同时能在padding时保持对称性)

    权值共享和局部连接(局部感受野/局部感知)

    卷积运算作用在局部,即为一个感受野
    Feature map使用同一个卷积核运算后得到一种特征
    多种特征采用多个卷积核。

    因此可以得出在一个Feature map种的卷积核的参数时相同的,这就是所谓的全职共享。而输入层和输出层也因此时局部连接的。而全连接即输出层的一个特征点与输入层的所有点都有一定的关系。在这里插入图片描述
    从左到右即为全连接到一个卷积核的权值共享的演变,可以发现通过不断地进化,参数量在不断地缩小,从而降低了过拟合的风险。越多的参数两=量也就意味着我们需要更多的样本去训练模型。

    卷积核与感受野

    卷积核越大等同于感受野越大,也就意味着能获得更多的信息,但也因此,随着卷积核的扩大,也会使参数的大量增加,从而导致过拟合。
    例如33需要9个参数,而55则需要25个,到了77甚至到了49个数值。
    但如果选择卷积核缩小的方法,又会导致信息的缺少,因此为了解决这个问题,可以采用卷几个堆积的方法,使用小的卷积核来完成大的卷积核,如:
    在这里插入图片描述
    在这里插入图片描述
    在上图中,对一个5
    5的图像进行卷积运算,如果使用55的卷积进行运算,则只需要一个卷积,则可以得到一个11的feature。然而,如果使用33的卷积核来操作的话,则需要使用两个卷积进行操作从而达到相同的结果。这就是所谓的卷积核堆积,也就是上图中的结论。
    计算方法:对于n
    n的输入图,33的卷积得到的是(n-2)(n-2)的输出图,55的卷积得到的是(n-4)(n-4)的结果,77得到的是(n-6)(n-6)的结果。
    通过小卷积的堆积而去代替搭卷积,明显的好处是降低了计算量和参数量,同时又使网络深度加深,从而也可以增加层与层之间的关系。

    如何计算卷积参数量

    参数量越大,模型越大,对平台的要求越大,占用的存储空间。因此,在保证性能的前提下,我们应该尽量减少参数。也就是w和b
    在这里插入图片描述

    如何计算卷积的计算量

    决定平台的功耗以及算法的算力。
    在这里插入图片描述

    步长

    卷积是从上到下,从左到右的滑动,而通过设置步长可以决定滑动的距离。
    通过设置设置步长能完成下采样的过程(大于1)。当然也会造成信息的损失(改变了计算量,但是没有改变参数量)

    Feature map的大小计算方法:

    在这里插入图片描述

    Pad(填充)

    确保Feature map的整数倍变化,对尺度相关的任务尤为重要,取决于步长
    在这里插入图片描述
    不改变参数量,改变计算量。

    卷积的定义和使用

    caffe

    在这里插入图片描述

    tensorflow

    在这里插入图片描述

    池化层(无参数)

    对输入的特征图进行压缩,是特征图变小,简化网络计算复杂度。
    进行特征压缩,提取主要特征
    增大感受野
    在这里插入图片描述

    激活函数

    主要是增加网络的非线性,进而提高网络的表达能力。(卷积是线性的)很多实际任务是非线性的,所以加入激活函数是必要的。
    在这里插入图片描述

    Sigmoid

    在这里插入图片描述

    Tanh

    在这里插入图片描述

    ReLu(最常用的)

    在这里插入图片描述

    BatchNorm层的基本概念

    通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正太分布
    在这里插入图片描述
    规范化原因:对于原始的输入数据,每一个层的输入分布不可控,使每一层的数据分布不停变化。

    优点:

    减少了参数的认为选择,可以取消Dropout和L2正则项参数,或者采取更小的L2正则项约束参数;
    减少了对学习率的要求
    可以不再使用局部响应归一化,BN本身就是归一化网络(局部响应归一化)
    破坏原来的数据分布,一定程度上缓解过拟合

    在Caffe中的使用

    在这里插入图片描述

    在Tensorflow中的使用

    在这里插入图片描述

    全连接层

    连接所有的特征,将输出层送给分类器(如softmax分类器)

    将网络的输出变成一个向量
    可以采用卷积代替全连接层:采用一定的卷积可以获得与全连接层一样的结果。
    全连接层是尺度敏感的:如果输入数据的大小发生变化,则FC层就会发生参数的变化。
    因为全连接带来了大量的参数,所以需要配合使用dropout层

    Dropout层

    在训练过程中,随机的丢弃一部分输入(变为0),此时丢弃部分对应的参数不会更新。同一层在每次训练时,会随机抛弃一定的元素。

    优点:

    解决过拟合问题:
    取平均的作用
    减少神经元之间复杂的共适应关系。
    在这里插入图片描述

    损失层

    损失函数:

    用来评估模型的预测值和真实值的不一致程度。用来知道模型的学习。利用损失进行反向传播算法。

    经验风险最小:

    不一致程度,衡量了当前模型的对数据的拟合程度。在这里插入图片描述

    结构风险最小:

    对已经拟合好的模型进一步进行约束,如果不进行约束,在模型训练时可能会得到多组解满足经验风险最小,因此,通过结构风险最小来对当前的解空间找到最优解。它定义了模型的复杂程度越低,结构风险越小,意味着模型越简单,越不容易过拟合。(范数约束,也就是正则项(惩罚项))
    在这里插入图片描述

    在这里插入图片描述

    一般形式:

    参数:
    在这里插入图片描述
    模型:在这里插入图片描述
    样本标签:
    在这里插入图片描述
    损失函数:
    在这里插入图片描述

    常见的损失函数

    经验风险最小:交叉熵损失、softmax loss等
    结构风险最小:L0(参数中,为0的个数,稀疏特性),L1(当前参数的绝对值和,稀疏特性),L2(参数的平方和)正则等

    损失层

    损失层定义了使用的损失函数,通过最小化损失来驱动网络的训练。(反向传播算法)
    网络的损失是通过前向操作计算
    网络参数相对于损失函数的梯度则铜鼓哦反向操作计算。
    分类任务损失:交叉熵损失
    回归任务损失:L1损失、L2损失

    交叉熵损失
    log-likelihood cost

    似然:在已知结果的情况下,反推该原因,也就是学习参数。
    非负性
    当真实输出a与期望输出y接近的时候,代价函数接近于0.
    在这里插入图片描述

    对信息进行量化,定义了事件的不确定程度。不确定性越大,熵越大。

    交叉熵损失实现

    在这里插入图片描述
    这两个主要的区别为label
    第一个需要出入的值为one-hot编码(有兴趣的可以取查阅),而第二个则不需要。

    L1、L2和Smooth L1损失

    Smooth L1是L1的变形,用于Faster RCNN、SSD等网络计算损失
    在这里插入图片描述

    两者的区别

    L1零点不可导且斜率不变(容易使网络震荡而跳过了最优解,同时在还没达到最优解时,其Loss下降更快),L2则可导且可变(在接近最优解时,损失的变化越来越小,符合现实,更容易找到最优解,避免跳过最优解)。

    因此,结合两者优点,提出了Smooth L1。其兼顾了网络收敛速度和网络学习的稳定性。

    卷积神经网络发展历程

    常见的卷积神经网络

    在这里插入图片描述
    在学术界追求更复杂的网络,追求更高的精准度,而在工业界,则是追求运行速度。

    LeNet

    麻雀虽小五脏俱全,是由LeCun在1998年提出,用于解决手写数字识别,MNIST
    在这里插入图片描述

    AlexNet

    2012年,Hinton的学生Alex Krizhevsky在寝室用GPU死磕出一个DeepLearning模型,一句摘下视觉领域竞赛ILSVRC 2012的桂冠。
    在这里插入图片描述
    当时是通过两个显卡分别训练(目前一个就行)

    网络结构:con - relu - pooling - LRN(归一化)
    fc - relu - dropout
    fc - softmax(进行映射)

    参数量60M以上,模型大小>200M

    特点:

    ReLu非线性激活函数:更快
    Dropout层防止过拟合:去掉fc层中的部分参数,主要搭配
    数据增强,减少过拟合
    标准化层(Local Response Normalization):放大主要单元

    意义:

    在这里插入图片描述

    ZFNet

    在AlexNet基础上进行细节调整,并且取得2013年ILSVRC的冠军
    从可视化的角度出发,解释CNN有非常好的性能的原因。
    在这里插入图片描述
    主要优化为,调整第一层卷积核大小为7*7,
    设置卷积参数stride = 2,从而获得更多的信息。

    ZFNet与特征可视化

    在这里插入图片描述

    结果:

    特征分层次体系结构,每层的特征不同
    深层特征更鲁棒,浅层次会受到大的影响,深层次的特征不敏感
    深层次更有区分度
    深层次特征收敛更慢

    同时,随着网络层次更深,也就使模型更加的难以训练

    特征:

    低层次特征:颜色,纹理
    中层次特征:降维,优化学习后
    高层次特征:进行抽象之后的到的词组语义特征

    VGGNet

    由牛津大学计算机视觉和Google Deepmind 共同设计
    为了研究网络深度对模型准确度的影响,并采用小卷积堆叠的方式来搭建整个网络结构

    参数量:138M
    模型大小>500M

    在这里插入图片描述

    特点:

    更深的网络结构,结构更加规整、简单;
    全部使用44的小型卷积核和22的最大池化层;
    每次池化后Feature Map宽高降低一半,通道数量增加一倍;
    网络层数更多、结构更深,模型参数量更大。

    意义

    证明了更深的网络,能够提取更好的特征
    成为后续很多网络的backbone
    规范化了后续网络设计的思路

    GoogLeNet/Inception v1

    在设计网络结构时,不仅强调网络的深度,也会考虑网络的宽度,并将这种结构定义为Inception结构(一种网中网的结构,即原来的节点也是一个网络)

    14年的比赛冠军的model,这个model证明了一件事:用更多的卷积(宽度,同一层的channel),更深的层次(深度)可以得到更好的结构。(当然,它并没有证明浅的层次不能达到这样的效果)
    参数量:6.78M
    模型大小:50M
    在这里插入图片描述
    在这里插入图片描述

    特点:

    更深的网络结构
    两个LOSS层,降低过拟合风险
    考虑网络宽度
    巧妙地利用1*1地卷积核来进行通道降维,减小计算量(重点)

    Inception v2/v3

    在这里插入图片描述
    巧妙利用感受野,改变卷积大小,降低参数量以及计算量,同时也加深网络层次。

    从卷积的角度思考,如何减小网络中的计算量

    1.小卷积来对大卷积进行拆分;
    2.stride = 2代替pooling层,减小当前的计算量
    3.巧妙地利用1*1的卷积来进行特征的降维

    ResNet

    在2015年,由何凯明团队提出,引入跳连的结构防止梯度小时的问题,进而可以进一步加大网络深度。
    在这里插入图片描述
    跳连结构:将输入层的特征直接传递到输出层,并且与卷积之后的特征进行连接。虽然增加了结构关系,但是没有改变参数量

    ResNet的Bottleneck与恒等映射

    Bottleneck(包含1*1):跳级结构(Short-Cut)恒等映射(输出等于输入),解决梯度消失问题;
    在这里插入图片描述
    Tensorflow 运用
    在这里插入图片描述

    ResNet中的BatchNorm

    每个卷积之后都会配合一个BatchNorm层
    对数据scale和 分布进行约束
    简单的正则化,提高网络抗拟合能力

    设计特点

    核心单元简单堆叠
    跳连结构解决网络梯度消失问题
    Average Pooling 层代替FC层(减少参数量)
    BN层加快网络训练速度和收敛时的稳定性
    加大网络深度,提高模型特征抽取能力

    变种网络

    在这里插入图片描述
    分组卷积:将区域分成多分,使用不同的卷积进行运算。
    更多的跳连:引入更多的跳连,增加了密度
    Cccacbcbbabacbbaccbccaacbaacbc

    卷积神经网络结构对比

    在这里插入图片描述

    轻量型卷积神经网络

    1.更少的参数量:减少模型大小,减少占用内存
    2.更少的计算量:增强了推理速度
    3.移动端,嵌入式平台(减少功耗)

    代表性结构在这里插入图片描述

    SqueezeNet

    ICLR-2017,作者分别来自Berkeley和Stanford
    提出Fire Module,由两部分组成:Squeeze层和Expand层
    在这里插入图片描述
    节省计算量
    在这里插入图片描述

    特点

    1*1卷积减少计算量
    不同size的卷积,类似inception
    deep compression技术
    在这里插入图片描述

    MobileNet

    由Google团队提出,并发表于CVPR-2017
    在这里插入图片描述
    进行分组,每一组学习一个卷积核,最后进行concat.
    在这里插入图片描述
    如上,将标准的卷积进行分组分成两个组:

    Depth-wise Convolution:
    分成channel个组,每一组包括一个feature map,学习一个卷积核。

    Point-wise Convolution(11卷积):
    一个feature map对应一个组,但是channel之间的关系无法实现。通过该方法,对channel之间的信息进行学习,使用1
    1的卷积。

    节省的计算量:

    在这里插入图片描述

    MobileNet-v1实验对比

    在这里插入图片描述

    MobileNet v2

    在这里插入图片描述
    红色PW增加channel数量。
    在这里插入图片描述

    ShuffleNet v1

    由旷视科技提出的一种轻量型卷积网络
    深度卷积来代替标准卷积
    分组卷积+通道shuffle
    在这里插入图片描述
    shuffle将通道打乱,并不是随机打乱,将特定的组合理分配到特定的组,如下图
    在这里插入图片描述

    实验效果

    在这里插入图片描述

    ShuffleNet v2

    对ShuffleNet v1的优化
    ECCV 2018
    解释了如何其设计轻量型卷积网络的几个标准和规范

    设计标准

    相同的通道宽度可最小化访问成本(MAC)
    过度的组卷积会增加MAC
    网络碎片化(例如GoogLeNet的多路径结构)会降低并行度
    元素级运算不可忽视
    在这里插入图片描述
    在这里插入图片描述

    Xception

    由Google提出,arXiv的V1版本于2016年10月公布。
    同样借鉴深度卷积的思想,但是又存在查一,具体如下:
    Xception先采用11卷积,再进行主通道卷积;
    Xception在1
    1卷积后,加入Relu;
    在这里插入图片描述

    多分支卷积神经网络

    从结构上的创新
    Siamese Net:两支
    Triplet Net:三支
    Quadruplet Net:四支
    多任务网络:多支

    Siamese Net(孪生网络)

    在这里插入图片描述
    主要解决度量问题,比如图像检索,人脸识别。输入两个分支,输出为两个图像的关系(常见的为度量相似度),对每一个图像进行特征提取,最后求解特征向量的距离(常用的为欧式是距离)。

    度量问题

    常规的问题:
    分类问题在这里插入图片描述
    回归问题
    在这里插入图片描述
    度量问题:除去以上两个问题,即为度量问题。

    余弦距离

    欧式距离的范围是从0到正无穷的,而余弦距离是从0到1的(符合概率)在这里插入图片描述
    余弦距离,也称余弦相似度,是用向量空间中两个向量夹角的于现址作为衡量两个个体间差异的大小的度量。(人脸识别中常用)

    余弦距离-扩展loss

    在这里插入图片描述

    Triple Net

    z
    输入三个分支Anchor,Negative,Positive.
    其中,Anchor与Positive为同类,Anchor与Negative为 不同类,而该网络特点是将同类距离缩小,不同类距离放大。
    在这里插入图片描述
    网络结构

    在这里插入图片描述
    特点
    提取Embedding Feature
    细粒度的识别任务(同类判定)
    正负样本比例失衡-难例挖掘(人脸解锁)

    Quadruplet Net

    相比Triplet Net多加入一张负样本
    正度样本之间的绝对距离
    在这里插入图片描述

    多任务网络

    在这里插入图片描述
    两种:
    1.多分支->多输出 (参数共享):不同的分支进行不同的任务,常见的为行人人脸识别。
    2.单分支->多输出:根据不同的任务拉出不同的输出,常见的为目标检测。

    卷积神经网络的Attention机制

    人类大脑在接受和处理外界型号时的一种机制
    在这里插入图片描述
    上图中的热力图便是最先Attention的地方。
    类似的salience(感兴趣区域).
    最后的输出为one-hot或者soft的软分布

    实现机制

    保留所有分量均做权(soft attention)
    在分布中以某种采样策略选区部分分量(hard attention)
    如对原图、特征图、空间尺度、通道、特征图上的每个元素、不同历史时刻进行加权。

    实现方法

    在这里插入图片描述
    在这里插入图片描述

    神经网络的压缩方法

    学院派(提高精度)VS工程派(提高速度)

    方法
    模型剪枝

    除无意义的权重和激活来减少模型的大小

    1.贡献度排序
    2.去除小贡献度单元
    3.重新fine-tuning
    在这里插入图片描述

    技巧

    全连接部分通常会存在大量的参数冗余
    对卷积窗口进行剪枝的方式,可以是减少卷积窗口权重,或者直接丢弃卷积窗口的某一维度;
    丢弃系数的卷积窗口,但这并不会使模型运行速度有数量级的提升;
    首先训练一个较大的神经网络模型,再逐步剪枝得到的小模型

    模型量化/定点化

    减少数据再内存中的位数操作,可以采用8位类型来表示32位浮点(定点化)或者直接训练低于8位的模型,比如:2bit模型,4bit模型等

    特点:
    减少内存开销,节省更多的带宽
    对于某些定点运算方式,甚至可以消除乘法操作,只剩加法操作,
    某些二值模型,直接使用位操作
    代价通常使位数越低,精度下降越明显。

    方法

    再tensorflow中,通常是采用引入量化层的方式来更改计算图,进而达到量化的目的。
    在这里插入图片描述

    知识蒸馏

    采用一个大的、复杂的网络模型来指导一个小的、精简的网络模型进行模型训练和学习(教室网络)
    在这里插入图片描述

    展开全文
  • 骆驼祥子内容概括和读后感范文 《骆驼祥子》是老舍写的一本很经典的中国名著。“祥子”是名字,而“骆驼”只是外号。书中蕴含的精神意义不知激励了多少人。下面是为大家准备以下的内容骆驼祥子内容概括和读后感,仅...
  • 骆驼祥子内容概括和有感500字六篇 《骆驼祥子》是老舍写的一本很经典的中国名著。“祥子”是名字,而“骆驼”只是外号。书中蕴含的精神意义不知激励了多少人。下面是为大家准备以下的内容骆驼祥子内容概括和有感,仅...
  • 数据库系统概论第一章内容概括 1.数据库系统 1.1概念: 数据库系统是由数据库(DataBase),数据据库管理系统(DataBase Management System),数据库管理员(DataBase Administrator),以及调用数据库的应用程序组成 1.2特点...

    数据库系统概论第一章内容概括

    1.数据库系统

    1.1概念:

    数据库系统是由数据库(DataBase),数据据库管理系统(DataBase Management System),数据库管理员(DataBase Administrator),以及调用数据库的应用程序组成

    1.2特点:

    a.能够实现数据的结构化(主要特征)

    b.数据共享性高,冗余度低且方便修改

    c.数据的独立性高(通过三级模式和二级映像把数据从应用程序里面独立开来,方便了应用程序的修改)

    2.数据模型

    第一类:概念模型

    对现实信息世界建模,来表达现实世界的一些概念,

    一个陌生概念:码(key) ——唯一标识实体的属性的集

    一种表示方法:实体-联系方法,通过ER图来实现,ER方法也可表示为ER模型

    第二类:逻辑模型和物理模型

    2.1组成元素

    a.数据结构

    b.数据操作

    c.数据的完整性约束条件

    2.2常用的数据模型

    层次模型

    网状模型

    关系模型(用的最多)

    面向对象数据模型

    ……

    3.数据库系统的结构(三级模式和二级映像)

    1.模式是描述数据的全局逻辑结构,是数据库系统模式结构的中间层,它与应用程序和硬件无关但却起着承上启下的作用;

    2.外模式描述的是数据库的局部逻辑结构,一个模式可以有多个外模式(通过外模式/模式映像定义他们之间的关系),模式改变时只需要改变时,只需要改变外模式/模式映像即可,而无需改变应用程序(保证了数据与程序的逻辑独立性)

    3.内模式在一个数据库系统中只存在一个,他描述了数据在数据库系统内部的组织方式.当存储结构改变,只需修改模式/内模式映像即可,而无需修改模式和应用程序(保证了数据的物理独立性)

    展开全文
  • 一个偶然的机会读了代码整洁之道,觉得这本书写的很好,所以就将里面自己觉得很经典的内容记录下来,作为自己以后写代码的标准和准则。同时也为那些曾经困惑过的人一点参考吧~!1.需求与代码哪个重要?答:并不是...
  • opencv各章学习的内容概括与汇总

    千次阅读 2015-10-29 09:33:38
    opencv各章学习的内容概括与汇总

    opencv各章学习的内容概括与汇总

    OpenCv中文论坛精华地址
    http://www.opencv.org.cn/index.php/User:Ollydbg23
    http://sivp.sourceforge.net/(sivp)

    一、基础操作
    1. 数据类型 数据结构了解
       图像相关:cvArr  cvMat IplImage
       
       数据数组的维数, 与数据的通道数 见P46 (76)

    2. 常见的矩阵操作熟悉
       
    3. 数据的保存和读取

    4. 图像的加载和显示

    5. 视频的操作

    6. 内存与序列
       a. 内存存储器
          CvMemStorage

          双向链表  动态对象(cvSeq  cvSet)的内存
          cvCreateMemStorage
          cvReleaseMemStorage
          cvClearMemStorage  不返还系统
          cvMemStorageAlloc

       b. 序列
          是内存存储器可以存储的一种对象。 双端队列
          CvSeq
          
          方法:
          cvCreateSeq
          cvClearSeq
          cvGetSeqElem
          cvCloneSeq cvSeqSlice cvSeqRemoveSlice cvSeqInsertSlice 
          cvSeqSort 
          cvSeqSearch 
          cvSeqInvert
          cvSeqPartition
          堆栈操作   cvSeqPush cvSeqPushFront  cvSeqPop  cvSeqPopFront  cvSeqPushMulti  cvSeqPopMulti
          cvSeqInsert cvSeqRemove
          cvSetSeqBlockSize
          读出和写入:  CvSeqWriter结构  cvStartWriteSeq  cvStartAppendToSeq  cvEndWriteSeq  cvFlushSeqWriter
                                        CV_WRITE_SEQ_ELEM  CV_WRITE_SEQ_ELEM_VAR
                       CvSeqReader结构  cvStartReadSeq   cvGetSeqReaderPos   cvSetSeqReaderPos 
                                        CV_NEXT_SEQ_ELEM V_PREV_SEQ_ELEM CV_READ_SEQ_ELEM CV_REV_READ_SEQ_ELEM
          数组互相转换 cvCvtSeqToArray  cvMakeSeqHeaderForArray


    二. 图像的处理
    1. 图像的平滑  cvSmooth
        
       主要应用: 去除噪声, 失真,降低图像的分辨率。
       主要方法: CV_BLUR   CV_BLUR_NO_SCALE  CV_MEDIAN  CV_GAUSSIAN  CV_BILATERAL

    2. 图像形态学 cvErode  cvDilate  cvMorphologyEx
       主要作用: 消除噪声  分割等
       相关方法
       a. 腐蚀    消除噪声斑点
       b. 膨胀    连通被噪声、阴影分割的区域
       c. 开运算  先腐蚀后膨胀
       d. 闭运算  先膨胀后腐蚀
       e. 形态梯度 
       f. "礼貌" 
       g. "黑帽" 

    3. 漫水填充算法  cvFloodFill
       作用: 标记或者分离图像的一部分。 从输入图像获取掩码区域。
       原理:  把邻近区域所有相似点填充为种子点同样的颜色。

    4. 尺寸调整  cvResize
       ROI的影响
       
       插值方法的选择

    5. 图像金字塔  cvPyrDown  cvPyrUp  cvPyrSegmentation
       简介:源于同一原始图像的连续降采样获得的一个图像的集合。
       方法:高斯图像金字塔  拉普拉斯图像金字塔
       应用:图像分割

    6. 阀值化 cvThreshold  cvAdaptiveThreshold
       一般阀值化
       自适应阀值化: 针对有很强照明或反射梯度的图像,需要根据梯度进行阀值化


    三、图像的变换
    1. 卷积 cvFilter2D
       数学公式: z(t)=f(t)*g(t)= ∫f(m)g(t-m)dm
                 h(x)=(f*g)(x)
       描述:变换的基础
       卷积核: 参考点  核支撑
       计算方法:图像参考点 = Σ 核点*对应图像点 
        
       卷积边界:  cvCopyMakeBorder

    2. 梯度和Sobel导数  cvSobel
       导数的计算:最重要且是最基本的卷积
       注意: Sobel导数并不是真正的导数,它是离散空间的拟合。
              用大核可以对导数有更好的逼近。
       scharr滤波器: sobel算子小核时精度低,应使用scharr滤波器。

    3. 拉普拉斯变换  cvLaplace
       描述: 二阶导数  二阶Sobel导数
       应用:  检测"团块"  边缘检测

    4. Canny算子 cvCanny
       描述: 轮廓拼装
       应用:  边缘检测

    5. 霍夫变换
       应用: 在图像中寻找直线、圆等其他简单图形的方法。
       霍夫线变换 cvHoughLines2

       霍夫圆变换 (霍夫梯度法) cvHoughCircles

    6. 重映射 cvRemap
       
    7. 拉伸 收缩 扭曲 旋转
       仿射变换  
       
         稠密仿射变换: cvWarpAffine
                       计算变换矩阵: cvGetAffineTransform  cv2DRotationMatrix
         
         稀疏仿射变换: cvTransform
                       应用于一系列孤立点的映射

       透射变换: 
         密集透射变换:  cvWarpPerspective
                       计算变换矩阵: cvGetPerspectiveTransform
         稀疏透射变换:  cvPerspectiveTransform

    8. cvCartToPolar cvPolarToCart
       笛卡尔坐标系和极坐标系的转换

    9. LogPolar
       对数极坐标变换  cvLogPolar

    10. 离散傅立叶变换 DFT
        http://wenku.baidu.com/view/e3b7f0fdc8d376eeaeaa3187.html
        http://wlsyzx.yzu.edu.cn/kcwz/szxhcl/kechenneirong/jiaoan/jiaoan3.htm

        cvDFT函数(实现了FFT算法)

        cvGetOptimalDFTSize  cvGetSubRect

        cvMulSpectrums

    11. 离散余弦变换 DCT
        实数的处理  cvDCT

    12. 积分图像  cvIntegral
        作用:子区域的快速求和
        应用:人脸识别

    13. 距离变换  cvDistTransform
        输入为边缘检测的图像

    14. 直方图均衡化 cvEqualizeHist
        应用:图像亮度分布比较集中, 将亮度分布范围拉宽
         
    四、直方图
        直方图:信息的一种表达方式,数据分布的统计图。 
                对边缘 色彩  角  亮度等特征的统计

        bin:区间 即竖条

    1. 数据结构
       CvHistogram
       
    2. 操作函数
       cvCreateHist
       cvQueryHistValue_1D
       cvGetHistValue_1D
       cvNormalizeHist
       cvThreshHist 
       cvCopyHist
       cvGetMinMaxHistValue
       cvCalcHist

       cvCompareHist  (五种比较方法: CV_COMP_CORREL CV_COMP_CHISQR CV_COMP_INTERSECT CV_COMP_BHATTACHARYYA EMD)
                      寻找相关和匹配

    3. 应用
       HSV: H(色调)    S(饱和度)     V(亮度值)
       a. EMD 方法  利用直方图的距离测量来代替直方图的匹配策略
          光线的变化引起图像颜色值的变化
          cvCalcEMD2

       b. 反向投影(back projection)
          寻找目标 
          cvCalcBackProject()计算一个像素是否是一个已知目标的一部分
          cvCalcBackProjectPatch()计算一块区域是否包含已知的目标  (区域检测器  目标检测器)

          得到目标图像的概率值, 用cvMinMaxLoc()确定目标在图像的位置

       c. 模板匹配 cvMatchTemplate
          不是基于直方图。通过在输入图像上滑动图像快对实际的图像快和输入图像进行匹配。
          
          cvNormalize


    五、轮廓 cvFindContours()
       根据边缘像素(canny)组装成轮廓。
       用序列的数据结构表示轮廓信息。
       处理的图像: cvCanny()输出图像或者 cvThreshold() cvAdaptiveThreshold()的输出图像

       重要概念:轮廓树
                 外轮廓(c)  内轮廓(h  hole)

    1. cvFindContours()
       输入图像 8通道 二值化的图像

    2. 方法
       cvFindContours
       cvStartFindContours
       cvFindNextContour
       cvSubstituteContour
       cvEndFindContour
       cvApproxChains

    3. 绘制轮廓
       cvDrawContours

    4. 轮廓的识别和处理
       简化或拟合轮廓,匹配轮廓到模板
       a. 多边形逼近
         cvApproxPoly
         cvFindDominantPoints 寻找关键点
       
       b. 特性概括
          长度  其他度量  轮廓矩

          长度 cvContourPerimeter() cvArcLength
          面积 cvContourArea
          边界框 cvBoundingRect  cvMinAreaRect2
                 cvMinEnclosingCircle 最小包围圆
                 cvFitEllipse2  最佳拟合圆

       c. 几何  几个实用函数
          cvMaxRect
          cvBoxPoints
          cvPointSeqFromMat
          cvPointPolygonTest


    5. 轮廓匹配
       a. 矩
          轮廓矩:比较2个轮廓最简单的方式

          struct CvMoments

          cvContoursMoments  输入的是轮廓(CvSeq表示)
          cvMoments          输入的是图像
          cvGetCentralMoment
          cvGetNormalizedCentralMoment
          cvGetHuMoments     Hu矩是中心矩和归一化矩的线性组合

       b. cvMatchShapes 用Hu矩匹配
       
       c. 等级匹配
          轮廓树:此处的概念和之前的不同。
          轮廓树的创建过程。
          比较2个树的相似度。
          cvCreateContourTree  创建轮廓树
          cvContourFromContourTree
          cvMatchContourTrees  比较


    六、图像的局部和分割
        如何从图像中将目标或部分目标分割出来。
    1. 背景减除

       快速背景建模方法:光照变化不大的室内
       codebook方法:    室内外环境,周期性运动 灯光缓慢变化(速度较慢)
       
       背景和前景

       a. 背景减除缺点
       假设:所有像素是独立的。
       
       亮度的变化

       b. 场景建模
       前景与背景的转化
       新的前景-旧的前景-背景

       c. 像素片段
        像素在一段时间内变化。
        对这种波动建立模型。
        cvInitLineIterator
        CV_NEXT_LINE_POINT()
     
       d. 帧差
       最简单的背景减除方法就是用一帧减去另一帧,将差别作为前景。
       cvAbsDiff

       e. 平均背景法
       适用于:背景场景不包含运动的部分,要求光线保持不变。
       cvAcc() cvAbsDiff() cvInRange()

       其他类似cvAcc()的累积函数:cvRunningAvg  cvSquareAcc  cvMultiplyAcc

       f. 高级背景建模(codebook算法)
         
     http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4648&sid=3d75687ebbd68be7b92b817ec0b10dba
          适用于:有运动目标(摇曳的树),有光线的变化

          方法: 得到每个像素或一组像素的时间序列模型。(消耗大量内存)
          codebook(编码本): 一个像素现在的观测值和先前的观测值的比较。
          RGB空间
          YUV空间、
          HSV空间(与亮度相关)  // hue色度,saturation纯度,value亮度   
        
         codebook算法(注意 它不能处理不同模式的光)
         f.1 结构
          struct code_book
          struct ce

         f.2 方法
          update_codebook:      定时调用,训练和学习  (创建codebook模型)
          clear_stale_entries: 调用update_codebook一段时间后,调用这个函数做清除操作 (清除很少使用的码本条目)
          background_diff:      使用经验模型在先前的背景中将前景目标的像素分割出来

         f.3 codebook算法操作步骤
              见P318(348 )
         
       g. 清除前景的连通部分 (学习开运算 闭运算 轮廓 好的例程)
           功能强大的在背景中去除噪声的技术
          find_connected_components

    2. 分水岭算法    cvWatershed
       标记图像, 根据标记来分割图像

    3. 用Inpainting来修补图像 cvInpaint()
       修复图像

    4. 均值漂移分割 
       cvPyrMeanShiftFiltering:   finds the peaks of color distributions over space (从空间考虑)
       cvMeanShift (运动跟踪章节): finds the peak of a color-spatial (or other feature) distribution over time(时间考虑)

       参考图像金字塔(cvPyrUp, cvPyrDown)

    5. Delaunay三角剖分和Voronoi划分
       Delaunay三角剖分是表现三维形状的基础, 是连接计算机视觉与计算机图形学的桥梁。

       opencv仅实现了二维的Delaunay三角剖分.

       二维的Delaunay三角剖分的应用: 运动场景跟踪  目标识别  不同摄像机的场景匹配
                
    七、运动与跟踪
    1. 跟踪基础
       识别: 矩  颜色直方图
              跟踪视觉上重要的关键点,而不是整个物体。
              lucas-Kanade Horn-Schunk方法 (稀疏和稠密光流)
       建模:

    2. 寻找角点  cvGoodFeaturesToTrack
       关键点,特征点

       一个点在两个正交的方向都有明显的导数。
       Harris角点: 角点位于图像二阶导数的自相关矩阵有两个最大特征值的地方。
                   同时对移动和旋转不变

    3. 亚像素角点 cvFindCornerSubPix
       精确测量
       应用: 标定,跟踪,三维重建

    4. 不变特征
       SIFT

    5. 光流
       a. 稀疏光流
         a.1 LK算法 cvCalcOpticalFlowLK
             感兴趣点的小窗口。
             缺点: 点会移出小窗口
            a.1.1 原理
                  3个假设  亮度恒定;时间连续或者运动是"小运动;空间一致
                  v = - It/Ix

            a.1.2 一维光流
                  前2个假设
                  (迭代的方法解决假设不十分正确的情况)

            a.1.2 二维光流
                  考虑第3个假设解不定方程
                  
         a.2 金字塔LK算法 cvCalcOpticalFlowPyrLK
             解决大而不连贯的运动,即不满足小而连贯的假设
             
       b. 稠密光流
         b.1 Horm-Schunck
            cvCalcOpticalFlowHS
         b.2 块匹配方法
            cvCalcOpticalFlowBM

    6. MEAN-SHIFT  CAM-SHIFT
       a. mean-shift  cvMeanShift
       通用方法,可以跟踪物体的运动

       b. cam-shift cvCamShift
       建立在mean-shift之上,跟踪视频中尺寸可能产生变换的目标
       窗口可以调整

    7. 运动模板
       应用: 姿态识别
       实心轮廓的获取

       建立模板:cvUpdateMotionHistory (需要传入轮廓)
       计算梯度:cvCalcMotionGradient  
       分割:    cvSegmentMotion

    8. 预估器
       应用:目标跟踪
       
       分两个阶段: 预估阶段  校正阶段

       a. Kalman Filter

       b. Condensation Algorithm  粒子滤波(参考书 probalistic robotic)
          http://zhengjunliu360.blog.163.com/blog/static/53797102201032734617104/


    八、 标定
      
     http://www.vision.caltech.edu/bouguetj/calib_doc/
       http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=4603

       张正友经典的论文《A Flexible New Technique for Camera Calibration》
       
       针孔模型   
       透镜的畸变 
       标定过程: 摄像机几何模型  透镜的畸变模型
       单应变换   homograph transform

       2件事情: 矫正畸变效应;  
                 根据获得的图像重构三维场景

    1. 摄像机模型
       针孔模型
       主点: 光轴与图像平面的交点
       cx, cy: 芯片通常不在光轴上,故引入这2个变量
       fx = F * sx  fy = F * sy
       
       x = f*(X/Z)  ---> xs = fx*(X/Z) + cx

       a. 基本投影几何
          投影变换
          q = M*Q
          M 为(fx, fy, cx, cy)表示的摄像机内参数矩阵
          Q: 物理点
          q: 图像平面的点(用投影变换的n+1维坐标表示)

          cvConvertPointsHomogenious: 齐次坐标处理函数

       b. 透镜畸变
          针孔成像光线少,且成像慢,故使用透镜,但是会引入畸变。
     
          径向畸变:来自透镜的形状。
                    远离中心,畸变越厉害,便宜的网络摄像机非常厉害。
                    xc = x(1+k1*r*r+k2*r*r*r*r+k3*r*r*r*r*r*r) 注意r的影响

          切向畸变:来自整个摄像机的组装过程;透镜本身与图像平面不平行造成的。
                    xc = x+[2*p1*y+p2*(r*r+2x*x)]

          畸变向量: k1 k2 p1 p2 k3


    2. 标定 cvCalibrateCamera2
       标定方法: 摄像机对准一个有很多独立可标识点的物体。通过旋转和移动物体,
               在不同角度观看这个物体,可以利用通过每个图像计算摄像机的相对位置
               和方向以及摄像机的内参数。
           
       a. 旋转矩阵和平移向量
          摄像机坐标系  物体坐标系(世界坐标系)  <之前的公式是建立在一个坐标系的>
          Pc = R*(Po - T)
          3个旋转+3个平移  共6个参数

          6+4个内参数 = 10 至少需要2个视角??

       b. 棋盘 cvFindChessboardCorners
          OPENCV不是使用基于3D构造物体的视场,而是使用平面物体的多个视场。
          cvFindCornerSubPix()提高精度
          cvDrawChessboardCorners
          
       c. 单应性变换 homograph transform
          
          单应性:从一个平面到另一个平面的投影映射。 (Z = 0)
                  如二维平面上的点映射到摄像机成像仪上的映射。
                q = s*M*W*Q
                W = [R t] 物理变换
                M: 内参矩阵
         H = s*M*W 单应性矩阵
         关注点: 不是空间中所有的Q,而只是平面上的Q, 故使Z = 0。
         opencv 正是利用从多个视场计算多个单应性矩阵的方法来求解摄像机内参数。cvFindHomography

       d. 摄像机标定 cvCalibrateCamera2
          为摄像机内参数和畸变参数进行摄像机标定。
          d.1. 
           至少需要10幅 7X8的图像
          d.2 cvFindExtrinsicCameraParams2 只计算外参数

       
    3. 矫正
      a. cvUndistort2 
      b. cvInitUndistortMap   cvRemap
      c. cvUndistortPoints

    4. 标定完整程序

    5. cvRodrigues2
       函数提供2种表示之间的相互转换

       旋转的表示方法:
       直观的方法: 向量r表示
       简单的方法: 旋转矩阵R


    九、投影和三维视觉


    十、机器学习
    http://cs229.stanford.edu/materials.html 网络资料
    1. 基本概念
       目的:把数据转换为信息。  

    1.1 训练集和测试集
       特征
       "聚类"算法 "分类"算法

        训练集  测试集  (验证集)
        分类器

        训练分类器的方法

    1.2 监督数据和无监督数据
        监督数据:  数据有标签(人脸有年龄)     分类
        无监督数据: 数据无标签                 聚类

        分类  回归

        无监督的聚类数据经常形成一个特征向量供更高层的有监督的分类器使用。
       
        两个典型的机器学习任务:  分类  聚类
        计算机视觉的两个基本任务:识别  分割

    1.3 生成模型和判别模型
        判别算法
        产生式算法

    1.4 机器学习算法
        Mahalanobis       (归一化特征的方差) 非分类和聚类算法
        K均值             非监督的聚类方法
        朴素贝叶斯分类器  通用的分类器
        决策树            判别分类器
        Boosting          多个判别子分类器的组合
        随机森林          由决策树组成的"森林"
        人脸检测/Harr分类器   巧妙使用Boosting
        期望最大化(EM)    
        K近邻             最简单的分类器
        神经网络          (字符识别)
        支持向量机(SVM)   分类和递归

    1.5 视觉中使用机器学习算法
        (特征)
        采集数据      
     www.flicker.com(图片网站)
        给数据定标签  (http://www.mturk.com/mturk/welcome)
        提取特征 (直方图 色彩 ) 处理(归一化)
        训练集 测试集 验证集
        选择分类器(计算速度  数据形式 内存大小)

    1.6 特征向量的重要性
        决策树
        随机森林

        用途:减少分类器需要考虑的特征的个数。
        Breiman的变量重要性算法步骤:见P536 (P506)

    1.7 诊断机器学习中的问题
      Andrew Ng“Advice for Applying Machine Learning” 
     (http://www.stanford.edu/class/cs229/materials/ML-advice.pdf)
        a. 大量数据比少量数据好
        b. 好的特征比好的算法更重要

         选取特征:
                  最大化它们的独立性
                  最小化它们在不同环境之下的变化。
        c. 欠拟合   模型假设太严格
           训练和测试都不好
        d. 过拟合   学习了噪声等
           训练很好  测试不好
        e. 常见问题解决  见表13-2

        f. 评价分类器的性能
           交叉验证  自抽样法  ROC曲线  混淆矩阵


    2. ML

    2.1 函数 
        save
        load  (先调用clear)
        clear
        train
        predict
        CvStatModel
        write
        read

    2.2 train
        (行,列) =(数据样本,特征变量)

    2.3 predict

    2.4 迭代次数

    3. Mahalanobis
       有些分类器(K邻近)很难处理方差很大的数据
       cvCalcCovarMatrix  计算协方差矩阵
       cvInvert           计算逆矩阵
       cvMahalanobis

    4. K-mean   cvKMeans2
       聚类算法

       问题和解决: 方差最小

    5. 朴素贝叶斯分类
       最简单监督学习分类器

    6. 二叉决策树
       回归不纯度
       分类不纯度
       度量: 熵   吉尼系数  错分类

       特征的重要性  get_var_importance()
       过拟合: 先建立树,然后修剪



    展开全文
  • ? 1? 期末复习名著白洋淀纪事? 一作品简介? 白洋淀纪事是孙犁第一部比较完整的小说散文选集曾被评为百年百种优秀中国文学图书包括作者从1939年到1950年所写的绝大部分短篇小说散文特写通讯等其中共
  • 《C++面向对象程序设计》董正言、张聪版内容概括

    ##第一章 绪论

    1. 语言的发展

    	机器语言:二进制指令组成
    	汇编语言:操作硬件 助记符 冗长 执行效率高
    	高级语言:屏蔽细节 简化 翻译(解释型、编译型<整体翻译,一次执行>)
    

    2. 程序开发方法

    	面向过程:数据为中心 围绕过程        数据和操作分离
    	面向对象:对象为中心 对象演绎过程 数据和操作封装
    	形成对象 (特征:封装 抽象 继承 多态)
    

    3. 软件开发周期

    	Analysis ,Design ,Implementation ,Test ,Maintenance .
    

    4. 程序的开发过程

    	Edit .cpp
    	Compile .obj
    	Link .exe
    	Excute and Debug F10  F11
    


    第二章 基本数据类型和运算符

    1. 程序预览:

    	命名空间,定义全局变量,常量。
    

    2. 变量和常量:

    	内存格局(全局区,代码区,栈区(stack),堆区(heap))
    	变量的作用域,生命期
    	变量的分类(动态,静态,局部,全局)
    

    3. 输入输出流类库和cin,cout对象

    4. 运算符和表达式

    5. 类型转换

    	隐式 显式(C++提供转换新机制)
    


    第三章 控制语句

    1. 选择

    	if-else
    	switch (case ,break ,default)
    

    2. 循环

    	for ,while ,do-while ,单循环,嵌套循环
    

    3. 区别

    	break ,continue
    


    第四章 数组

    1. 一维数组的定义和应用

    	冒泡排序,选择排序
    

    2. 二维数组的定义和应用

    	寻找鞍点
    

    3. 字符数组和字符串

    	没有字符串变量,用字符数组表示,'\0'的处理
    


    第五章 函数

    值传递的特点:

      ①实参形参独立
      ②实参单项复制给形参(通过指针)
      ③随后二者切断联系
      ④调用结束,形参释放
    

    1. 函数的定义和调用

    2. 函数参数传递

    	值传递,引用传递
    

    3. 内联函数

    4. 函数重载

    	同作用域,同名参数个数和类型不同
    

    5. 函数的递归调用

    6. 函数参数的默认值



    第6章

    1. 面向过程VS面向对象

    2. 创建类

    	声明类成员,定义成员函数
    

    3. 创建对象

    	空间的大小取决于数据成员OR成员函数
    

    4. 构造函数

    	作用;由谁调用;形式;默认拷贝构造函数;带默认形参值的构造函数
    

    5. 拷贝构造函数

    	作用;有谁调用;形式;默认拷贝构造函数;浅拷贝与深拷贝;调用的三个时机
    
    展开全文
  • PMP项目管理考试最新第六版子过程记忆导图,方便大家记忆。后续还会继续上传。可以关注我。Word版本也有。
  • 报告详情: 【华泰金工林晓明团队】人工智能选股之卷积神经网络——华泰人工智能系列之十五 【华泰金工林晓明团队】人工智能选股之循环神经网络——华泰人工智能系列之九 卷积神经网络项目: ...
  • matlab学习内容概括

    2020-11-01 21:48:28
  • 以上内容概括: Java基础 一、语言基础、变量、控制语句、方法、数组 二、面向对象OOP 三、容器{后期开发存储数据分析数据的地方} 接下来进阶IO流
  • java学习内容概括

    2018-11-27 11:13:00
    转载于:https://www.cnblogs.com/icode-china/p/10025246.html
  • 可以把命名空间里面的内容释放出来 前者意思为把N这个命名空间的内容中的b拿出来该命名空间 即原本在调用b的时候应该写成N::b而此时直接写为b就可调用,当然N::b也不影响结果 但是可以简化代码。 后者就是将 B1中的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,465
精华内容 2,986
关键字:

内容概括