卷积相关问题

普通卷积问题:

1.每次做卷积图像会缩小,可能最后1x1大小,可能不想在每次卷积或者识别其他特征时图像都缩小

2.在角落或者边缘区域的像素点在输出中采用很少,意味着丢掉了图像边缘位置的许多信息

解决:

在运用卷积操作之前,先填充图像;这就是valid和same的卷积,valid模式不填充,same模式填充。也就是加入padding。

卷积核一般都是奇数的原因:

如果核是一个偶数,那么只能用一些不对称的方式填充;如果核是奇数,same卷积才会有自然的填充(是对称的)。当我们有一个奇数维卷积核,它就有一个中心点,因为在机器视觉里面如果有一个中心像素点,会很方便的指出过滤器(核)的位置。

计算参数:

如果10个卷积核都是3x3x3,在神经网络的同一层,那么这一层有多少参数?

3x3x3=27+bias=28                28x10=280  所以无论图片有多大,用10个过滤器来提取特征,参数总是280个

设置卷及网络里面的超参数:

常规做法就是尽量不要自己设置超参数而是查看文献中别人使用了那些超参数,选一个在别人任务中效果很好的框架,那么它有可能适用于你自己的应用程序。随着网络的加深,有下面的趋势:n_H,n_W也就是卷积的输出特征大小越来越小,n_C特征层会越来越多。

为什么使用卷积网络:

1.参数共享:一个特征提取器在图像的某一部分有用,同时也可能在图像的另一部分同样有用。

2.稀疏连接:在每一层,每一个输出值只由输入的一部分决定。

3.可以自己学习里面的参数设定

4.卷积网络可以通过以上机制来减少参数,以便于我们用更小的数据集来训练它从而预防过拟合。卷积网络善于捕捉平移不变性。由于CNN的卷积结构,即使移动几个像素,图片依旧具有非常相似的特征,应该属于同样的输出标记。

转跳连接:

允许我们从某一激活层的输出,转跳到另外一层甚至是更深层的网络,但是要在激活层之前。当不同维度的时候就不能直接相加,而是增加一个矩阵W,而这个矩阵是网络通过学习得到的参数。resnet就是使用转跳连接这种方法,确实是帮助了梯度消失和爆炸,并且能允许我们训练更加深的网络。resnet对于训练深度网络是非常有效的。

1x1卷积(也叫作瓶颈层):

1x1可以保持H和W,改变通道数目。那么当用来压缩通道数目的时候就能减少计算。只要构建合理的瓶颈层,既可以显著缩小表示层规模,又不会降低网络性能,从而大量节省了计算。

使用开源的实现方案:

一个常见的流程是:先选一个喜欢的架构(比如pytorch),接着寻找一个开源实现。从github上下载,以此为基础开始构建(这样做的一个优点在于这些网络通常都需要很多时间来训练,或者有人已经使用多个GPU和通过大量的数据集预先训练了这些网络,这样一来就可以使用这些网络进行迁移学习,转换到感兴趣的任务上)。我们会发现对于很多计算机视觉的应用,如果我们下载其他人的开源的权重,并应用于我们问题的初始化,我们会做的更好。在所有深度学习中的不同应用中,计算机视觉是一个经常用到迁移学习的领域。

数据扩充:

计算机视觉的主要问题是没有办法得到充足的数据,但是对大多数机器学习来说不是一个问题。常见的数据增强方法如下:

1.垂直镜像对称       (常用的)

2.随机裁剪(并不是一个完美的数据增强方法)   (常用的)

3.旋转  (理论上,较复杂)

4.剪切  (理论上,较复杂)

5.局部变形  (理论上,较复杂)

6.色彩转换  (理论上,较复杂)