深度学习笔记(35) 滑动窗口的卷积实现

深度学习笔记(35) 滑动窗口的卷积实现

  • 1. 卷积实现
  • 2. 减少计算成本


1. 卷积实现

为了构建滑动窗口的卷积应用,首先要知道如何把神经网络的全连接层转化成卷积层
深度学习笔记(35) 滑动窗口的卷积实现_第1张图片
假设对象检测算法输入一个14×14×3的图像,图像很小,不过演示起来方便
在这里过滤器大小为5×5,数量是16
14×14×3的图像在过滤器处理之后映射为10×10×16
然后通过参数为2×2的最大池化操作,图像减小到5×5×16
然后添加一个连接400个单元的全连接层,接着再添加一个全连接层
最后通过softmax单元输出y

为了跟下图区分开,做一点改动,用4个数字来表示y
它们分别对应softmax单元所输出的4个分类出现的概率
这4个分类可以是行人、汽车、摩托车和背景或其它对象
接下来就是把全连接层转化成卷积层
深度学习笔记(35) 滑动窗口的卷积实现_第2张图片

画一个这样的卷积网络,它的前几层和之前的一样,而对于下一层,也就是这个全连接层
可以用5×5的过滤器来实现,数量是400个(编号1所示)
输入图像大小为5×5×16
用5×5的过滤器对它进行卷积操作,过滤器实际上是5×5×16
因为在卷积过程中,过滤器会遍历这16个通道
所以这两处的通道数量必须保持一致,输出结果为1×1

假设应用400个这样的5×5×16过滤器,输出维度就是1×1×400
不再把它看作一个含有400个节点的集合,而是一个1×1×400的输出层

从数学角度看,它和全连接层是一样的
因为这400个节点中每个节点都有一个5×5×16维度的过滤器
所以每个值都是上一层这些5×5×16激活值经过某个任意线性函数的输出结果
再添加另外一个卷积层(编号2所示),这里用的是1×1卷积
假设有400个1×1的过滤器,在这400个过滤器的作用下,下一层的维度是1×1×400
它其实就是上个网络中的这一全连接层

最后经由1×1过滤器的处理,得到一个softmax激活值
通过卷积网络,最终得到这个1×1×4的输出层
以上就是用卷积层代替全连接层的过程
结果这几个单元集变成了1×1×400和1×1×4的维度


2. 减少计算成本

假设向滑动窗口卷积网络输入14×14×3的图片
为了简化演示和计算过程,这里依然用14×14的小图片
和前面一样,神经网络最后的输出层,即softmax单元的输出是1×1×4

在这里插入图片描述
严格来说,14×14×3应该是一个长方体,第二个10×10×16也是一个长方体
但为了方便,只画了正面
所以,对于1×1×400的这个输出层,只画了它1×1的那一面
所以这里显示的都是平面图,而不是3D图像

假设输入给卷积网络的图片大小是14×14×3,测试集图片是16×16×3
现在给这个输入图片加上黄色条块
深度学习笔记(35) 滑动窗口的卷积实现_第3张图片
在最初的滑动窗口算法中,会把这片蓝色区域输入卷积网络(红色笔标记)生成0或1分类
接着滑动窗口,步幅为2个像素,向右滑动2个像素
将这个绿框区域输入给卷积网络
运行整个卷积网络,得到另外一个标签0或1
深度学习笔记(35) 滑动窗口的卷积实现_第4张图片
继续将这个橘色区域输入给卷积网络,卷积后得到另一个标签
最后对右下方的紫色区域进行最后一次卷积操作
在这个16×16×3的小图像上滑动窗口,卷积网络运行了4次,于是输出了了4个标签
结果发现,这4次卷积操作中很多计算都是重复的

卷积操作的原理是不需要把输入图像分割成四个子集,分别执行前向传播
而是把它们作为一张图片输入给卷积网络进行计算
其中的公共区域可以共享很多计算,就像这里4个14×14的方块一样

假如对一个28×28×3的图片应用滑动窗口操作
滑动窗口的实现过程,在图片上剪切出一块区域,假设它的大小是14×14,把它输入到卷积网络
继续输入下一块区域,大小同样是14×14,重复操作,直到某个区域识别到汽车
在这里插入图片描述
因为部分卷积操作相同,直接之前的结果,提高了整个算法的效率
不过这种算法仍然存在一个缺点,就是边界框的位置可能不够准确


参考:

《神经网络和深度学习》视频课程


相关推荐:

深度学习笔记(34) 目标检测
深度学习笔记(33) 特征点检测
深度学习笔记(32) 目标定位
深度学习笔记(31) 迁移与增强
深度学习笔记(30) Inception网络


谢谢!

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