PCANet训练过程
来源:互联网 发布:android源码分析实录 编辑:程序博客网 时间:2024/05/22 14:20
PCANet:一种简单的深度学习算法_PCA主成分分析
之前看过一句话,未来领域类专家需求将越来越少,而相应的数据挖掘专家需求将不断增加,这时因为深度学习的核心在于其自适应的特征提取。PCANet是一个基于CNN的简化Deep Learning模型。之所以读它是因为它是基于PCA(SVD)的,其卷积核从图像信号的某种SVD分解得到的,而这也是张量列分解的核心之一。该网络与CNN相比最大的地方在于卷积核是直接通过PCA计算得到的,而不是像CNN一样通过反馈迭代得到的。
从上图可以看到,PCANet的训练分为三个步骤(stage),前两个stage很相似,都是去平均,然后PCA取主成分并卷积,最后一步是二值化和直方图量化。下面按步骤介绍PCANet的训练过程:
1.first stage
1)、选取一个k1*k2的窗口(通常为3*3、5*5、7*7)来滑动选取图片的局部特征。每张m*n大小的图片I_i经过滑动窗口提取局部特征之后,就变成了(m-k1+1)*(n-k2+1)个k1*k2大小的patch(注:在论文中patch个数是mn,代码中是(m-k1+1)*(n-k2+1),为方便书写,以下都写为mn),将其写成k1k2*mn列的矩阵B_i,每一列代表一个局部特征patch。相应的滑动选取公式为:
x_{ij}=Vec(I_i(j1:j1+k1-1,j2:j2+k2-1))
其中j=j1+(j2-1)*(m-k1+1).
2)、将以上矩阵按列进行去平均,便完成了对单张图片的特征提取操作。
3、对所有N张图片执行以上操作,将特征并排在一起,得到一个新的数据矩阵X,每一列含有k1k2个元素,一共有Nmn列。
4、对这个X矩阵做PCA,取前L1个特征向量,作为该步骤的filter。
5、把这L1个特征向量的每一列(每一列含有k1k2个元素)重排列为一个patch,这样就得到了L1个k1*k2的卷积核{W_l^i}_{l=1}^{L1}。
6、然后就是对每一张图片,都用这L1个卷积核做一次卷积。I^l_i=I_i * W_l^i
2.Second stage
步骤同first stage,此时输入图片数为N*L1张,通过PCA得到L2个卷积核,输出N*L1*L2张图片.
3、Output layer: hashing and histogram
Hashing: 二值化
首先是对Second stage的每个卷积的结果做二值化,每一组得到L2张二值图片,对这L2张二值图片进行十进制编码,得到一张新的十进制图片,元素取值范围为[0, 2^L1-1]
Histogram:直方图统计
对每L1张图片做histBlock到vector的变换,假设对原图128*48的图选取32*32的histBlock,overlap系数0.5,原图有14个histBlock,将histBlock变换为vector,得到1024*14的矩阵。对这个1024*14的矩阵做直方图统计,因为选了256个区间,所以得到的Bhist矩阵大小为256*14。最后将这个矩阵转化为28672(L1=8,28672=256*14*8)维的vector,这样就完成了一张图片的PCANet的特征提取。
二、分类器训练
将列向量放到训练好的SVM中进行分类
- PCANet训练过程
- PCANet
- PCANet
- PCANet
- PCANet简介
- PCANet简介
- 训练样本的过程
- Adaboost 训练过程
- Deep Learning训练过程
- 决策树的训练过程
- boost的训练过程
- DBN的训练过程
- RNN训练过程详解
- SSD训练过程
- yolo_v2的训练过程
- papagraph vector 训练过程
- 训练过程概要
- 表情识别训练过程
- Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
- 基本算法思想Java实现的详细代码
- 前端开发面试题整理(JS篇)
- Tricks(三十八)—— 在不计算欧式距离的前提下判断点到两点的距离哪个更近
- iOS 手势
- PCANet训练过程
- SPL spl_autoload_register 初体验 (转)
- Timus 1292 Mars Space Stations
- Yacc基础语法分析程序(无附加实验内容)
- html5 IndexedDB浏览器端数据库
- 【SSH进阶之路】深入源码,详解Struts基本实现流程(七)
- javaweb中两种jsp声明
- segmentation fault (core dumped) 调试
- android应用发布流程