PCANet是一个简单但是效果很棒的网络,避免了深度学习中调参以及参数学习的过程和麻烦。该网络与CNN相比最大的地方在于卷积核是直接通过PCA计算得到的,而不是像CNN一样通过反馈迭代得到的。它的组成分成三个部分1)级联主成分分析(PCA); 2)二进制哈希编码; 3)分块直方图。为了进行比较论文还研究了PCANet的两个简单变体:1)RandNet和2)LDANet。它们与PCANet具有相同的拓扑结构,但它们的级联滤波器可以随机选择,也可以从线性判别分析中学习。
下图为两层PCANet网络具体框架
- 第一层(PCA)
针对i个图像中每一个像素点选取大小为k1*k2的邻域,对每个patch进行去中心化得到
,
综合i个图像得到
那么重构误差可以写为
也相当于取
的前l个特征值所对应的特征向量
。
主要的特征向量捕获所有移除平均值的训练窗口的变化。
- 第二层(PCA)
让N张原图与第一阶段得到的卷积核卷积得到
第一阶段卷积得到N*L1张图片,对这些图片进行与第一阶段相同的过程
计算第二层卷积核,
与第一阶段得到的图像进行卷积得到N*L1*L2张图片
- 输出层(哈希编码和分块直方图)
第一阶段得到的N*L1张中的每一张图片对应阶段二得到的L2张图,我们要将这L2张图转换为一张图就要进行下面的操作。对这L2张图进行哈希编码,大于0的值设置为1,其余值设置为0。接下来针对阶段一中每张图片中的每一个像素对这L2张图的像素进行编码
那么得到的每一个像素值在
之间。这就得到了N*L1张图。
接下来对每L1张图片做histBlock到vector的变换,对每一个张图像中每个像素点为中心取m*n大小histBlock,原图有k个histBlock,将histBlock变换为vector,得到nm*k的矩阵。对这个nm*k的矩阵做直方图统计,因为选了
个区间,所以得到矩阵大小为
*k。最后将这个矩阵转化为L1*k*
维的vector,这样就完成了一张图片的PCANet的特征提取。
- 注意事项
①PCANet的超参数包括滤波器大小k1,k2,每层中的滤波器的数量L1,L2,以及输出层中的局部直方图的块大小m*n。 PCA滤波器组要求k1k2≥L1,L2。
②实验常选取设置L1 = L2 = 8,这是从具有8个方向的Gabor滤波器的共同设置中得到启发
③经验证明,两阶段PCANet通常足以实现良好的性能,而更深层的体系结构并不一定能带来进一步的改进。此外,直方图选取较大块在提取的特征中提供了更大的平移不变性。