记录神经网络中一些小知识点
1 Caffe中的blob维度
- Caffe中的blob具有4个维度,分别是num,channel,width和height;
- 其中我们在定义各个网络层时,常用到的一个参数numout,就是指定的channel;
- 比如说,维度为1*3*5*5的数据输入网络(即每次输入一张5*5大小的3通道图),经过一个stride为2,pad为1,kernel为2,numout为2的卷积层后,维度就变成了1*2*3*3;
- 假如输入有n个通道,计算时,caffe就会对应产生n个filter来与之相乘,然后将得到的这n个乘积加起来,这个计算过程最后产生一个channel;
- 假如输出的numout为m,就会有m个上述计算过程;
- 可参考下图
- 我们经常能看到在一些网络里,使用1*1kernel大小的卷积层来降维,就是这个原因;googlenet里也用来减少网络参数。

2 1*1卷积核的作用
3 感受野计算
- 感受野(receptive field)是卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
- 下图中,map 3里1x1的区域对应map 2的receptive field是那个红色的7x7的区域,而map 2里7x7的区域对应于map 1的receptive field是蓝色的11x11的区域,所以map 3里1x1的区域对应map 1的receptive field是蓝色的11x11的区域。

- 计算方式
- 对于Convolution/Pooling layer:
ri=si?(ri+1?1)+ki
- 对于Neuron layer(ReLU/Sigmoid/…):
ri=ri+1
- 其中ri表示第i层layer的输入的某个区域,si表示第i层layer的步长,ki表示kernel size。
- 注意
- 计算感受野时,忽略图像边缘的影响,即不考虑padding的大小;
- 最深层感受野的大小等于滤波器的大小;
- 计算的时候采用top to down的方式, 即先计算最深层在前一层上的感受野,然后逐渐传递到第一层。
4 Caffe做fine-tuning注意事项
- fine-tuning时可能遇到报错:
- 现象:
[Caffe]: Check failed: ShapeEquals(proto) shape mismatch (reshape not set)
- 原因:加载的caffemodel会根据prototxt中layer的name来进行参数赋值;但是如果你更改了layer的参数(包括但不限于
输入数据的维度
,numout
等),caffemodel就会难以和新的网络匹配;
- 解决办法:如果修改了网络参数,就要修改相应layer的name,如此一来,加载caffemodel时就不会载入pre-train的参数,从而避免参数和数据不匹配;当然,没有加载pre-train参数的部分结构则会重新初始化。
5 fcn生成的概率图具有颗粒状/马赛克
6 可视化小工具推荐
本篇博客参考自
《CaffeCN社区(caffecn.cn)- 1X1卷积核到底有什么作用呢? 》