PCANet过程简介

原文 https://blog.csdn.net/orangehdc/article/details/37763933

跳转原文

PCANet是一个基于CNN的简化Deep Learning模型。


上图为经典卷积网络示意图

PCANet提出者认为,经典的CNN存在的问题是参数训练时间过长且需要特别的调参技巧。

因此他们希望能找到一种训练过程更为简单,且能适应不同任务、不同数据类型的网络模型。这个模型就是PCANet。


从上图可以看到,PCANet的训练分为三个步骤(stage),前两个stage很相似,都是去平均,然后PCA取主成分并卷积,最后一步是二值化(为了产生非线性输出)和直方图量化。下面按步骤介绍PCANet的训练过程:


1、First stage:


PCANet选取了一个k1*k2的窗口(通常选边长为3、5、7个像素正方形窗口)来滑动选取图片的局部特征。

每张m*n大小的图片经过滑动窗口提取局部特征之后,就变成了mn个k1*k2大小的patch。

再对这mn个patch去平均,便完成了对单张图片的特征提取操作。

对所有N张图片执行以上操作,提取完之后得到一个新的数据矩阵X,每一列代表一个patch,含有k1k2个元素,一共有Nmn列。



然后就是对这个X矩阵做PCA,取前L1个特征向量,作为filter。



把这L1个特征向量的每一列(每一列含有k1k2个元素)重排列为一个patch,相当于我们得到了L1个k1*k2的窗口。



然后就是对每一张图片,都用这L1个窗口做一次卷积。First stage到此结束。


2、Second stage:


这个步骤跟First stage是相似的,但工作量变成原来的L1倍。




这个步骤也是类似的。


3、Output layer:


首先是对Second stage的每个卷积的结果做二值化,每一组得到L2张二值图片,对这L2张二值图片进行编码,得到十进制的"image"。



然后对每L1张图片做histBlock到vector的变换,假设对原图128*48的图选取32*32的histBlock,overlap系数0.5,原图有14个histBlock,将histBlock变换为vector,得到1024*14的矩阵。

对这个1024*14的矩阵做直方图统计(对应源代码是matlab的histc函数,对此函数不了解的可以看这篇blog),因为选了256个区间,所以得到的Bhist矩阵大小为256*14。

最后将这个矩阵转化为28672(L1=8,28672=256*14*8)维的vector,这样就完成了一张图片的PCANet的特征提取。



参考文献:

PCANet: A Simple Deep Learning Baseline for Image Classification?

PCANet-slides.pdf

PCANet.zip

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值