总体思想:
1、同时使用CNN-RNN进行图像特征的学习,对RGB-D图像进行分类
2、使用单层CNN提取图像低维特征,使用这种方法的原因在于这种低维特征能够允许物体的部分形变,从而具有一定的鲁棒性。将单层CNN的输出作为输入输入至RNN中,让RNN去学习特征间的组合关系(应该也可以理解为是RNN学习到的隐关系)
3、尝试探索新的用于机器视觉的深度学习架构,在之前的用于自然语言处理和计算机视觉中,尝试使用(1)对每种输入采取不同树结构(2)对单层RNN使用一套权重(3)严格限制树的结构为二维(4)使用反向传播训练RNN。在本文中使用固定树结构,允许n进制树。
4、使用非监督学习的方法学习滤波器权重。
5、总体结构示意图(引自原文)
左侧为RGB图像,右侧为深度图像。首先使用K个滤波器进行卷积操作,将卷积层输出结果按序输入至RNN中。这里有一点不明白,就是为什么CNN和RNN的块输入顺序不同。
Convolutional-Recursive Neural Networks
1、非监督学习CNN滤波器
实现方法,首先将RGB和深度图像的patch分别进行提取放入到两个集合内,而后分别进行归一化和白化。对这些预处理过的patch使用k-means进行聚类,下图为进行聚类后得到的结果(引自原文)
2、单层CNN
使用单层CNN结构是为了使提取的特征具有平移不变性。使用了what is the best multi-stage architecture for object recognition的结构,并且加入了矫正和LCN(局部对比度归一化,用于在一个feature map中实现对比特征)。
使用K个filter,大小为dp,进行卷积操作,然后再使用size为dl,stride为s进行平均池化。最终得到一个K×r×r的3D矩阵为输出。
3、Fixed-Tree Recursive Neural Networks
本文中使用的结构是一个固定的树结构,叶节点为K维向量(来自于CNN池化后的结果),为了方便理解,画了两个示意图(字略丑,凑合看)第一个就是经池化后从CNN输出的结果,第二张是k为128,block大小为3×3的拼接。
整个部分的目的就是为了提取图像的隐特征,并且最终输出的结果是一个k维的向量。每一步的操作都类似于金子塔,其计算方式如下,W为权重,维度为K×b^2K
在实现过程中,第一个matrix P1的数量应该为(r/b)^2个,其中r为经过CNN处理后的输入图像的大小,b表示block的大小。从X到P1的合并就使用上述公式,对将P1合并为P2同样也使用相同的方法,直至最后只剩下一个P矩阵。使用后向传播,最小交叉熵进行训练。下图为合并过程示意图,摘自原文。
4、Multiple Random RNNs
对于3D矩阵的输入,可以使用N个RNN,每个RNN都输出K维向量,然后将这N个输出进行连接,作为softmax分类器的输入。实验表明即使RNN使用random weight,仍能够获得较高质量的特征向量。