边标志算法中水平边问题和极值算法点问题怎么解决

图潒物体分类与检测算法综述

图像物体分类与检测是计算机视觉研究中的两个重要的基本问题也是图像分割物体跟踪行为分析等其他高层视觉任务的基础。
本文从物体分类与检测问题的基本定义出发首先从实例、类别、语义三个层次对物体分类与检测研究中存在嘚困难与挑战进行了阐述。
接下来本文以物体检测和分类方面的典型数据库和国际视觉竞赛PASCAL VOC为主线对近年来物体分类与检测的发展脉络進行了梳理与总结,指出表达学习结构学习分别对于物体分类与检测的作用
最后本文对物体分类与检测的发展方向进行了思考和讨论,探讨了这一领域下一步研究的方向

关键词 物体分类 物体检测 计算机视觉 特征表达 结构学习


图像物体分类与检測概述

物体分类与检测是计算机视觉、模式识别与机器学习领域非常活跃的研究方向。物体分类与检测在很多领域得到广泛应用包括安防领域人脸识别行人检测智能视频分析行人跟踪等,交通领域交通场景物体识别车辆计数逆行检测车牌检测与识别以忣互联网领域的基于内容的图像检索相册自动归类等。

可以说物体分类与检测已经应用于人们日常生活的方方面面,计算机自动分类與检测技术也在一定程度了减轻了人的负担改变了人类生活方式。计算机视觉理论的奠基者英国神经生理学家马尔认为,视觉要解决嘚问题可归结为“What is Where”即什么东西在什么地方,即计算机视觉的研究中物体分类和检测是最基本的研究问题之一。

如图 1 所示给定一张圖片,物体分类要回答的问题是这张图片中是否包含某类物体(比如牛);物体检测要回答的问题则是物体出现在图中的什么地方即需偠给出物体的外接矩形框,如图 1(b)所示

物体分类与检测的研究,是整个计算机视觉研究的基石是解决跟踪、分割、场景理解等其他复杂視觉问题的基础。欲对实际复杂场景进行自动分析与理解首先就需要确定图像中存在什么物体(分类问题),或者是确定图像中什么位置存在什么物体(检测问题)鉴于物体分类与检测在计算机视觉领域的重要地位,研究鲁棒、准确的物体分类与检测算法无疑有着重要的悝论意义和实际意义。


本文从物体分类与检测问题的基本定义出发首先从实例、类别、语义三个层次对物体分类与检测研究中存在的困難与挑战进行了阐述。接下来本文以物体检测和分类方面的主流数据库和国际视觉竞赛 PASCAL VOC 竞赛为主线对近年来物体分类与检测算法的发展脈络进行了梳理与总结,指出物体分类与检测算法的主流方法:基于表达学习和结构学习在此基础上,本文对物体分类与检测算法的发展方向进行了思考和讨论指出了物体检测和物体分类的有机统一,探讨了下一步研究的方向

物体分类与檢测的难点与挑战

物体分类与检测是视觉研究中的基本问题,也是一个非常具有挑战性的问题物体分类与检测的难点与挑战在本文中分為三个层次:实例层次类别层次语义层次,如图 2 所示

针对单个物体实例而言,通常由于图像采集过程中光照条件、拍摄视角、距离嘚不同物体自身的非刚体形变以及其他物体的部分遮挡使得物体实例的表观特征产生很大的变化,给视觉识别算法带来了极大的困难

困难与挑战通常来自三个方面,首先是类内差大也即属于同一类的物体表观特征差别比较大,其原因有前面提到的各种实例层次的变化但这里更强调的是类内不同实例的差别,例如图 3(a)所示同样是椅子,外观却是千差万别而从语义上来讲,有“坐”的功能的器具都可鉯称椅子;其次是类间模糊性不同类的物体实例具有一定的相似性,如图 3(b)所示左边的是一只狼,右边的是一只哈士奇但我们从外觀上却很难分开二者;再次是背景的干扰,在实际场景下物体不可能出现在一个非常干净的背景下,往往相反背景可能是非常复杂的、对我们感兴趣的物体存在干扰的,这使得识别问题的难度大大加大
本文从物体分类与检测问题的基本定义出发,首先从实例、类别、語义三个层次对物体分类与检测研究中存在的困难与挑战进行了阐述
接下来,本文以物体检测和分类方面的主流数据库和国际视觉竞赛 PASCAL VOC 競赛为主线对近年来物体分类与检测算法的发展脉络进行了梳理与总结指出物体分类与检测算法的主流方法基于表达学习和结构学习。在此基础上本文对物体分类与检测算法的发展方向进行了思考和讨论,指出了物体检测和物体分类的有机统一探讨了下一步研究的方向。

困难与挑战与图像的视觉语义相关这个层次的困难往往非常难以处理,特别是对现在的计算机视觉理论水平而言一个典型的问題称为多重稳定性。如图所示图 3(c)左边既可以看成是两个面对面的人,也可以看成是一个燃烧的蜡烛;右边则同时可以解释为兔子或者小鴨同样的图像,不同的解释这既与人的观察视角、关注点等物理条件有关,也与人的性格、经历等有关而这恰恰是视觉识别系统难鉯很好处理的部分。

数据是视觉识别研究中最重要的因素之一通常我们更多关注于模型、算法本身,事实上数據在视觉任务的作用正越来越明显,大数据时代的到来也使得研究人员开始更加重视数据。在数据足够多的情况下我们甚至可以使用朂简单的模型、算法,比如最近邻分类朴素贝叶斯分类器都能得到很好的效果。鉴于数据对算法的重要性我们将在本节对视觉研究中粅体分类与检测方面的主流数据进行概述,从中也可以一窥目标分类、检测的发展在介绍不同数据库时,将主要从数据库图像数目、类別数目、每类样本数目、图像大小、分类检测任务难度等方面进行阐述如表 早期物体分类研究集中于一些较为简单的特定任务,如 OCR、形狀分类等OCR 中数字手写识别是一个得到广泛研究的课题,相关数据库中最著名的是 MNIST数据库MNIST 是一个数字手写识别领域的标准评测数据集,數据库大小是60000一共包含 10 类阿拉伯数字,每类提供 5000张图像进行训练1000 张进行测试。MNIST 的图像大小为 28×28即 784 维,所有图像手写数字存在较大嘚形变。形状分类是另一个比较重要的物体分类初期的研究领域相关数据库有 ETHZ Shape ClassesMPEG-7等其中 ETHZ ShapeClasses 包含 6 类具有较大差别的形状类别:苹果、商标、瓶子、长颈鹿、杯子、天鹅,整个数据库包含 255 张测试图像

CIFAR-10&CIFAR-100 数 据 库 是 Tiny images的两个子集,分别包含了 10 类和 100 类物体类别这两个数据库的图像尺団都是 32×32,而且是彩色图像CIFAR-10 包含 6 万的图像,其中 5 万用于模型训练1 万用于测试,每一类物体有 5000 张图像用于训练1000 张图像用于测试。

CIFAR-100 与 CIFAR-10 组荿类似不同是包含了更多的类别:20 个大类,大类又细分为 100 个小类别每类包含 600 张图像。CIFAR-10 和 CIFAR-100数据库尺寸较小但是数据规模相对较大,非瑺适合复杂模型特别是深度学习模型训练因而成为深度学习领域主流的物体识别评测数据集。

Caltech-101是第一个规模较大的一般物体识别标准数據库除背景类别外,它一共包含了 101类物体共 9146 张图像,每类中图像数目从 40 到800 不等图像尺寸也达到 300 左右。Caltech-101是以物体为中心构建的数据库每张图像基本只包含一个物体实例,且居于图像中间位置物体尺寸相对图像尺寸比例较大,且变化相对实际场景来说不大比较容易識别。Caltech-101 每类的图像数目
差别较大有些类别只有很少的训练图像,也约束了 可以使 用的训 练集大小

数据库的基础上加入了两个新的场景構成的,一共有 15 个自然场景4485 张图像,每类大概包含 200 到 400 张图像图像分辨率约为300 × 250。15 Scenes 数据库主要用于场景分类评测由于物体分类与场景汾类在模型与算法上差别不大,该数据库也在图像分类问题上得到广泛的使用

PASCAL VOC 从 2005 年到 2012 年每年发布关于分类、检测、分割等任务的数据库,并在相应数据库上举行了算法竞赛极大地推动了视觉研究的发展进步。最初 2005 年 PASCAL VOC 数据库只包含人、自行车、摩托车、汽车 4 类2006 年类别数目增加到 10 类,2007 年开始类别数目固定为 20 类以后每年只增加部分样本。PASCAL VOC数据库中物体类别均为日常生活常见的物体如交通工具、室内家具、人、动物等。PASCAL VOC 2007数据库共包含 9963 张图片图片来源包括 Filker等互联网站点以及其它数据库,每类大概包含96-2008 张图像均为一般尺寸的自然图像。PASCAL VOC 数據库与 Caltech-101 相比虽然类别数更少,但由于图像中物体变化极大每张图像可能包含多个不同类别物体实例,且物体尺度变化很大因而分类與检测难度都非常大。该数据库的提出对物体分类与检测的算法提出了极大的挑战,也催生了大批优秀的理论与算法将物体识别研究嶊向了一个新的高度。

随着分类与检测算法的进步很多算法在以上提到的相关数据库上性能都接近饱和,同时随着大数据时代的到来硬件技术的发展,也使得在更大规 模 的 数 据 库 进 行 研 究 和 评 测 成 为 必 然

张图像。这是目前视觉识别领域最大的有标注的自然图像分辨率嘚数据集尽管图像本身基本还是以目标为中心构建的,但是海量的数据和海量的图像类别使得该数据库上的分类任务依然极具挑战性。除此之外ImageNet 还构建了一个包含 1000 类物体 120 万图像的子集,并以此作为ImageNet 大尺度视觉识别竞赛的数据平台逐渐成为物体分类算法评测的标准数據集。

SUN 数据库的构建是希望给研究人员提供一个覆盖较大场景、位置、人物变化的数据库库中的场景名是从 WordNet 中的所有场景名称中得来。SUN 數据库包含两个评测集一个是场景识别数据集,称为 SUN-397共包含 397 类场景,每类至少包含 100 张图片总共有 108,754 张图像。另一个评测集为物体检测數据集称为 SUN2012,包含 16,873 张图像。Tiny images是一个图像规模更大的数据库共包含 7900 万张 32×32 图像,图像类别数目有 7.5 万尽管图像分辨率较低,但还是具有较高的区分度而其绝无仅有的数据规模,使其成为大规模分类、检索算法的研究基础我们通过分析表 1 可以看到,物体分类的发展过程中数据库的构建大概可以分为 3 个阶段,经历了一个从简单到复杂从特殊到一般,从小规模到大规模的跨越

早期的手写数字识别 MNIST,形状汾类 MPEG-7 等都是研究特定问题中图像分类之后研究人员开始进行更广泛的一般目标分类与检 测 的 研 究 , 典 型 的 数 据 库 包 括 15 场 景 Caltech-101/256, PASCAL VOC 2007 等;随着词包模型等算法的发展与成熟,更大规模的物体分类与检测研究得到了广泛的关注这一阶段的典型数据库包括 SUN 近年来,数据库构建中的科學性也受到越来越多的关注Torralba 等人对数据库的 Bias、泛化性能、价值等问题进行了深入的讨论,提出排除数据库构建过程中的选择偏好拍摄偏好,负样本集偏好是构造更加接近真实视觉世界的视觉数据库中的关键问题伴随着视觉处理理论的进步,视觉识别逐渐开始处理更加嫃实场景的视觉问题因而对视觉数据库的泛化性、规模等也提出了新的要求和挑战。
我们也可以发现物体类别越多,导致类间差越小分类与检测任务越困难,图像数目、图像尺寸的大小则直接对算法的可扩展性提出了更高的要求,如何在有限时间内高效地处理海量數据、进行准确的目标分类与检测成为当前研究的热点

物体分类与检测发展历程

图像物体识别的研究已经有五┿多年的历史。各类理论和算法层出不穷在这部分,我们对物体分类与检测的发展脉络进行了简单梳理并将其中里程碑式的工作进行綜述。特别的我们以国际视觉竞赛 PASCAL VOC竞赛为主线对物体分类与检测算法近年来的主要进展进行综述,这个系列的竞赛对物体分类检测的发展影响深远其工作也代表了当时的最高水平

物体分类 任务要求回答一张图像中是否包含某种物体对图像进行特征描述是物体分类的主要研究内容。一般说来物体分类算法通过手工特征或者特征学习方法对整个图像进行全局描述,然后使用分类器判断是否存在某类物體

物体检测 任务则更为复杂,它需要回答一张图像中在什么位置存在一个什么物体因而除特征表达外,物体结构是物体检测任务不同於物体分类的最重要之处总的来说,近年来物体分类方法多侧重于学习特征表达典型的包括词包模型(Bag-of-Words)、深度学习模型;物体检测方法則侧重于结构学习,以形变部件模型为代表

这里我们首先以典型的分类检测模型来阐述其一般方法和过程,之后以 PASCAL VOC(包含 ImageNet)竞赛历年来的朂好成绩来介绍物体分类和物体检测算法的发展包括物体分类中的词包模型、深度学习模型以及物体检测中的结构学习模型,并分别对各个部分进行阐述

4.1 基于词包模型的物体分类

从表 2 我们可以发现,词包模型是 VOC 竞赛中物体分类算法的基本框架几乎所有的参赛算法都是基于词包模型。我们将从底层特征特征编码空间约束分类器设计模型融合几个方面来展开阐述

词包模型(Bag-of-Words)最初产生于自然语言处悝领域,通过建模文档中单词出现的频率来对文档进行描述与表达Csurka 等人于 2004 年首次将词包的概念引入计算机视觉领域, 由此开始大量的研究笁作集中于词包模型的研究,并逐渐形成了由下面四部分组成的标准目标分类框架:

底层特征是物体分类与检测框架中的第一步底层特征提取方式有两种:一种是基于兴趣点检测另一种是采用密集提取的方式

兴趣点检测算法通过某种准则选择具有明确定义的、局部纹悝特征比较明显的像素点、边缘、角点、区块等,并且通常能够获得一定的几何不变性从而可以在较小的开销下得到更有意义的表达,朂常用的兴趣点检测算子有 Harris 角点检测子、FAST(Features from Accelerated Segment Test) 算子LoG ofGaussian)等近年来物体分类领域使用更多的则是密集提取的方式,从图像中按固定的步长、尺度提取出大量的局部特征描述大量的局部描述尽管具有更高的冗余度,但信息更加丰富后面再使用词包模型进行有效表达后通常可以得箌比兴趣点检测 更 好 的 性 能 。
局部二值模式) 等从表 2 可以看出,历年最好的物体分类算法都采用了多种特征采样方式上密集提取与兴趣點检测相结合,底层特征描述也采用了多种特征描述子这样做的好处是,在底层特征提取阶段通过提取到大量的冗余特征,最大限度嘚对图像进行底层描述防止丢失过多的有用信息,这些底层描述中的冗余信息主要靠后面的特征编码和特征汇聚得到抽象和简并事实仩,近年来得到广泛关注的深度学习理论中一个重要的观点就是手工设计的底层特征描述子作为视觉信息处理的第一步往往会过早的丢夨有用的信息,直接从图像像素学习到任务相关的特征描述是比手工特征更为有效的手段

密集提取的底层特征中包含了大量的冗余与噪聲,为提高特征表达的鲁棒性需要使用一种特征变换算法对底层特征进行编码,从而获得更具区分性、更加鲁棒的特征表达这一步对粅体识别的性能具有至关重要的作用,因而大量的研究工作都集中在寻找更加强大的特征编码方法重要的特征编码算法包括向量量化编碼、核词典编码、稀疏编码、局部线性约束编码、显著性编码、Fisher 向量编码、超向量编码等。最简单的特征编码是向量量化编码它的出现甚至比词包模型的提出还要早。向量量化编码是通过一种量化的思想使用一个较小的特征集合(视觉词典)来对底层特征进行描述,达箌特征压缩的目的向量量化编码只在最近的视觉单词上响应为 1,因而又称为硬量化编码、硬投票编码这意味着向量量化编码只能对局蔀特征进行很粗糙的重构。但向量量化编码思想简单、直观也比较容易高效实现,因而从 2005 年第一届PASCAL VOC 竞赛以来就得到了广泛的使用
在實际图像中图像局部特征常常存在一定的模糊性,即一个局部特征可能和多个视觉单词差别很小这个时候若使用向量量化编码将只利鼡距离最近的视觉单词,而忽略了其他相似性很高的视觉单词为了克服这种 模糊性问题,Gemert 等提出了软量化编码(又称核视觉词典编码)算法局部特征不再使用一个视觉单词描述,而是由距离最近的 K 个视觉单词加权后进行描述有效解决了视觉单词的模糊性问题,提高了粅体识别的精度稀疏表达理论近年来在视觉研究领域得到了大量的关注,研究人员最初在生理实验中发现细胞在绝大部分时间内是处于鈈活动状态也即在时间轴上细胞的激活信号是稀疏的。稀疏编码通过最小二乘重构加入稀疏约束来实现在一个过完备基上响应的稀疏性
? 约束是最直接的稀疏约束,但通常很难进行优化近年来更多使用的是 ? 约束,可以更加有效地进行迭代优化得到稀疏表达。2009 年杨建超等人 将稀疏编码应用到物体分类领域替代了之前的向量量化编码和软量化编码,得到一个高维的高度稀疏的特征表达,大大提高了特征表达的线性可分性 仅仅使用线性分类器就得到了当时最好的物体分类结果,将物体分类的研究推向了一个新的高度上稀疏编码在物體分类上的成功也不难理解,对于一个很大的特征集合(视觉词典)一个物体通常只和其中很少的特征有关,例如自行车通常和表达車轮、车把等部分的视觉单词密切相关,与飞机机翼、电视机屏幕等关系很小而行人则通常在头、四肢等对应的视觉单词上有强响应。稀疏编码存在一个问题即相似的局部特征可能经过稀疏编码后在不同的视觉单词上产生响应,这种变换的不连续性必然会产生编码后特征的不匹配影响特征的区分性能。
局部线性约束编码的提出就是为了解决这一问题它通过加入局部线性约束,在一个局部流形上对底層特征进行编码重构这样既可以保证得到的特征编码不会有稀疏编码存在的不连续问题,也保持了稀疏编码的特征稀疏性局部线性约束编码中,局部性是局部线性约束编码中的一个核心思想通过引入局部性,一定程度上改善了特征编码过程的连续性问题即距离相近嘚局部特征在经过编码之后应该依然能够落在一个局部流形上。
局部线性约束编码可以得到稀疏的特征表达与稀疏编码不同之处就在于稀疏编码无法保证相近的局部特征编码之后落在相近的局部流形。从表 2 可以看出2009 年的分类竞赛冠军采用了混合高斯模型聚类和局部坐标編码(局部线性约束编码是其简化版本),仅仅使用线性分类器就取得了非常好的性能不同于稀疏编码和局部线性约束编码,显著性编碼引入了视觉显著性的概念如果一个局部特征到最近和次近的视觉单词的距离差别很小,则认为这个局部特征是不“显著的”从而编碼后的响应也很小。显著性编码通过这样很简单的编码操作在 Caltech 101/256, PASCAL VOC 2007 等数据库上取得了非常好的结果,而且由于是解析的结果编码速度也比稀疏编码快很多。黄等人发现显著性表达配合最大值汇聚在特征编码中有重要的作用并认为这正是稀疏编码、局部约束线性编码等之所鉯在图像分类任务上取得成功的原因。
超向量编码Fisher 向量编码是近年提出的性能最好的特征编码方法,其基本思想有相似之处都可以认為是编码局部特征和视觉单词的差。 Fisher 向量编码同时融合了产生式模型和判别式模型的能力与传统的基于重构的特征编码方法不同,它记錄了局部特征与视觉单词之间的一阶差分和二阶差分超向量编码则直接使用局部特征与最近的视觉单词的差来替换之前简单的硬投票。這种特征编码方式得到的特征向量表达通常是传统基于重构编码方法的M 倍(这里 M 是局部特征的维度)尽管特征维度要高出很多,超向量編码和 Fisher 向量编码在PASCAL VOC、ImageNet 等极具挑战性、大尺度数据库上获得了最好的性能并在图像标注、图像分类、图像检索等领域得到应用。
2011 年 ImageNet分类竞賽冠军采用了超向量编码2012 年 VOC 竞赛冠军则是采用了向量量化编码和 Fisher 向量编码。

空间特征汇聚是特征编码后进行的特征集整合操作通过对編码后的特征,每一维都取其最大值或者平均值得到一个紧致的特征向量作为图像的特征表达。这一步得到的图像表达可以获得一定的特征不变性同时也避免了使用特征集进行图像表达的高额代价。最大值汇聚在绝大部分情况下的性能要优于平均值汇聚也在物体分类Φ使用最为广泛。由于图像通常具有极强的空间结构约束空间金字塔匹配 (Spatial Pyramid Matching, SPM)提出将图像均匀分块,然后每个区块里面单独做特征汇聚操作並将所有特征向量拼接起来作为图像最终的特征表达空间金字塔匹配的想法非常直观,是金字塔匹配核 (Pyramid Matching Kernel, PMK) 的图像空间对偶它操作简单而苴性能提升明显,因而在当前基于词包模型的图像分类框架中成为标准步骤实际使用中,在Caltech 101/256 等数据库上通常使用 1×1, 2×2, 4×4的空间分块因洏特征维度是全局汇聚得到的特征向量的 21 倍,在 PASCAL VOC 数据库上则采用1×1,2×2,3×1 的分块,因而最终特征表达的维度是全局汇聚的8倍

4.使用支持向量机等分类器进行分类

从图像提取到特征表达之后,一张图像可以使用一个固定维度的向量进行描述接下来就是学习一个分类器对图像進行分类。这个时候可以选择的分类器就很多了常用的分类器有支持向量机K 近邻神经网络随机森林等。基于最大化边界的支持向量机是使用最为广泛的分类器之一在图像分类任务上性能很好,特别是使用了核方法的支持向量机杨建超等人提出了 ScSPM 方法,通过学习過完备的稀疏特征可以在高维特征空间提高特征的线性可分性,使用线性支持向量机就得到了当时最好的分类结果大大降低了训练分類器的时间和空间消耗。随着物体分类研究的发展使用的视觉单词大小不断增大,得到的图像表达维度也不断增加达到了几十万的量級。这样高的数据维度相比几万量级的数据样本,都与传统的模式分类问题有了很大的不同随着处理的数据规模不断增大,基于在线學习的线性分类器成为首选得到了广泛的关注与应用。

深度学习模型是另一类物体识别算法其基本思想是通过有监督或者无监督的方式学习层次化的特征表达,来对物体进行从底层到高层的描述 主 流 的 深 度 学 习 模 型 包 括 自 动 编 码 器(Auto-encoder)受限波尔兹曼机(Restricted Boltzmann

年代提出的一种特殊的神经网络结构,并且在数据降维、特征提取等方面得到广泛应用自动编码器由编码器和解码器组成,编码器将数据输入变换到隐藏層表达解码器则负责从隐藏层恢复原始输入。隐藏层单元数目通常少于数据输入维度起着类似“瓶颈”的作用,保持数据中最重要的信息从而实现数据降维与特征编码。自动编码器是基于特征重构的无监督特征学习单元加入不同的约束,可以 得 到 不 同

受限玻尔兹曼機是一种无向二分图模型是一种典型的基于能量的模型(Enery-based Models,EBM)。之所以称为“受限”是指在可视层和隐藏层之间有连接,而在可视层内部和隱藏层内部不存在连接受限玻尔兹曼机的这种特殊结构,使得它具有很好的条件独立性即给定隐藏层单元,可视层单元之间是独立的反之亦然。这个特性使得它可以实现同时对一层内的单元进行并行 Gibbs 采样受限玻尔兹曼机通常采用对比散度(Contrastive Divergence,CD算法进行模型学习受限玻尔兹曼机作为一种无监督的单层特征学习单元,类似于前面提到的特征编码算法事实上加了稀疏约束的受限玻尔兹曼机可以学到类姒稀疏编码那样的Gabor 滤波器模式。

深度信念网络(DBN)是一种层次化的无向图模型DBN 的基本单元是 RBM(Restricted Boltzmann Machine),首先先以原始输入为可视层训练一个单层嘚RBM,然后固定第一层 RBM 权重以 RBM 隐藏层单元的响应作为新的可视层,训练下一层的 RBM以此类推。通过这种贪婪式的无监督训练可以使整个 DBN 模型得到一个比较好的初始值,然后可以加入标签信息通过产生式或者判别式方式,对整个网络进行有监督的精调进一步改善网络性能。DBN 的多层结构使得它能够学习得到层次化的特征表达,实现自动特征抽象而无监督预训练过程则极大改善了深度神经网络在数据量鈈够时严重的局部极值算法问题。Hinton 等人通过这种方式成功将其应用于手写数字识别、语音识别、基于内容检索等领域。

卷积神经网络(CNN)最早出现在上世纪80 年代最初应用于数字手写识别,取得了一定的成功然而,由于受硬件的约束卷积神经网络的高强度计算消耗使得它佷难应用到实际尺寸的目标识别任务上。Wisel 和 Hubel 在猫视觉系统研究工作的基础上提出了简单、复杂细胞理论设计卷积神经网络(CNN)最早出现在上卋纪80 年代,最初应用于数字手写识别取得了一定的成功。然而由于受硬件的约束,卷积神经网络的高强度计算消耗使得它很难应用到實际尺寸的目标识别任务上Wisel 和 Hubel 在猫视觉系统研究工作的基础上提出了简单、复杂细胞理论,设计这里我们将最为流行的词包模型与卷积鉮经网络模型进行对比发现两者其实是极为相似的。在词包模型中对底层特征进行特征编码的过程,实际上近似等价于卷积神经网络Φ的卷积层而汇聚层所进行的操作也与词包模型中的汇聚操作一样。不同之处在于词包模型实际上相当于只包含了一个卷积层和一个彙聚层,且模型采用无监督方式进行特征表达学习而卷积神经网络则包含了更多层的简单、复杂细胞,可以进行更为复杂的特征变换並且其学习过程是有监督过程,滤波器权重可以根据数据与任务不断进行调整从而学习到更有意义的特征表达。从这个角度来看卷积鉮经网络具有更为强大的特征表达能力,它在图像识别任
务中的出色性能就很容易解释了

下面我们将以 PASCAL VOC 竞赛ImageNet竞赛为主线,来对物体分類的发展进行梳理和分析2005 年第一届 PASCAL VOC 竞赛数据库包含了 4 类物体:摩托车、自行车、人、汽车, 训练集加验证集一共包含 684 张图像,测试集包含 689 張图像数据规模相对较小。从方法上来说词包模型开始在物体分类任务上得到应用,但也存在很多其他的方法如基于检测的物体分類、自组织网络等。从竞赛结果来看采用“兴趣点检测-SIFT 底层特征描述-向量量化编码直方图-支持向量机”得到了最好的物体分类性能。对數线性模型和logistic 回归的性能要略差于支持向量机这也说明了基于最大化边缘准则的支持向量机具有较强的鲁棒性,可以更好得处理物体的呎度、视角、形变等变化
2006 年玛丽王后学院的张等人使用词包模型获得了 PASCAL VOC 物体分类竞赛冠军。与以前不同在底层特征提取上,他们采用叻更多的兴趣点检测算法包括 Harris-Laplace 角点检测和Laplacian 块检测。除此以外他们还使用了基于固定网格的密集特征提取方式,在多个尺度上进行特征提取底层特征描述除使用尺度不变的 SIFT 特征外,还使用了 SPIN image 词包模型是一个无序的全局直方图描述没有考虑底层特征的空间信息,张等人采用了 Lazebnik 提出的空间金字塔匹配方法,采用 1×1, 2×2, 3×1 的分块因而最终特征表达的维度是全局汇聚的 8 倍。另一个与之前不同的地方在于他们使鼡了一个两级的支持向量机来进行特征分类,第一级采用卡方核 SVM对空间金字塔匹配得到的各个词包特征表达进行分类第二级则采用 RBF 核 SVM 对苐一级的结果进行再分类。通过采用两级的 SVM 分类可以将不同的 SPM 通道结果融合起来,起到一定的通道选择作用2007 年来自 INRIA 的 Marcin Marsza?ek 等人获得物体汾类冠军,他们所用的方法也是词包模型基本流程与 2006 年的冠军方法类似。不同在于他们在底层特征描述上使用了更多的底层特征描述孓,包括 SIFT, SIFT-hue, PAS edgel histogram等通过多特征方式最大可能保留图像信息,并通过特征编码和 SVM 分类方式发掘有用信息成为物体分类研究者的共识另一个重要嘚改进是提出了扩展的多通道高斯核,采用学习线性距离组合的方式确定不同 SPM 通道的权重 并利用遗传算法进行优化。
2008 年阿姆斯特丹大学囷萨里大学组成的队伍获得了冠军其基本方法依然是词包模型。
有三个比较重要的不同之处首先是他们提出了彩色描述子来增强模型嘚光照不变性与判别能力;其次是使用软量化编码替代了向量量化编码,由于在实际图像中图像局部特征常常存在一定的模糊性,即一個局部特征可能和多个视觉单词相似性差别很小这个时候使用向量量化编码就只使用了距离最近的视觉单词,而忽略了其他同样很相似嘚视觉单词为了克服这种模糊性问题,Gemert提出了软量化编码(又称核视觉词典编码)算法有效解决了视觉模糊性问题,提高了物体识别嘚精度另外,他们还采用谱回归核判别分析得到了比支持向量机更好的分类性能2009 年物体分类研究更加成熟,冠军队伍不再专注于多底層特征、多分类器融合而是采用了密集提取的单 SIFT 特征,并使用线性分类器进行模式分类他们的研究中心放在了特征编码上,采用了混匼高斯模型 (Gaussian Mixture Model,GMM)和局部坐标编码(Local Coordinate Coding,LCC)两种特征编码方法对底层 SIFT 特征描述子进行编码得到了高度非线性的、局部的图像特征表达,通过提高特征的鈈变性、判别性来改进性能另外,物体检测结果的融合也进一步提升了物体分类的识别性能。局部坐标编码提出的“局部性”概念對物体分类中的特征表达具有重要的意义 , 之 后 出 现 的 局 部 线 性 约 束 编 码(Locality-constrained linear codingLLC)也是基于局部性的思想,得到了“局部的”、“稀疏的”特征表达在物体分类任务上取得了很好的结果。
2010 年冠军依旧以词包模型为基础并且融合了物体分割与检测算法。一方面通过多底层特征、姠量量化编码和空间金字塔匹配得到图像的词包模型描述另一方面,通过使 Mean shift、过分割、基于图的分割等过分割算法得到Patch 级的词包特征表达。这两种表达作为视觉特征表达与检测结果以多核学习的方式进行融合。
在分类器方面除使用了 SVM 核回归外,还提出了基于排他上丅文的 Lasso 预测算法所谓排他上下文是指一个排他标签集合中至多只能出现一种类别。排他标签集合的构建使用 Graph Shift 方法并采用最小重构误差加稀疏约束也即 Lasso 进行预测。排他上下文作为一种不同于一般共生关系的上下文高置信度预测可以大大抑制同一排他标签集中其他类别的置信度,改善分类性能
年冠军的基本框架。来自阿姆斯特丹大学的队伍从最显著窗口对于物体分类任务的作用出发在词包模型基础上進行了新的探索。他们发现单独包含物体的图像区域可以得到比整个图像更好的性能一旦物体位置确定,上下文信息的作用就很小了茬物体存在较大变化的情况下,部件通常比全局更具有判别性而在拥挤情况下,成群集合通常要比单个物体更加容易识别基于此,他們提出了包含物体部件整个物体,物体集合的最显著窗口框架检测模型训练使用人工标注窗口,预测使用选择性搜索定位词包模型囷最显著窗口算法融合得到最终的分类结果。
2012 年冠军延续了 2010 年以来的算法框架在词包模型表达方面,使用了向量量化编码、局部约束线性编码、Fisher 向量编码替代原来的单一向量量化编码这里有两个比较重要的改进,一个是广义层次化匹配算法考虑到传统的空间金字塔匹配算法在物体对齐的假设下才有意义,而这在实际任务中几乎不能满足为解决这个问题,他们使用 Side 信息得到物体置信图采用层次化的方式对局部特征进行汇聚,从而得到更好的特征匹配另一个重要的改进是子类挖掘算法,其提出的主要目的是改进类间模糊与类内分散嘚问题
1)计算样本类内相似度;
4)子图向子类的映射。

相比 PASCAL VOC 竞赛 ImageNet 竞赛的图像数据规模更大,类别数更多对传统的图像分类、检测算法都是一个大的挑战。下面将近年 ImageNet竞赛的主流算法也做一个简要介绍2010 年冠军由美国 NEC 研究院和 UIUC 获得,其方法基于词包模型底层特征采用叻密集提取的HOG 和 LBP 特征,特征编码算法使用了局部坐标编码和超向量编码并且采用了空间金字塔匹配。最终图像的分类采用了基于平均随機梯度下降的大尺度 SVM相比 PASCAL 竞赛算法,这里的算法更多采用了在计算上极为高效的底层特征和编码算法分类器及其优化也专门针对大规模数据进行了设计,最终获得了 71.8%的 top 5 分类精度
2011 年冠军是施乐欧洲研究中心,其基本方法仍旧是基于词包模型主要改进在三个方面:
特征編码方法采用 Fisher 向量编码,可以引入更多的高阶统计信息得到更具判别性的表达;使用乘积量化(Product Quantization,PQ) 算法进行特征压缩;分类器使用基于随機梯度下降的线性支持向量机
2012 年加拿大多伦多大学的 Hinton 教授及其学生 Krizhevsky 利用 GPU 在 ImageNet 竞赛上获得了前所未有的成功,他们训练了一个参数规模非常夶的卷积神经网络并通过大量数据生成dropout 来抑制模型的过拟合,在大规模图像分类任务上获得了非常好的效果取得了第一名的成绩,top 5 分類精度达到了 84.7%比第二名使用 Fisher向量编码算法要高大约 10 个百分点,充分显示了深度学习模型的表达能力
对比 PASCAL 竞赛,ImageNet 竞赛中使用的算法更加簡单高效因而也更加接近实用。在大规模图像识别场景下传统图像识别的很多算法和技术面临极大的挑战,包括高计算强度高内存消耗等,多特征、非线性分类器等这些在 PASCAL 竞赛中广为使用的算法和策略无法在 ImageNet 这样规模的数据库上高效实现在性能和效率的权衡中,逐漸被更为简单高效的算法(单特征、特征压缩、线性分类器等)替代大数据时代的来临,更激发了数据驱动的深度学习模型的发展实现了哽高效的特征提取与图像分类,将图像分类的发展推向一个新的高度

年第一届开始就引入了物体检测任务竞赛,主要任务是给定测试图爿预测其中包含的物体类别与外接矩形框物体检测任务与物体分类任务最重要的不同在于,物体结构信息在物体检测中起着至关重要的莋用而物体分类则更多考虑的是物体或者图像的全局表达。物体检测的输入是包含物体的窗口而物体分类则是整个图像,就给定窗口洏言物体分类和物体检测在特征提取、特征编码、分类器设计方面很大程度是相通的,如表 3 所示根据获得窗口位置策略的不同,物体檢测方法大致可分为滑动窗口和广义霍夫变换两类方法滑动窗口方法比较简单,它是通过使用训练好的模板在输入图像的多个尺度上进荇滑动扫描通过确定最大响应位置找到目标物体的外接窗口。广义霍夫投票方法则是通过在参数空间进行累加根据局部极值算法获得粅体位置的方法,可以用于任意形状的检测和一般物体检测任务滑动窗口方法由于其简单和有效性,在历年的 PASCAL 与物体分类问题不同物體检测问题从数学上是研究输入图像 X 与输出物体窗口 Y 之间的关系,这里 Y 的取值不再是一个实数而是一组“结构化”数据,指定了物体的外接窗口和类别是一个典型的结构化学习问题。结构化支持向量机(Structrual SVM, SSVM) 基于最大化边缘准则将普通支持向量机推广到能够处理结构化输出,有效扩展了支持向量机的应用范围可以处理语法树、图等更一般的数据结构,在自然语言处理、机器学习、模式识别、计算机视觉等領域受到越来越多的关注隐 变 量 支 持 向 量 机 (Latent SVM, LSVM) 是Pedro Felzenszwalb 等人在 2007 年提出用于处理物体检测问题,其基本思想是将物体位置作为隐变量放入支持向量機的目标函数中进行优化以判别式方法得到最优的物体位置。弱标签结构化支持向量机(weak-label Structrual SVMWL-SSVM)是一种更加一般的结构化学习框架,它的提出主要是为了处理标签空间和输出空间不一致的问题对于多个输出符合一个标签的情况,每个样本标签都被认为是“ 弱 标 签 ” SSVM 和 LSVM 都 可 以 看 做 是WL-SSVM 的特例,WL-SSVM 通过一定的约简可以转化为一般的 SSVM 和 LSVM条件随机场(Conditional Random Field, CRF)作为经典的结构化学习算法,在物体检测任务上也得到一定的关注Schnitzspan 等囚将形变部件模型与结构化学习结合,提出了一种隐条件随机场模型(latent CRFs)通过将物体部件标签建模为隐藏节点并且采用 EM算法来进行学习,该算法突破了传统 CRF 需手动给定拓扑结构的缺点能够自动学习到更为灵活的结构,自动发掘视觉语义上有意义的部件表达张等提出了基于數据驱动的自动结构建模与学习来从训练数据中学习最为合适的拓扑结构。由于一般化的结构学习是一个 NP 难问题张提出了混合结构学习方案,将结构约束分成一个弱结构项和强结构项弱结构项由传统的树状结构模型得到,而强结构项则主要依靠条件随机场以数据驱动方式自动学习得到

下面我们将以历年 PASCAL VOC 物体检测竞赛来探讨物体检测的方法演变与发展。

2005 年物体检测竞赛有 5 支队伍参加采用的方法呈现多樣化,Darmstadt 使用了广义霍夫变换通过兴趣点检测和直方图特征描述方式进行特征表达,并通过广义 Hough 投票来推断物体尺度与位置该方法在他們参加的几类中都得到了最好的性能。INRIA 的 Dalal 则采用了滑动窗口模型底层特征使用了基于 SIFT 的描述,分类器使用支持向量机通过采用在位置囷尺度空间进行穷尽搜索,来确定物体在图像中的尺度和位置该方法在汽车类别上取得了比广义 Hough 变换更好的性能,但在人、自行车等非剛体类别上性能并不好
2006 年最佳物体检测算法是 Dalal 和 Triggs 提出的HOG(Histograms of Oriented Gradients)模型。他们的工作主要集中于鲁棒图像特征描述研究提出了物体检测领域中具囿重要位置的 HOG 特征。HOG 是梯度方向直方图特征通过将图像划分成小的 Cell,在每个 Cell 内部进行梯度方向统计得到直方图描述与 SIFT 特征相比,HOG 特征鈈具有尺度不变性但计算速度要快得多。整体检测框架依然是滑动窗口策略为基础并且使用线性分类器进行分类。这个模型本质上是┅个全局刚性模板模型需要对整个物体进行全局匹配,对物体形变不能很好地匹配处理
等人的全局刚体模板模型不同的是,形变部件模型由一个根模型和若干可形变部件组成另一个重要的改进是提出了隐支持向量机模型,通过隐变量来建模物体部件的空间配置并使鼡判别式方法进行训练优化。形变部件模型奠定了当今物体检测算法研究的基础也成为后续 PASCAL VOC 竞赛物体检测任务的基础框架。
2008 年物体检测冠军同样采用了滑动窗口方式特征表达利用了 HOG 特征和基于密集提取SIFT 的词包模型表达。训练过程对前、后、左、右分别训练独立的模型並使用线性分类器和卡方核SVM 进行分类。测试过程采用了两阶段算法第一阶段通过滑动窗口方式利用分类器得到大量可能出现物体的位置,第二阶段基于 HOG 和 SIFT 特征对前面一阶段得到的检测进行打分最后使用非极大抑制算法去除错误检测窗口,并融合分类结果得到最终检测结果这里分类信息可以看成是一种上下文信息,这个也是物体检测研究的一个重要内容
2009 年除了形变部件模型以外,牛津大学视觉几何研究组在滑动窗口框架下基于多核学习将灰度 PHOW、颜色 PHOW、PHOC、对称 PHOG、SSIM、视觉词典等多种特征进行融合,取得了与形变部件模型相近的效果获嘚共同检测冠军。多核学习是进行多特征、多模型融合的重要策略可以自动学习多个核矩阵的权重,从而得到最佳的模型融合效果考慮到滑动窗口搜索的效率问题,提出了
类似级联 Adaboost 方式的多级分类器结构第一级分类器采用线性 SVM 分类器以滑动窗口或者跳跃窗口方式快速對图像窗口进行粗分类;第二级采用拟线性 SVM,利用卡方核进行进一步细分类;第三级采用更强的非线性卡方-RBF 分类器,这一步准确度更高但比湔面步骤计算代价更大由于前面两级已经快速滤除大部分备选窗口,这一级可以专注于更难的样本分类
2010 年中国科学院自动化研究所模式识别国家重点实验室获得了物体检测冠军,其方法是以形变部件模型为基础对底层 HOG 特征进行了改进,提出了 Boosted HOG-LBP 特征利用Gentle Boost 选择出一部分 LBP 特征与 HOG 特征融合,使得物体检测结果产生显著提升另一个重要改进是采用了多种形状上下文,包括空间上下文、全局上下文、类间上下攵空间上下文由包含了窗口位置尺度信息的 6 维向量构成,全局上下文包括 20 维的物体分类分数和 20 维的最大窗口分数其中分类方法采用了黃等人提出的显著性编码、词典关系算法计算词包模型表达。类间上下文用于建模相邻物体之间的弱空间关系分别由20 维的窗口附近最强嘚 HOG 特征分数和 LBP 特征分数构成。最终得到 87 维的特征使用 RBF SVM进行上下文学习。该方法在 VOC2010 数据库上取得了 6 项第一5 项第二,平均精度达到了 36.8%
2011 年粅体检测冠军依然是中国科学院自动化研究所模式识别国家重点实验室,算法上与2010 年不同之处是针对形变部件模型提出了一种数据分解算法并引入了空间混合建模和上下文学习。
2012 年阿姆斯特丹大学获得物体检测冠军其方法主要创新在于选择性搜索、混合特征编码、新的顏色描述子、再训练过程。图像中物体本身构成一种层次结构通常很难在一个尺度上检测所有物体,因而对图像块进行层次化组织在烸个层次上进行选择搜索,可以有效提升检测的召回率考虑到经典的向量量化编码使用小的特征空间分块能够捕获更多图像细节,而丢夨了分块内部的细节而超向量编码和 Fisher 向量量化编码等差异编码方法则可以很好的描述分块内部细节,更大空间分块可以描述更大范围的圖像细节综合这两种编码模式,提出了混合特征编码算法将两种编码的优点融合到一起。

5 对物体分类与检测的思考

物体分类与检测的研究在以 PASCAL VOC 竞赛为平台的理论和算法研究上已经取得了一系列的进展分类模型建立了以词包模型和深度学习模型为基础的体系框架检测模型则以可形变模型为核心发展出多种方法在分析目前物体分类和检测算法的基础上,本文接下来对物体分类和检测算法的统一性和差異性进行了讨论并探讨了物体分类与检测算法发展的方向。

5.1 物体检测和物体分类的统一性

– 物体检测可以取代物体分类

物体检测的任務是解决物体所在的位置问题,物体分类的任务是判断物体的种类从直观上而言,物体检测的隐含信息包括了物体的类别信息也就是需要事先知道需要定位的物体的类别信息,比如需要检测人那么就需要先验的给出人的标注信息,以此来判断人的位置从这个角度而訁,物体检测似乎包括了物体分类的步骤也就是物体检测就能够回答“什么物体在什么地方”,但这里有一个误区其中的“什么物体”是先验给出的,也就是在训练过程中标注出的并不一定是真实的结果。在模型区分性比较强的情况下也就是物体检测能给出准确的結果的情况下,物体检测在一定程度上可以回答“什么物体在什么地方”但在真实的世界中,很多情况下模版不能唯一的反映出物体类別的唯一性只能给出“可能有什么物体在什么地方”,此时物体分类的介入就很有必要了由此可见,物体检测是不能替代物体分类的

– 物体检测和物体分类之间的差异性和互补性

以 PASCAL VOC 竞赛为例,从模型的角度而言物体检测主要采用的是可变的部件模型, 更多的关注局部特征,物体分类中主要的模型是词包模型从两者的处理流程来看,他们利用的信息是不同的物体检测更多的是利用了物体自身的信息,也就是局部信息物体分类更多的是利用了图像的信息,也就是全局的信息他们各有优劣,局部信息考虑了更多的物体结构信息这使得物体检测和分类的准确性更高,但同时也带来物体分类的鲁棒性不强的问题;全局信息考虑了更多的是图像的全局统计信息尤其是圖像的语义信息,这使得能考虑更多的信息来进行判断但信息量的增加可能带来准确度的提高,也可能由于冗余降低分类的性能但是從统计意义而言,其鲁棒性是能够得到一定的提高的由此可见,物体检测和物体分类之间存在着较大的差异性同时也就说明存在着比較大的互补性。

5.2 物体分类与检测的发展方向

物体分类任务要确定图像中是否包含物体全局表达更关键物体检测任务则要确定图像中物體的位置和尺度,物体结构更为关键因此,物体分类检测的研究也主要有两种思路:

? 专注于学习结构即结构化学习。观察变量与其怹变量构成结构化的图模型通过学习得到各个变量之间的关系,结构包括有向图模型(贝叶斯网络)、无向图模型(马尔科夫网络)結构化学习通常变量具有显式的物理意义,变量之间的连接也具有较强的因果关系解释性较好。

? 专注于学习层次化表达即深度学习。深度学习从人脑的层次化视觉处理和函数表达理论出发采用层次化特征表达的思想来进行特征从底层到高层语义的提取。深度学习专紸于表达的学习也即更注重一个输入得到的相应输出,对中间的特征变换缺少自然的解释更像一个黑盒系统。
两条思路各有侧重但並不是说是互相独立的。在这两条发展线路的基础上建立更为统一的物体识别框架,同时处理物体分类与检测任务也是一个重要的研究课题。如何利用物体检测和物体分类之间的互补性去构建统一的物体识别框架是计算机视觉和视觉认知领域的研究热点也是视觉认知計算模型研究的重点之一。

5.3 结构化学习存在的难点与挑战

? 模型表达问题对于一个特定问题,选择什么样的模型如有向图模型、无向圖模型,模型如何进行参数化都是值得研究的。

? 模型学习问题在给定模型表达后,如何从给定数据中学习模型的参数是结构化学習中的一个核心问题。目前通常有基于概率的学习方法如最大似然估计、最大后验估计等,也有基于最小化损失函数的方法不同的方法,在学习的效率准确性上都具有差异,研究快速有效的学习算法具有特别重要的价值。

? 模型推断问题给定学习好的模型,进行赽速、准确的模型推断是至关重要的目前经典的方法包括消息传播算法、变分推断算法、采样算法等。不同方法在速度、准确度上各有差异研究大规模图模型,实现人类视觉系统快速识别人脸那样的快速准确推断是一个重要研究方向。

5.4 层次化学习 (深度学习) 存在的难点與挑战

在大数据时代海量的图像、视频数据绝大多数是没有标签的,大量进行标注也是不现实的从大量的没有标签的图像数据中自动挖掘知识,无疑有着重要的意义Google Brain 计划也验证了数据驱动的自主学习的可行性与有效性。但目前深度学习还存在一些难点和挑战

?解释性差。层次化表达在视觉皮层理论和函数论等方面具有其理论依据然而,在实际应用中学习到的模型通常没有很好的解释性。第一层網络可以通过可视化的方式进行直接查看在大多数视觉数据中,第一层学习到的是类似 Gabor的滤波器可以实现基本的边缘检测。然而对於更高层的特征,通常很难直观的查看其学习到的是什么研究有效的高层特征解释方式,无疑对于深度学习的发展具有非常重要的意义

?模型复杂度高,优化困难神经网络的容量没有上限,表达能力非常强这是它的一个重要的优点。另一方面也对模型的优化造成了非常大的困难网络越复杂,模型的能量面越高低崎岖到处是极小点。研究模型初始化方式、优化算法对于提高神经网络的判别能力,是深度学习的一个重要研究内容

? 计算强度高。目前虽然每层是高度并行化的前馈网络但是计算强度还是比较高,需要采用GPU 等硬件來完成对于一个刺激信号,人脑中绝大多数细胞是处于不活动状态只有相关的细胞才会有活动,这是一种非常经济的响应形式而对於深度学习,输入一个视觉信号所有的神经元都会进行计算,人为加的一些稀疏约束只是会使某些神经元输出为 0但不代表该神经元“處于不活动”状态。这方面是将来建立庞大学习网络时实现实时推理的一个可行思路

? 模型缺少结构约束。深度学习模型通常只对网络嘚“ 输入–输出”进行建模却缺少必要的结构先验的约束。例如对人脸关键点可以采用卷积神经网络进行回归,网络学习到的是一种隱式的“输入–输出”结构却完全没有加入显式的结构先验,包括预测输出的位置点处的表观特征这个问题的直接后果就是单个网络盡管可以做到任意的复杂度,却无法得到很高的精度很多检测错误看起来是非常简单的:本来应该落在具有明显特征的嘴角处,却落在叻嘴角旁边的脸部区域为了克服这个问题,就需要采用从粗到细从全局到局部的策略,级联多个网络来不断纠正网络预测在大数据時代,海量视频数据所带来的纷繁复杂的易变性(variability)将给传统的特征学习方法带来巨大挑战而深度学习模型天然的强大数据表达能力,無疑将会对大数据背景下的整个视觉的研究产生极大的影响也必然会将图像物体检测、分类的研究推向新的高度。当然目前深度学习模型还存在着解释性差、模型复杂度高,优化困难、计算强度高等诸多问题这些都需要研究者们进一步的思考。例如将显式结构先验嵌入深度学习模型中,可以有效降低网络参数空间的规模减少局部极值算法的问题,从而可以更加有效地解决检测、分割等任务

物体汾类与检测在计算机视觉研究中具有重要的理论意义和实际应用价值,同时目前也存在诸多困难与挑战本文以计算机视觉目标识别竞赛PASCAL VOC 為主线,对物体分类与检测历年最佳算法的发展进行了详尽的阐述强调了表达学习和结构学习分别在物体分类和物体检测中的重要意义。以此为基础本文还讨论了物体分类与检测的统一性与差异性,对物体分类与检测的发展方向进一步思考从基于深度学习的表达学习囷结构学习两个方向进行了分析与展望。

文档下载地址:中国知网

}

1. 已有的搜索极值算法点的工具

分形(Fractals)是用于找到极值算法点的流行工具它们可以在5个柱的序列中找到价格的高点和低点(图 1)。极值算法点在价格变化强弱的情况下都可以定義如果正确选择了时段,分形可能会显示很好的结果尽管它们被市场条件的影响很大。

在第二种情况下极值算法点的相对大小 (从一個极值算法点到另一个的价格变化) 可能只有几个点值,这样较小的峰谷值通常在人工交易时不做考虑在时段之间切换并不会改变这些较尛的极值算法点 — 它们在长期平盘时依然出现。 

也可能会出现相反的情况: 没有找到所有的极值算法点如果出现了剧烈的市场波动,在短期之内出现了很多峰谷值它们也不能被发现,分形只能在当前时段由5个柱定义的时间段之内侦测到两个极值算法点所以,我们无法推薦在自动交易中使用分形指标来侦测所有或者主要关键的极值算法点

如果我们选择了一个大的范围来搜索极值算法点,它们中的很多都會被忽略掉如果范围太小,又会找到一些微小的极值算法点在任何情况下,当处理结果时我们或者必须总是人工优化参数来消除那些微小的高价和低价,或者开发一个特别的算法来做这件事

1.2. 当搜索极值算法点时使用移动平均

使用平均线,例如移动平均作为自动化搜索极值算法点的基础看起来是可行的。搜索是在指定数量的柱上进行的看价格偏离平均线是否大于预先定义的距离点数。该工具可以排除掉微小的峰谷值看起来比分形更好。但是它还是没有解决在高低价格距离很近时侦测的问题 (图 2, a).

我们可以一起使用移动平均和分形,移动平均用于排除掉微小的极值算法点而分形用于在指定的区段中进行搜索。但是这种方法还是不能解决所有的问题,我们还是需偠不断选择最佳的范围参数否则,两个很近的极值算法点将只能发现一个 (图 2, a).

使用这种方法还有另一个问题在强烈波动中,移动平均根據时段可能会忽略掉信号在这种情况下(图 2, b), 接近两个峰值的谷值和接近移动平均的部分没有被侦测出来,这样的情形在市场上很罕见但昰它们确实提出了正确选择移动平均范围的问题。

所以这种搜索极值算法点的方法以及它们上面所述的修改方案都是有缺点的,需要进┅步的编程方案让我们详细探讨当搜索极值算法点时出现的问题,以及来解决它们的算法

2. 搜索极值算法点时遇到的问题和乱局

2.1. 选择用於搜索峰值和谷值的变化范围

已有的策略和技巧可能显式或者隐式地使用了极值算法点。寻找极值算法点常常是一项必须的任务:不同的囚可能会在同一张图表上找到不同的峰值和谷值让我们看看一个著名的图形模式 – 双顶。

两个图表 (图 3) 中包含了相同的模式但是,我们鈳能会根据极值算法点范围的不同侦测到或者未能找到它在第一个图表上,第一个峰值之后是底部其后又是第二个峰值。对应地如果峰值之间没有底部,我们就不能侦测到双顶模式了该模式会被定义为一个普通的极值算法点。当底部不明显时也会发生同样的事情,它会影响到双顶模式而使它难以侦测当然,在第一个图表上侦测模式与第二个图表相比要容易而它们之间的仅有区别就是它们相邻極值算法点的区别。 

让我们讨论另一个例子: 有些策略会在一系列极值算法点(包括高点和低点)的位置高于前面的点时定义向上的趋势下行趨势的定义也类似。在图4中, 我们可以使用极值算法点来定义趋势的方向

b), 我们将看到一个熊势趋势。所以有可能使用不同的极值算法点來取得其中一个可能的结果,考虑到这个我们可以得出结论,变化范围对极值算法点的位置有最大影响

2.2. 有效分离临近的顶部或者底部

當定义极值算法点时还会产生另一个问题,为了有效定义和分离两个或者更多的顶部它们之间应该有底部,这在第一个例子(寻找顶部和底部)和第二个例子都是对的尽管这里的例子更有趣一些,根据所描述的策略我们可以在下面的图表中(图 5, 6) 在找到极值算法点后侦测到趋勢。

如果没有底部把顶部分开(或者相反), 策略就无法根据指定的标准来工作即使可以在图表上看到向上的趋势。让我们探讨一个典型例子在向上的趋势中,每个顶部都比之前的一个更高如果它们之间没有底部或者不能清楚看到,就只有最高的顶点定义为一个极值算法点如果相对平均线(例如移动平均线)来定义极值算法点, 还是需要有分离相邻两个顶部或者底部的任务,为了分出两个顶部我们应该使用它們之间的一个极值算法点。

所以我们可以在显式或者隐式使用极值算法点的所有策略中使用以下假定: 无论是向前(向将来)还是向后,价格嘟会从顶部移动到底部再由底部移动到顶部。如果我们不使用这个假定那么根据观察的角度,价格图表上的两个顶部:

或者只有最高嘚顶部被侦测到

或者它们中的哪个都没有侦测到。

对于底部也是同样这个假定使我们可以使用选定的变化范围来开发准确的搜索极值算法点的算法。

第三个问题也是与价格变化相关的并且发生于定义第一个极值算法点的时候。对于任何交易技巧或者策略最近的极值算法点比更早的极值算法点更加重要,我们已经发现定义一个极值算法点就会影响邻近顶部和底部的位置,所以如果我们在离当前时間一定距离选择一个极值算法点,取得的结果比距离更远的历史数据影响更大并且被最近价格波动的影响会最小。这个问题在使用之字轉向指标(ZigZag)的时候也会出现最近极值算法点的位置不很依赖于最近的价格波动。 

然而这种情形在从图表末端搜索极值算法点时就完全不哃了,在这种情况下我们应该首先在距离图表末端最近的地方找到一个顶部或者底部,然后所有其他的极值算法点就能清晰定义了根據使用的策略和选择的变化范围,可以使用三个选项:

找到最近的极值算法点(顶部或者底部)

让我们讨论找到最近的极值算法点在选择了某個变化范围之后,我们就能准确定义最近的第一个极值算法点了然而,这会出现一定的延迟可能对策略的运行有负面的影响。为了 "看箌" 一个极值算法点我们需要根据相对那个点的变化范围定义价格的改变,价格的变化需要花费一些时间所以就有了延迟。我们也可以使用最后的已知价格作为一个极值算法点尽管不太可能它真的会变成顶部或者底部。

在这种情况下看起来使用另外的比例作为变化范圍的一部分来寻找其它的极值算法点比较合理,例如让我们选择 0.5 的数值,选择的另外的比例值定义了从当前值到最近底部的最小价格 (对於最近的顶部就是最高价格)这使我们可以把这个底部 (顶部) 定义为一个极值算法点,如果当前的价格和最近顶部(底部)的差距小于指定的数徝这样的极值算法点就不成立。在这种情况下侦测到的第一个极值算法点可能就是顶部或者底部。同时我们也解决了过早检测到极徝算法点的问题,以及随后对它们的分析和(如有必要)开展交易

b)。在此另外的比例值定义了使我们侦测第一个极值算法点的最小的价格變化点数,在第一个例子中变化是 126 个点值,而在第二个例子中它是 98 个点值,在两个例子中使用的是同一张图表垂直线指出了进行计算时当前的时段。时段内侦测到的极值算法点以点状显示

对于第一种情况,选择的额外比例值定义的第一个底部范围是205个点值, 而最小的價格变化是点值对于第二种情况,如果额外的比例值等于0.7 (98个点值), 第一个底部定义在距离当前价格120个点值的位置随后的两个极值算法点倳根据指定的变化范围等于140个点值来侦测到的。相应地第一个底部和随后的顶部的差距略微超过140个点值。第二个底部也是根据价格相对偵测到的顶部超过140个点值来定义的

我们可以看到,额外比例会明显影响第一个侦测到的极值算法点的位置它也可能会影响到它的类型。对于不同的数值(从 0 到 1), 在相同的图表上可能侦测到顶部或者底部第二个例子中侦测到的前两个极值算法点 (图 7 b), 就没有在第一个例子中侦测箌。

对于更低的比例值第一个极值算法点会更快找到。在第二个例子中 (图 7 b), 是用额外比例等于0.4, 第一个侦测到的极值算法点可以提前5个柱定義 (在当前的时段下是提前5分钟)

3. 搜索极值算法点任务的算法方案和它们的实现

3.1根据变化范围来寻找极值算法点的算法

让我们从选择价格范围來构建极值算法点开始显然,柱的大小和极值算法点的参数非常依赖于时段而有很大变化存在以及没有顶部/底部也会被趋势、一天中嘚时间以及其它一些因素所影响。已有的指标例如分形和类似的工具,使我们可以在任何时段中不论趋势存在与否而找到极值算法点洳果我们在搜索顶部和底部值的时候使用了移动平均,极值算法点相对移动平均也许只差两点也可能差100点。我们在日内交易中应该注意兩个点的极值算法吗也许不应该。对于一个长线投资我们同样不会关心小于20个点的极值算法,不论时段如何这就是为什么我们需要“变化范围(variation range)”一词,意思是最小值移动平均可以作为参考点,使得我们可以定义极值算法点的距离以限制它的最小值然而,移动平均嘚周期数会明显地影响所侦测的顶部和底部的位置使得难以选择某个周期数作为参考。

所以让我们现在假定价格从顶部跌到底部然后洅回来,这个变化范围就用来定义两个相邻极值算法点的最小价格变化 - 顶部和底部的距离如果一些极值算法点已经被定义,其邻近点的距离应该不小于指定的变化范围这使得我们可以不管时段和趋势来定义极值算法点。该工具对于日内交易和长线投资都非常适合让我們探讨它的运行算法。首先让我们使用相同的图表显式地定义极值算法点,只是在第一个图表上变化范围是60个点值 (图 8), 而在第二个图表仩是30个点值(图 9)。让我们假定第一个极值算法点已经被侦测到 (点 1) 儿我们正搜索前面的极值算法点

对极值算法点的搜索是从图表的末端开始進行的 (从点1)。在第一种情况下在显示的范围内找到了4个极值算法点,在第二种情况下在同样的时间间隔内找到了10个极值算法点。当在圖表的指定部分加大变化范围时极值算法点根本没有侦测出来,所以在选择极值算法点的搜索范围时我们应该现实些,要考虑到市场嘚波动和时段这里,范围是进行搜索的柱的数量

记住以上我们所说过的,让我们介绍搜索极值算法点的迭代算法为什么要迭代?第一個顶部后面总应该有个底部,然后是第二个顶部等等。如果没有找到第二个顶部 (图表没有向上方移动), 就重新定义底部的位置然后再转姠时间序列中更远的地方。第一个顶部的位置 (其它极值算法点也一样) 也可以使用同样的方法修改我们也应该去掉同一个柱被定义为同时昰顶部和底部的情况。

当然这种方法需要大量的计算,我建议在搜索几个极值算法点的时候使用它点的数量越少,程序运行就越快計算速度也受到搜索范围的影响。这种搜索是要验证的因为它使您在最近的价格波动中找到影响最大的某些顶部和底部,如果您需要找箌多个极值算法点我推荐使用之字转向指标(ZigZag)。

3.2指标的实现(代码太多省去只展示结果)

提供的算法已经用于开发自定义指标来搜索极徝算法点并且在图表上突出显示它们 (图 10).

b), 极值算法点之间的距离就比较远了。这在选择搜索范围的时候应该注意对于平盘市场,最优选择嘚范围使我们可以在较小价格变化时自动找到顶部和底部并且去除(跳过)时间间隔非常大的极值算法点。

提供的算法可以用于实现各种策畧scale_factor 指标的运行结果很适合用于构造图形模式,例如头肩双底,等等它们可以用于使用图表上顶部和底部的价格差异的策略的指标。

根据这个策略如果价格上升形成新的顶部,高于前一格顶部但是 MACD 的顶部低于前一个,我们就有了卖出信号

如果价格下跌形成新的底蔀,低于前一个底部但是 MACD 的底部高于前一个,我们就有了买入信号signal.

EA 准确实现了算法,根据变化范围侦测到了顶部和底部集中于图表仩的最近变化。

传入的参数 — 用于搜索极值算法点的范围和变化范围还有必要来设置在价格上涨时最近两个顶部的最小价格差异(对于价格下跌就是最近两个底部),MACD柱形图在极值算法点的最小背离每次交易的风险以及额外比例是在存款货币中设置的。guard_points 参数定义了止损的偏迻如果是买入仓位就是距离最近底部的偏移,相应地对于卖出仓位就是顶部上方的偏移。还可以选择在进行交易时显示侦测到的极值算法点的参数 (show_info=1).

当建立卖出仓位时止损是根据最近的顶部位置设置的,而当建立买入仓位时止损是根据最近的底部设置的,这使我们可鉯在价格强烈波动和平盘市场的时候都能够建立合理的目标在两种情况下,获利是根据止损距离当前价格的值而对称设置的在日内交噫中,选择的是较小的变化范围而在长线投资中,建议把变化范围设置到几倍大

首先,EA搜索最近的三个极值算法点在决心买入的时候,EA侦测到了一个顶部和两个底部(使用箭头做了标记)和指标不同,EA没有突出显示这些极值算法点但是,我们可以在开始交易时通过把 show_info 設为1来取得极值算法点的位置数据

两个最近的底部的价格差距为148个点值,超过了指定的数值MACD 柱形图在极值算法点的差距是 0.00062,也超过了指定的数值考虑到最近的两个底部有反向的价格移动和指标的移动,在根据额外比例 (150 点值)定义的点位建立买入仓位如果使用较小的额外比例,仓位可能会更早建立而利润可能会更早得到。

“持续赢家”股票期货实战技术高级研修班


下面是 EA 测试结果 (图 12). 在测试中我们发現 macd_t 和 trend 参数的值对获利能力的影响最大,这些参数的值越大获利交易的百分比就越大,然而获利可能增加的同时也会导致交易总数的下降。

当优化策略时正确设置 macd_t 和 trend 参数值是很关键的,变化范围和另外的数值也会影响交易参数变化范围定义了侦测到的极值算法点的数量和交易的数量,另外的参数定义了当建立仓位时获利和止损的数值

本策略,以及其它一些策略只有在使用了以上提出的工具时才可能尽可能正确地工作,否则可能会遇到收到的信号是使用5个点或者更小的极值算法点,而指定的获利和止损却是距离当前价格200个点在這种情况下,极值算法点的重要性很低在这些和其他许多情况下,传统的乖哦那句或者定义了过多微小的极值算法点或者干脆没有侦測到顶部或者底部。另外这些工具还经常在时间序列结束前定义极值算法点中有问题。

本文中描述的算法和方案可以使得可以根据价格變化在价格图表上正确定义极值算法点取得的结果在定义图形模式和使用图形模式及指标来实现交易策略都是适合的。

}

1. Matlab 中读、写及显示一幅图像的命令各是什么

其中,XMAP分别为读出的图像数据和颜色表数据,fmt为图像的格式filename为读取的图像文件(可以加上文件的路径)。如: [XMAP]=imread(’flowers.tif’,’tif’);比较读取二值图像,灰度图像索引图像,彩色图像的X和MAP的特点

按照fmt指定的格式将图像数据矩阵X和调色板map写入文件filename。

其中X是图像数據矩阵map是其对应的颜色矩阵,若进行图像处理后不知道图像数据的值域可以用[]代替map

  • 二进制(二值)图像显示方法,在MATLAB中一幅二值图像昰uint8或双精度的该矩阵仅包含0和1。如果希望工具箱中的函数能将图像理解为二进制的那么所有数据都要是逻辑数据,必须对其进行设置(将所有数据标志均设置on).可以对数据利用“~”取反操作实现图像逆转即黑白反色
  • 灰度图像的显示方法,正常情况下无需指定灰度图像嘚调色板格式可以是使用imshow函数指定要显示灰度级数目,格式 imshow(I,n),n为指定的灰度级数目用户也可以指定数据的范围,格式imshow(I,[low high])其中low 和high参数分别为數据数组的最小值和最大值如果为空矩阵([]),那么imshow函数将自动进行数据标度
  • 索引图像,imshow(x,map)对于x的每个个像素imshow显示存储map中相应行的颜銫。
  • RGB图像的显示它直接对颜色进行描述而不使用调色板,格式imshow(RGB) RGB(:,:1) RGB(:,:2)   RGB(:,:3)
  • 特殊显示,如多幅图像嘚显示需要显示多幅图像时。可以使用figure语句它的功能就是重新打开一个图像显示窗口.

解:Matlab与VC++混合编程主要有三种方式:Matlab引擎方式、Matlab编譯器及COM组件。

API函数通过调用这些函数实现以用程序进程之间的数据传递。VC程序作为前端客户机向Matlab引擎传递命令和数据,并从Matlab引擎接受數据信息实现动态通信。采用这种方法几乎能利用MATLAB全部功能但是需要在机器上安装MATLAB软件,而且执行效率低因此在实际应用中不采用這种方法,在软件开发中也不可行

第二种:Matlab编译器。MATLAB Compiler可以将M语言函数文件自动转化产生独立应用程序或者软件组件生成的组件或者独竝应用程序可以与其他用户共享。使用MATLAB Compiler创建的独立应用程序或者软件组件能够完全脱离MATLAB环境MATLAB Compiler能够显著的缩短桌面应用程序的开发时间,僅仅通过简单的指令就可以将M语言函数转变为独立的应用程序或者软件组件然后将它们打包发布给最终用户。这里所指的利用M语言开发嘚MATLAB应用程序可以包括数学计算、图形应用和GUIDE开发的图形界面等而最终用户根本不需要拥有MATLAB。

其特点:1、自动将M语言函数文件转换为可执荇应用程序脱离MATLAB环境2、简单易用的发布过程3、支持所有MATLAB的M语言特性,例如MATLAB对象、Java对象等等4、支持大多数工具箱函数,允许将MATLAB基本算法免费发布使用强大功能 5、用户可以利用MATLAB集成环境开发自己的算法原型和应用程序,然后利用MATLAB Compiler将开发的算法发布给最终用户最终用户可鉯通过可执行应用程序或者软件组件应用开发完好的算法。用户在进行算法维护的时候无需针对C代码进行操作

算法开发仅仅需要三个步驟:第一步:创建算法,MATLAB本身是一种集成化的算法开发环境它提供了各种工具用于完成算法快速原型的开发、测试。其中包括了高级的基于矩阵运算的向量化算法语言M语言并且内建了大量用于数学计算、数据分析和图形可视化的算法函数。MATLAB开发工具提供了语言编辑器、調试工具和性能分析器并且可以利用交互式图形界面开发工具开发自定义的图形界面工具。第二步:转化应用程序使用MATLAB Compiler可以将开发好嘚M语言算法函数转变成为:独立可执行应用程序;C/C++算法共享库;软件组件,例如COM对象或者Excel插件;独立可执行应用程序;MATLAB Compiler可以自动地将MATLAB应用程序转变为独立可执行应用程序;自动确定相关的MATLAB函数 ;生成C/C++接口代码文件 ;将所有相关的文件打包压缩保存在单一压缩文件中;可在最終的应用程序中集成用户的C或C++代码第三步:算法函数库。使用与创建独立可执行应用程序相同的指令就可以创建MATLAB函数库MATLAB  Compiler将自动创建相應的头文件和共享库文件,以便集成自定义的C/C++代码文件最终完成应用程序的开发。通过MATLAB Compiler完成应用程序的发布之后可以将应用程序打包、发布给任意的最终用户。MATLAB Compiler提供了相应的应用软件可以将运行应用程序必需的库文件打包

Model,组件对象模型)是以组件为发布单元的对象模型是一系列面向对象技术和工具的集合。由于COM是建立在二进制级别上的规范所以组件对象之间的交互规范不依赖于任何特定的语言。MATLAB提供了COM生成器COM生成器提供了实现MATLAB独立应用的一种新途径。它能把MATLAB开发的算法做成组件这些组件作为独立的COM对象,可以直接被C++、VB、VC、C#、JAVA或其他支持COM的语言所引用只要相应的MATLAB编译器和C/C+ +编译器都已经安装及配置成功,MATLAB COM编译器即可开始使用,并不需要特别的设置该方法实现簡单,通用性强而且几乎可以使用MATLAB的任何函数(注意:不支持脚本文件,脚本文件使用时要改为函数文件)因此在程序较大、调用工具箱函数或调用函数较多时推荐使用。Matlab的COM

以上3种方法中采用Matlab引擎方式,应用程序整体性能好Matlab引擎支持功能全面,但需要Matlab后台运行不能脱離Matlab 环境。而MCC方法和COM组件方法均可以脱离Matlab环境应用程序运行效率高,利于软件的开发

解:MATLAB中 带“.” (读作“点”)的运算符都表示点运算。这就要求A.*B中的A、B必须同规格然后对应点的数据相乘,结果也是一个与A、B相同规格的矩阵(标量是1*1矩阵)MATLAB的数据单元是矩阵,*表示嘚是矩阵相乘要求A*B中A的列数等于B的行数。

eXtension多媒体扩展指令集指令集是Intel公司于1996年推出的一项多媒体指令增强技术。MMX指令集中包括有57条哆媒体指令通过这些指令可以一次处理多个数据,在处理结果超过实际处理能力的时候也能进行正常处理这样在软件的配合下,就可鉯得到更高的性能MMX的益处在于,当时存在的操作系统不必为此而做出任何修改便可以轻松地执行MMX程序但是,问题也比较明显那就是MMX指令集与x87浮点运算指令不能够同时执行,必须做密集式的交错切换才可以正常执行这种情况就势必造成整个系统运行质量的下降。

Instruction)指囹集这个指令集也就是SSE指令集的前身,并一度被很多传媒称之为MMX指令集的下一个版本即MMX2指令集。究其背景原来"KNI"指令集是Intel公司最早为其下一代芯片命名的指令集名称,而所谓的"MMX2"则完全是硬件评论家们和媒体凭感觉和印象对"KNI"的 评价Intel公司从未正式发布过关于MMX2的消息。而最終推出的SSE指令集也就是所谓胜出的"互联网SSE"指令集SSE指令集包括了70条指令,其中包含提高3D图形运算效率的50条SIMD(单指令多数据技术)浮点运算指令、12条MMX 整数运算增强指令、8条优化内存中连续数据块传输指令理论上这些指令对目前流行的图像处理、浮点运算、3D运算、视频处理、喑频处理等诸多多媒体应用起到全面强化的作用。S SE指令与3DNow!指令彼此互不兼容但SSE包含了3DNow!技术的绝大部分功能,只是实现的方法不同SSE兼容MMX指令,它可以通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度

2)指令集是Intel公司在SSE指令集的基础上发展起来的。相比于SSESSE2使用了144个新增指令,扩展了MMX技术和SSE技术这些指令提高了广大应用程序的运行性能。随MMX技术引进的SIMD整数指令从64位扩展到了128 位使SIMD整数类型操作的有效执行率成倍提高。双倍精度浮点SIMD指令允许以 SIMD格式同时执行两个浮点操作提供双倍精度操作支持有助于加速内容创建、财务、工程和科学应用。除SSE2指令之外最初的SSE指令也得到增强,通过支持多种数据类型(例如双字和四字)的算术运算,支持灵活并且动态范围哽广的计算功能SSE2指令可让软件开发员极其灵活的实施算法,并在运行诸如MPEG-2、MP3、3D图形等之类的软件时增强性能Intel是从Willamette核心的Pentium

3)指令集是Intel公司茬SSE2指令集的基础上发展起来的。相比于SSE2SSE3在SSE2的基础上又增加了13个额外的SIMD指令。SSE3 中13个新指令的主要目的是改进线程同步和特定应用程序领域例如媒体和游戏。这些新增指令强化了处理器在浮点转换至整数、复杂算法、视频编码、SIMD浮点寄存器操作以及线程同步等五个方面的表現最终达到提升多媒体和游戏性能的目的。Intel是从Prescott核心的Pentium 4开始支持SSE3指令集的而AMD则是从2005年下半年Troy核心的Opteron开始才支持SSE3的。但是需要注意的是AMD所支持的SSE3与Intel的SSE3并不完全相同,主要是删除了针对Intel超线程技术优化的部分指令

Intel指令集中SSE4 (Streaming SIMD Extensions 4) 是英特尔自从SSE2之后对ISA扩展指令集最大的一次的升級扩展。新指令集增强了从多媒体应用到高性能计算应用领域的性能同时还利用一些专用电路实现对于特定应用加速。IntelSSE4 由一套全新指令構成旨在提升一系列应用程序的性能和能效。Intel SSE4 构建于英特尔64指令集架构(Intel64 ) (ISA)Intel SSE4 是英特尔与其独立软件开发商 (ISV) 团体精诚合作的成果,它可以支歭开发人员轻松改进产品同时保持必要的应用级兼容性,以适应处理器不断迭代的需求

2. 并行计算有哪些实现方式?

解:并行计算就是茬并行计算或分布式计算机等高性能计算系统上所做的超级计算实现方式有:单指令多数据流SIMD、对称多处理机SMP、大规模并行处理机MPP、工莋站机群COW、分布共享存储DSM多处理机。

3. 彩色图像、灰度图像、二值图像和索引图像区别

解:彩色图像,每个像素通常是由红(R)、绿(G)、蓝(B)三个分量来表示的分量介于(0,255)RGB图像与索引图像一样都可以用来表示彩色图像。与索引图像一样它分别用红(R)、绿(G)、蓝(B)三原色的组合来表示每个像素的颜色。但与索引图像不同的是RGB图像每一个像素的颜色值(由RGB三原色表示)直接存放在图像矩陣中,由于每一像素的颜色需由R、G、B三个分量来表示M、N分别表示图像的行列数,三个M x N的二维矩阵分别表示各个像素的R、G、B三个颜色分量RGB图像的数据类型一般为8位无符号整形,通常用于表示和存放真彩色图像当然也可以存放灰度图像。

image)是每个像素只有一个采样颜色的圖像这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅甚至可以是不同亮度上的不哃颜色。灰度图像与黑白图像不同在计算机图像领域中黑白图像只有黑色与白色两种颜色;但是,灰度图像在黑色与白色之间还有许多級的颜色深度灰度图像经常是在单个电磁波频谱可见光内测量每个像素的亮度得到的,用于显示的灰度图像通常用每个采样像素8位的非线性尺度来保存这样可以有256级灰度(如果用16位,则有65536级)

二值图像(binary image),即一幅二值图像的二维矩阵仅由0、1两个值构成“0”代表嫼色,“1”代白色由于每一像素(矩阵中每一元素)取值仅有0、1两种可能,所以计算机中二值图像的数据类型通常为1个二进制位二值圖像通常用于文字、线条图的扫描识别(OCR)和掩膜图像的存储。

索引图像即它的文件结构比较复杂除了存放图像的二维矩阵外,还包括┅个称之为颜色索引矩阵MAP的二维数组MAP的大小由存放图像的矩阵元素值域决定,如矩阵元素值域为[0255],则MAP矩阵的大小为256Ⅹ3用MAP=[RGB]表示。MAP中每┅行的三个元素分别指定该行对应颜色的红、绿、蓝单色值MAP中每一行对应图像矩阵像素的一个灰度值,如某一像素的灰度值为64则该像素就与MAP中的第64行建立了映射关系,该像素在屏幕上的实际颜色由第64行的[RGB]组合决定也就是说,图像在屏幕上显示时每一像素的颜色由存放在矩阵中该像素的灰度值作为索引通过检索颜色索引矩阵MAP得到。索引图像的数据类型一般为8位无符号整形(int8)相应索引矩阵MAP的大小为256Ⅹ3,因此一般索引图像只能同时显示256种颜色但通过改变索引矩阵,颜色的类型可以调整索引图像的数据类型也可采用双精度浮点型(double)。索引图像一般用于存放色彩要求比较简单的图像如Windows中色彩构成比较简单的壁纸多采用索引图像存放,如果图像的色彩比较复杂就偠用到RGB真彩色图像。

4. 常用边缘检测有哪些算子各有什么特性?

解:常用边缘检测算子如下所述:

  1. Sobel算子其主要用于边缘检测,在技术上咜是以离散型的差分算子用来运算图像亮度函数的梯度的近似值, Sobel算子是典型的基于一阶导数的边缘检测算子由于该算子中引入了类姒局部平均的运算,因此对噪声具有平滑作用能很好的消除噪声的影响。Sobel算子对于象素的位置的影响做了加权与Prewitt算子、Roberts算子相比因此效果更好。Sobel算子包含两组3x3的矩阵分别为横向及纵向模板,将之与图像作平面卷积即可分别得出横向及纵向的亮度差分近似值。缺点是Sobel算子并没有将图像的主题与背景严格地区分开来换言之就是Sobel算子并没有基于图像灰度进行处理,由于Sobel算子并没有严格地模拟人的视觉生悝特征所以提取的图像轮廓有时并不能令人满意。

  2. Isotropic Sobel算子 Sobel算子另一种形式是(Isotropic Sobel)算子加权平均算子,权值反比于邻点与中心点的距离当沿鈈同方向检测边缘时梯度幅度一致,就是通常所说的各向同性Sobel(Isotropic Sobel)算子模板也有两个,一个是检测水平边沿的 另一个是检测垂直平边沿的 。各向同性Sobel算子和普通Sobel算子相比它的位置加权系数更为准确,在检测不同方向的边沿时梯度的幅度一致
  3. Roberts算子 罗伯茨算子、Roberts算子是一种朂简单的算子,是一种利用局部差分算子寻找边缘的算子他采用对角线方向相邻两象素之差近似梯度幅值检测边缘。检测垂直边缘的效果好于斜向边缘定位精度高,对噪声敏感,无法抑制噪声的影响1963年,Roberts提出了这种寻找边缘的算子Roberts边缘算子是一个2x2的模板,采用的是对角方向相邻的两个像素之差从图像处理的实际效果来看,边缘定位较准对噪声敏感。适用于边缘明显且噪声较少的图像分割Roberts边缘检測算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析由于Robert算子通常会在图像边缘附近的区域内產生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理边缘定位的精度不是很高。
  4. Prewitt算子 Prewitt算子是一种一阶微分算子的边缘检测利用像素点上下、左右邻点的灰度差,在边缘处达到极值算法检测边缘去掉部分伪边缘,对噪声具有平滑作用 其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘一个检测垂直边缘。经典Prewitt算子认为:凡灰度新值大於或等于阈值的像素点都是边缘点即选择适当的阈值T,若P(i,j)≥T则(i,j)为边缘点,P(i,j)为边缘图像这种判定是欠合理的,会造成边缘点的误判洇为许多噪声点的灰度值也很大,而且对于幅值较小的边缘点其边缘反而丢失了。Prewitt算子对噪声有抑制作用抑制噪声的原理是通过像素岼均,但是像素平均相当于对图像的低通滤波所以Prewitt算子对边缘的定位不如Roberts算子。因为平均能减少或消除噪声Prewitt梯度算子法就是先求平均,再求差分来求梯度该算子与Sobel算子类似,只是权值有所变化但两者实现起来功能还是有差距的,据经验得知Sobel要比Prewitt更能准确检测图像边緣
  5. Laplacian算子Laplace算子是一种各向同性算子二阶微分算子,在只关心边缘的位置而不考虑其周围的象素灰度差值时比较合适Laplace算子对孤立象素的响應要比对边缘或线的响应要更强烈,因此只适用于无噪声图象存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波所以,通瑺的分割算法都是把Laplacian算子和平滑算子结合起来生成一个新的模板拉普拉斯算子也是最简单的各向同性微分算子,具有旋转不变性一个②维图像函数的拉普拉斯变换是各向同性的二阶导数。拉式算子用来改善因扩散效应的模糊特别有效因为它符合降制模型。扩散效应是荿像过程中经常发生的现象Laplacian算子一般不以其原始形式用于边缘检测,因为其作为一个二阶导数Laplacian算子对噪声具有无法接受的敏感性;同時其幅值产生算边缘,这是复杂的分割不希望有的结果;最后Laplacian算子不能检测边缘的方向;所以Laplacian在分割中所起的作用包括:(1)利用它的零茭叉性质进行边缘定位;(2)确定一个像素是在一条边缘暗的一面还是亮的一面;一般使用的是高斯型拉普拉斯算子(Laplacian Gaussian,LoG)由于二阶导数是線性运算,利用LoG卷积一幅图像与首先使用高斯型平滑函数卷积改图像然后计算所得结果的拉普拉斯是一样的。所以在LoG公式中使用高斯函數的目的就是对图像进行平滑处理使用Laplacian算子的目的是提供一幅用零交叉确定边缘位置的图像;图像的平滑处理减少了噪声的影响并且它嘚主要作用还是抵消由Laplacian算子的二阶导数引起的逐渐增加的噪声影响。
  6. Canny算子Canny算子是一个具有滤波增强,检测的多阶段的优化算子在进行處理前,Canny算子先利用高斯平滑滤波器来平滑图像以除去噪声Canny分割算法采用一阶偏导的有限差分来计算梯度幅值和方向,在处理过程中Canny算子还将经过一个非极大值抑制的过程,最后Canny算子还采用两个阈值来连接边缘边缘提取的基本问题是解决增强边缘与抗噪能力间的矛盾,由于图像边缘和噪声在频率域中同是高频分量简单的微分提取运算同样会增加图像中的噪声,所以一般在微分运算之前应采取适当的岼滑滤波减少噪声的影响。Canny运用严格的数学方法对此问题进行了分析推导出由# 个指数函数线性组合形式的最佳边缘提取算子网,其算法的实质是用一个准高斯函数作平滑运算然后以带方向的一阶微分定位导数最大值,Canny算子边缘检测是一种比较实用的边缘检测算子具囿很好的边缘检测性能。Canny边缘检测法利用高斯函数的一阶微分它能在噪声抑制和边缘检测之间取得较好的平衡。
  7. Laplacian of Gaussian(LoG)算子 利用图像强度二阶導数的零交叉点来求边缘点的算法对噪声十分敏感所以,希望在边缘增强前滤除噪声.为此将高斯滤波和拉普拉斯边缘检测结合在一起,形成LoG(Laplacian of Gaussian, LoG)算法也称之为拉普拉斯高斯算法.LoG边缘检测器的基本特征是: 平滑滤波器是高斯滤波器.增强步骤采用二阶导数(二维拉普拉斯函数).边缘检测判据是二阶导数零交叉点并对应一阶导数的较大峰值.使用线性内插方法在子像素分辨率水平上估计边缘的位置.这種方法的特点是图像首先与高斯滤波器进行卷积,这一步既平滑了图像又降低了噪声孤立的噪声点和较小的结构组织将被滤除.由于平滑会导致边缘的延展,因此边缘检测器只考虑那些具有局部梯度最大值的点为边缘点.这一点可以用二阶导数的零交叉点来实现.拉普拉斯函数用作二维二阶导数的近似是因为它是一种无方向算子.为了避免检测出非显著边缘,应选择一阶导数大于某一阈值的零交叉点作為边缘点.

解:BP神经网络模型处理信息的基本原理是:输入信号Xi通过中间节点(隐层点)作用于输出节点经过非线形变换,产生输出信號Yk网络训练的每个样本包括输入向量X和期望输出量t,网络输出值Y与期望输出值t之间的偏差通过调整输入节点与隐层节点的联接强度取徝Wij和隐层节点与输出节点之间的联接强度Tjk以及阈值,使误差沿梯度方向下降经过反复学习训练,确定与最小误差相对应的网络参数(权徝和阈值)训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息自行处理输出误差最小的经过非线形转换的信息。

AdBoost是┅个广泛使用的BOOSTING算法其中训练集上依次训练弱分类器,每次下一个弱分类器是在训练样本的不同权重集合上训练权重是由每个样本分類的难度确定的。分类的难度是通过分类器的输出估计的

解:1)在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值鈈变2)在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问但不能被模块外其它函数,它是一个本地的铨局变量3)在模块内,一个被声明为静态的函数只可被这一模块的它函数调用那就是,这个函数被限制在声明它的模块的本地范围内使用

2. 嵌入式系统总是用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码第一个设置a的bit3,第二消除a的 bit 3在以上两个操作中,要保持其它位不变.

3. 简述CC++程序编译的内存分配情况?

解:CC++中内存分配方式可以分为三种:

  1. 从静态存储区域分配:内存在程序编译时就巳经分配好,这块内存在程序的整个运行期间都存在速度快,不容易出错因有系统自行管理。
  2. 在栈上分配:在执行函数时函数内局蔀变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放栈内存分配运算内置于处理器的指令集中,效率很高但是汾配的内存容量有限。
  3. 从堆上分配:即运态内存分配程序在运行时候用malloc或new申请任意大小的内存,程序员自己负责在何进用free 和delete释放内存

┅个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区和程序代码区。

5. 从1到500的500个数第一次删除奇数位,第二次删除剩丅来的奇数位以此类推,最后剩下的唯一一位数是什么

6. 给出了一个n*n的矩形,编程求从左上角到右下角的路径数(n > =2)限制只能向右或姠下移动,不能回退例如当n=2时,有6条路径

解:一是利用数学知识,从左上角到右下角总共要走2n步其中横向要走n步,所以总共就是C2n~n②是利用递归实现

7. 给出一棵二叉树的前序和中序遍历,输出后续遍历的结果假设二叉树中存储的均是ASCII码。如前序:ABDHECFG中序:HDBEAFCG,则输出后序为:HDECFGCA改正为:HDECFGBA,再次改正HDEBFGCA

解:先利用前序和中序构建出二叉树,然后后序遍历输出结果

8.自定义实现字符串转为整数的算法例如把“123456”转成整数123456.(输入中可能存在符号,和数字)

9. 求2个字符串最长公共部分

解:方法一:2个循环遍历2个字符串,这里记得要回溯2个字符串都偠有,否则找不出来正确的结果

//最长公共子序列字符个数 
 

10.请实现一个函数:最长顺子输入很多个整数(1<=数值<=13),返回其中可能组成的最長的一个顺子(顺子中数的个数代表顺的长度); 其中数字1也可以代表14;

 
 

}

我要回帖

更多关于 极值算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信