@[T
PCANet可谓是国内技术大牛新提出的一种新的深度学习框架,为了方便大家研究,在此将其摘要、引言、基本原理介绍等三部分的内容进行了翻译,不过并非原文直译,会加上一点我自己的理解,次要部分也会一笔带过。如果大家不介意,可以去阅读原版的英文文档。
摘要
在这篇文章中,我们提出了一个很简洁的关于图像分类的深度学习框架,这个框架主要依赖几个基本的数据处理方法:1)主成分分析PCA。2)二值化哈希编码。3)分块直方图。在这个框架中,首先通过PCA方法来学习多层滤波器核,然后使用二值化哈希编码以及块直方图特征来进行下采样和编码操作。为了便于比较,我们会介绍另外两种类似的框架:RandNet和LDANet。他们之间的基本思想是相同的,但RandNet的滤波器核采用随机初始化的方式,LDANet的滤波器核通过线性判别分析来学习得到。用以进行试验测试的数据库主要有:LFW(用于人脸认证)、MultiPIE、Extend Yale B、AR、FERET、MNIST等数据库。通过试验发现该方法现对于手选特征识别分类、深度神经网络等分类模型,都存在一些优势,并且在一些数据集的识别率达到了新的高度。
一 引言
基于视觉语义的图像分类一直以来都是一个充满挑战的研究领域,不仅仅待识别的图像种类繁多,在每一类图像的内部也存在诸多变数,包括光照变化、不匹配不对齐、形变因素、遮挡因素等等。针对这些变数,学者们做了各种各样的努力,提出各种各样的特征来应对这些变化。比较典型的例子有文本分类、人脸分类中用到的LBP特征、目标识别中用到的SIFT和HOG特征。虽然这些手选的底层特征能够很好的应对特定情况下的数据处理任务,但是这些特征的泛化能力有限,对待新问题往往需要构建新的特征。
从数据中学习得到感兴趣的特征被认为是克服手选特征局限性的一个好的方法,最典型的一个例子就是通过深度神经网路来进行特征学习。深度学习的基本思想是通过构建多层网络,对目标进行多层表示,以期通过多层的高层次特征来表示数据的抽象语义信息,获得更好的特征鲁棒性。目前深度学习中一个关键的、相对成功的框架是卷积网络框架。一个深度卷积网络结构包含多层训练结构以及有监督的分类器,每一层都包含三个子层,分别为卷积层、非线性处理层以及下采样层。对于这种卷积网络结构一般都通过梯度下降法对其进行训练。然而要想学习得到一个优质的卷及网络分类结构,需要有各种各样的调参经验和技巧。
目前,针对不同的视觉识别任务,人们提出了许多各种各样的卷积神经网络结构,并取得了显著效果。例如较为成功的小波散射模型(ScatNet),其通过将卷积核改为小波核来避免算法学习的步骤。然而就是这一简单改动,使其居然能够在手写数字识别和文本识别等方面超过相同层次的卷积网络和深度神经网络,不过它在人脸识别方面表现不佳,难以应对光照变化和遮挡影响。
A 动机和目的
我们最开始的研究目标是试图针对卷积网路和小波网络之前的差异性来提出解决方案,我们希望达到两个目标:首先我们希望我们所设计的深度学习模型结构简单,能够在不同的数据和场景任务下进行训练和分类;其次,希望能为深度学习的深入研究和应用提供一个基本的参考标准。
为了达到以上目标,我们使用最基本的PCA滤波器作为卷积层滤波器,在非线性层使用二值化哈希编码处理,在重采样层使用分块扩展直方图并辅以二值哈希编码,将重采样层的输出作为整个PCANet网络最终的特征提取结果,考虑到以上的因素,我们将这种简洁的深度学习结构命名为PCANet。图一展示了一个2阶PCANet特征提取流程:
PCANet的重要特点就在于其结构的简单性,例如每层只进行PCA映射,只在最后一层的输出层进行二值化哈行编码和直方图的分块处理,这种简单性似乎对已有的传统深度学习模型(例如卷积网络结构以及小波分散式网络结构)构成挑战。然而通过大量实验证明,大道至简的深度模型在不同类型的数据库上表现还都令人满意。
一个与PCANet十分相近的网络结构当属于二阶导向型PCA(OPCA),这种结构最早应用于音频处理过程。二者之间显著的不同点事OPCA没有连接哈希编码和局部块直方图处理过程,对于附加了噪声的协方差矩阵,OPCA有着额外的噪声及形变鲁棒性,当然PCANet也吸收了OPCA这一优点,对噪声有着较好的鲁棒性。最后我们会对PCANet进行一些扩展研究,包括通过线性判别分析来训练卷积核(LDANet)、通过随机初始化的方法来出事PCANet的卷积核(RandNet)。在文章中我们会通过大量对比实验来对比PCANet与现有的深度学习模型(卷积网路模型、小波分散卷积模型等)的性能,希望通过实验能使大家对PCANet有一个更好的理解。
B 所做工作
虽然我们初始的目的是通过构建一个简单的深度模型框架来为大家提供一个横向深度学习模型性能的基本标准,但是通过各种各样的实验我们惊奇的发现:这个基本的PCANet框架,在一些主流的数据库上所表现出的优越性能,例如人脸识别、手写字体分类、文本分类等等,已经能和当下相对成熟的深度学习模型相匹敌。以单样本人脸识别为例,在Yale B数据库上达到了99.58%正确率,在AR数据库的光照子集上达到了95%的识别率,在FERET数据库上达到97.25%正确率,在其DUP-1和DUP-2两个子集上分别达到95.84%和94.02%的正确率。在LFW数据库上,该模型在无监督人脸认证测试过程中达到86.28%的正确率。在MNIST数据库上该模型同样表现出色。通过实验,我们能够充分证明PCANet能够学习得到适合分类的鲁棒特征。
PCANet模型中几乎没有包含任何新的深度学习方面的方法,我们目前所做的研究也是大部分都基于以前积累的经验。不过无论怎么说,这个如此简单的模型已经在深度学习和视觉图像识别方面展现出了巨大价值,这种情况给我们传递了两条重要信息:一方面PCANet能够充当一个简洁但又极具竞争力的深度模型判断标准;另一方面,PCANet之所以能够取得巨大成功,很大程度上得益于其分层级联的特征学习结构。更重要的是,由于CPANet在二值化哈希编码和直方图分块之后只进行一次线性映射,使其能够从数学分析判断的角度论证其有效性。这个模型有利于我们更深入的洞察深度结构的理论基础,而这正是当下大家急需努力的方向。
二 级联线性网络结构(PCANet)
A PCANet的网络结构
假定我们有N个训练图片样本,每个样本的尺寸为m*n,设置每层的滤波器尺寸为k1*k2,图2为一个典型的PCANet模型,途中只用PCA滤波器核需要从训练样本集中进行学习,我们会依据这个网络结构来详细的介绍途中各个部分的含义。
1)第一层(PCA):
对于每个像素,我们都在其周围进行一次k1*k2的块采样(这里采样时逐个像素进行的,因此是完全的覆盖式采样),然后收集所有的采样块,进行级联,作为第i张图片的表示
其中:
接下来需要对采样得到的块进行零均值化,具体如下:
然后对训练集中的其他图片也做相同处理,最终得到处理后的训练样本矩阵:
假定在第i层的滤波器数量为Li,PCA算法的目的就是通过寻找一系列的标准正交矩阵来最小化重构误差:
这个问题的求解就是经典的主成分分析,即矩阵X的协方差矩阵的前n个特征向量,因此对应的PCA滤波器表示如下:
这个方程的含义就是提取X的协方差矩阵的前L1个最大特征值对应的特征向量来组成特征映射矩阵。这些主成分中保留了这些零均值的训练样本的主要信息。当然,与DNN和ScatNet相似,我们同样可以通过提高网络层数来提取更为抽象的特征。
2)第二层(PCA)
第二层的映射过程和第一层的映射机制基本相同,首先计算第一层的PCA映射输出:
注意这里在计算卷积映射之前需要实现对样本进行边缘补零操作,以保证映射结果与原图像的尺寸相同(卷积操作会导致尺寸变小)。正如第一层中所做的分块操作,在第二层同样对输入矩阵(也就是第一层的映射输出)进行块采样、级联、零均值化:
对每个输入矩阵都进行上述操作,最终得到第二层输入数据的块采样形式:
同理,第二层的PCA滤波器同样通过选取协方差矩阵对应的特征向量来组成:
由于第一层具有L1个滤波器核,一次第一层会产生L1个输出矩阵,在第二层中针对第一层输出的每一个特征举证,对应都产生L2个特征输出。最终对于每一张样本,二阶PCANet都会产生L1*L2个输出的特征矩阵:
可见,第一层和第二层在结构上是十分相似的,因此很容易将PCANet扩展成包含更多层的深度网络结构。
3)输出层(哈希编码和直方图处理)
我们对第二层的每个输出矩阵都进行二值处理,得到的结果中只包含整数和零,然后在对其进行二值化哈希编码,编码位数与第二层的滤波器个数相同:
这里的函数H()类似于一个单位阶跃函数。经过上述处理,每个像素值都被编码成为(0,255)之间的整数(在L2=8的情况下)。当然这里的编码值与权重并没联系,因为我们将每个编码值都视为一个独立的关键字。
对于第一层的每个输出矩阵,将其分为B块,计算统计每个块的直方图信息,然后在将各个块的直方图特征进行级联,最终得到块扩展直方图特征:
在进行直方图分块时同样可以采用重叠分块和非重叠分块模式,需要视情况而定。实验表明非重叠分块适用于人脸识别,重叠分块模式使用于手写数字识别、文本识别、目标识别等等。此外直方图特征还为PCANet提取到的特征添加了一些变换上的稳定性(例如尺度不变形)。
OK,以上就是原文中对于PCANet的基本描述和原理介绍,剩下的有关PCANet性能分析、实验结果等内容就不再翻译,这部分内容直接参照原文中的数据即可,以上内容有翻译得不恰当的地方还请大家多多指正。
OC](这里写自定义目录标题)
欢迎使用Markdown编辑器
你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:
- 全新的界面设计 ,将会带来全新的写作体验;
- 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
- 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
- 全新的 KaTeX数学公式 语法;
- 增加了支持甘特图的mermaid语法1 功能;
- 增加了 多屏幕编辑 Markdown文章功能;
- 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
- 增加了 检查列表 功能。
功能快捷键
撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G
合理的创建标题,有助于目录的生成
直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC
语法后生成一个完美的目录。
如何改变文本的样式
强调文本 强调文本
加粗文本 加粗文本
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
插入链接与图片
链接: link.
图片:
带尺寸的图片:
当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。
如何插入一段漂亮的代码片
去博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片
.
// An highlighted block
var foo = 'bar';
生成一个适合你的列表
- 项目
- 项目
- 项目
- 项目
- 项目1
- 项目2
- 项目3
- 计划任务
- 完成任务
创建一个表格
一个简单的表格是这么创建的:
项目 | Value |
---|---|
电脑 | $1600 |
手机 | $12 |
导管 | $1 |
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 | 第二列 | 第三列 |
---|---|---|
第一列文本居中 | 第二列文本居右 | 第三列文本居左 |
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE | ASCII | HTML |
---|---|---|
Single backticks | 'Isn't this fun?' | ‘Isn’t this fun?’ |
Quotes | "Isn't this fun?" | “Isn’t this fun?” |
Dashes | -- is en-dash, --- is em-dash | – is en-dash, — is em-dash |
创建一个自定义列表
-
Markdown
- Text-to- HTML conversion tool Authors
- John
- Luke
如何创建一个注脚
一个具有注脚的文本。2
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎