caffe特殊层:permute\reshape\flatten\slice\concat

1permute

permute是SSD特有的层,功能类似于np.swapaxes;相当于交换caffe_blob中数据的维度,如图

2、reshape

只改变输入数据的维度,内容不变。(变形而已)

3、flatten

将多维数据拉成向量:Flatten层是把一个输入的大小为n * c * h * w变成一个简单的向量,其大小为 n * (c*h*w)

当Reshape层的param参数为:{ shape { dim: 0 dim: -1 } } ,那么输出和flatten输出是完全一样的。

所以,flatten相当于是reshape的特例。

4、concat

按指定维度进行拼接,caffe中数据通常为4个维度,即 num×channels×height×width,因此默认值1表示channels通道进行拼接。通过axis指定拼接的维度  

这是按num进行拼接,比如上面,输入图像均为24×24×3,用于分类的有150张图片,用于boundingbox回归的有50张,用于关键点回归的也有50张,则最后拼接的结果就是 (150+50+50)×3×24×24。

 

5、slice

concat就是合并的操作,那么slice就是拆分的操作,需要指定的参数是:拆分的通道axis、拆分的位置slice_point

比如:

其中slice_point的个数必须等于top的个数减一。输入的data_all维度为 250×3×24×24,拆分后的3个输出的维度依次为 150×3×24×2450×3×24×24, 50×3×24×24

 

 

 

 

 

你可能感兴趣的:(深度学习)