在目标检测中,基于滑动窗口的检测是一种常见的办法。
如下是该算法的主要思路:
首先该算法的实现需要预先训练卷积网络,将数据集(经过裁剪,使检测的物体尽量处于图像中心并占据图片较大位置)进行训练,然后通过固定大小的窗口以及固定步长扫描需要检测的图片,将图片中处于窗口中的图像送入训练好的卷积网络进行检测,判断有无物体输出,最终通过变换扫描窗口的大小,可以检测出有无物体以及物体的大致定位(该算法的定位不一定准确)
下面是卷积滑动窗口算法的实现过程,参考了吴恩达教程,如下图所示
1、全连接层转换为卷积层
如上图所示,输入图片大小为14×14×3,通过16通道的5×5的卷积核然后再通过2×2的最大池化,变为5×5×16大小,然后通过2个400节点的全连接层,最后通过softmax层输出y的4个分类各自的概率。
将上述的全连接层转化为卷积的办法则是用400个5×5×16大小的过滤器将图像大小转化为1×1×400,在数学上这和全连接层400个单元是等价的,同理后面用相同办法处理,实现了全连接层到卷积层的转化。
2、卷积的滑动窗口实现
我们假设实际图像为16×16,命令滑动窗口大小为14×14,步长为2,则测试图可以分为四个部分,如上图进行同样计算可以得到2×2×4的矩阵,如下图所示
其中2×2小矩阵的每个部分和大矩阵中窗口扫描的位置一一对应。
在卷积运算中,可以观察到很多运算都是重复运算,所以没有必要将每个被框中的图像一一检测,而是将整个大图像进行卷积网络运算。
如下图,整个图像被分为64块
将全连接层转化为卷积层的优点总结如下:
1、不用限制输入图像大小
2、前向传播效率更高,因为在卷积中很多计算是共享的