zoukankan      html  css  js  c++  java
  • 卷积神经网络的变种: PCANet

    前言:昨天和大家聊了聊卷积神经网络,今天给大家带来一篇论文:pca+cnn=pcanet.现在就让我带领大家来了解这篇文章吧。

    论文:PCANetA Simple Deep Learning Baseline for Image Classification

    论文地址:https://core.ac.uk/download/pdf/25018742.pdf

    论文代码:https://github.com/Ldpe2G/PCANet

    1 摘要

    这部分我就不说了,都在我的上一篇博客说了:http://www.cnblogs.com/xiaohuahua108/p/7029128.html就是分析分析传统的特征抽取方法没有卷积神经网络方法抽取特征方便,快捷,准确率高什么的。其实说白了就是用PCA去学习卷积神经网络的卷积核,当然后面用二值化和哈希去重置像素点。PCANET特征提取流程图:

    2 PCAnet的网络结构

    假设我们现在有N个大小为mxn的训练样本,设置每一个层次的滤波器大小为k1xk2.

    下图是一个pcanet的详细图:

    2.1 第一层

    例如下面的一副图像,我们对每一个像素点进行一个k1xk2的块采样,既然每一个像素点都要被采样到,那么就是mxn个,得到第i 个训练样本就为:,其中,至于为什么卷积之后是这样呢,你拿着卡片这样一个一个沿着像素点平移,得到的也是这个。

    然后就是必不可少的去中心化,,那么整个训练集就为,

    假设第i层的滤波器数量是,PCA的目的就是寻找一些列的标准正交矩阵来最小化重构误差:

    那么就是解决主成分分析,也就是矩阵X的协方差矩阵的前n个特征向量,因此对应的PCA滤波器如下:

    2第二层

    第二层基本与第一次相同。首先计算第一次PCA层的映射输出,为:

    当然这是要在得到的图像上进行补零操作,以保持和原图像一样的大小。

    最后我们可以得到第二层PCA的滤波器,然后对第一层得到的图像进行卷积操作,接着进行二值化。

    3输出层

    对第二层得到图像进行二值化哈希编码,编码位数与第二层的滤波器个数相同。

    公式为:

    把原来的图像映射成,0-255,此处一般设置成8,函数H 是一个阶跃函数。,表示第二层的滤波器个数。

    对于第一层的每个输出矩阵,将其分为B块,计算统计每个块的直方图信息,然后在将各个块的直方图特征进行级联,最终得到块扩展直方图特征:

    在进行直方图分块时同样可以采用重叠分块和非重叠分块模式,需要视情况而定。实验表明非重叠分块适用于人脸识别,重叠分块模式使用于手写数字识别、文本识别、目标识别等等。此外直方图特征还为PCANet提取到的特征添加了一些变换上的稳定性(例如尺度不变形)。

    4 实验结果

    3 总结

    我认为这篇文章最好的点就是在卷积层用了PCA,这样早卷积的时候就有了一定的目的性,从而提高了分类效率。创新性很高。

  • 相关阅读:
    Java架构师成长直通车百度云
    java架构师直通车百度云
    java架构师成长直通车
    初级Java程序员需要掌握哪些主流技术
    JAVA互联网架构师专题/分布式/高并发/微服务之咕泡学院学习笔记
    java架构师学习之路
    新手都能学懂的SpringBoot
    2020新版python最新就业班项目实战教程(完整)
    35个jQuery小技巧!
    web知识总结
  • 原文地址:https://www.cnblogs.com/xiaohuahua108/p/7039559.html
Copyright © 2011-2022 走看看