Coursera 笔记

Module 03 · Object Detection

Convolutional Implementation of Sliding Windows滑动窗口的卷积实现

Coursera ↗

在上一期视频中,我们学习了使用卷积神经网络(ConvNet)的滑动窗口目标检测算法,但我们发现这种方法执行较慢。本视频将向大家介绍如何实现一个更高效的卷积式滑动窗口目标检测算法。🤖


实现卷积式滑动窗口目标检测

首先,让我们看看如何将神经网络中的全连接层转化为卷积层。通过这种方法,我们可以为滑动窗口目标检测算法提供更高效的卷积实现。


1从全连接层到卷积层

假设我们的目标检测算法输入的是 14×14×3 大小的图像,虽然这个尺寸很小,但它主要用于简化说明。接下来,我们使用 5×5 的卷积核(滤波器),并且使用 16 个滤波器,将输入的图像从 14×14×3 转换为 10×10×16 的卷积输出。接着,我们使用 2×2 的最大池化(MaxPooling),将其输出转换为 5×5×16。最后,我们接一个全连接层,将其映射到 400 个神经元。

然后,我们将最后的输出通过 softmax 单元生成最终的预测类别(分类结果)。为简化说明,我们把输出的四个类别作为 Y,并对应到如下的四个类别:

  • Pedestrian(行人)
  • Car(汽车)
  • Motorcycle(摩托车)
  • Background(背景)

在全连接层中,我们假设网络会将 5×5×16 图像卷积后,得到 1×1×400 的输出。接下来,我们将这一层转换为卷积层。


2将全连接层转换为卷积层

我们可以通过使用 5×5 的卷积核来实现这个转换。如果我们有 400 个 5×5×16 的卷积核,并将其应用到 5×5×16 的图像上,那么最终的输出将是 1×1×400,这相当于一个全连接层。在此情况下,每个 400 的输出值是之前图层的 5×5×16 激活值的任意线性组合。

接下来,我们将实现一个卷积层,使用 1×1 的卷积核,并应用 400 个这样的卷积核。通过这种方式,我们能够输出一个 1×1×400 的体积。最后,再通过一个 1×1 的卷积核,并结合 softmax 激活,最终得到 1×1×4 的输出。

这样就完成了将全连接层转换为卷积层的过程,使得网络的结构更加高效和简洁。


3卷积式滑动窗口目标检测实现

基于上述思路,接下来我们将介绍如何利用卷积实现滑动窗口目标检测。以下内容参考了 OverFeat 论文,由 Pierre Sermanet 等人撰写。

假设我们现在有一个 14×14×3 的输入图像,并且我们想通过滑动窗口算法进行目标检测。对于每个滑动窗口区域,我们需要将其输入到卷积神经网络中进行处理。传统的滑动窗口算法通常会对每个窗口单独进行卷积计算,效率较低。但通过卷积式滑动窗口方法,可以大大提高计算效率。


4卷积式滑动窗口的计算流程

传统方法

  • 在传统的滑动窗口算法中,我们会从 16×16×3 的测试图像中,逐步裁剪出 14×14 的区域,分别输入到神经网络中进行分类。每处理一个窗口,就需要执行一次卷积操作。这种方法的效率较低,且计算重复。

卷积式方法

  • 卷积式滑动窗口方法 通过一次完整的卷积操作,避免了重复计算。我们将图像的每一个小区域同时传递给网络,网络会一次性计算出所有位置的预测结果。

假设输入图像大小为 14×14×3,输出为 1×1×4,对应 4 个类别的概率值。在传统的滑动窗口方法中,每个 14×14 的区域都需要单独处理。但卷积式方法将这些区域的计算合并在一起,减少了计算的重复性。


5卷积式滑动窗口的计算步骤

  • 假设我们有一个 14×14×3 的输入图像,通过卷积操作和池化处理后,输出一个 12×12×16 的卷积结果。
  • 经过池化后,得到 6×6×16 的输出,再通过多个卷积层和池化层的处理,最终输出 2×2×4 的结果。

每个 2×2×4 的输出体积可以看作是整个图像在不同位置的预测结果。例如,左上角的 1×1×4 输出结果表示 14×14 区域的检测结果,右上角则表示另一个区域的结果。

这种方法相比传统方法,能够更加高效地处理整个图像的滑动窗口任务。


6提升效率的关键

  • 在卷积式滑动窗口方法中,共享计算 是关键。通过共享卷积层中的计算,我们能够避免重复计算,只需一次完整的卷积操作,就可以得到多个区域的检测结果。
  • 相比传统方法,这种方法大大减少了计算量,从而提高了目标检测的效率。

示例:28×28×3 图像的处理

假设我们现在要处理 28×28×3 的图像。如果按照滑动窗口算法,我们需要分别对每个 14×14 区域进行处理。但通过卷积式滑动窗口方法,我们只需一次卷积操作,就能同时获得多个窗口的检测结果。

通过 max pooling 处理后,得到 8×8×4 的输出结果。这个过程通过卷积实现了整个图像的滑动窗口检测,避免了传统方法的重复计算。


总结与优化

  • 传统方法:裁剪出图像中的每个滑动窗口并进行处理,每个窗口独立计算,计算量大且重复。
  • 卷积式方法:通过一次卷积操作处理整个图像,避免了重复计算,大大提高了效率。

尽管这种卷积式滑动窗口方法提高了计算效率,但仍然存在一个问题:边界框的定位精度不高。在下一期视频中,我们将讨论如何改进这一问题,提高目标检测的精度。


下一步:优化边界框定位

敬请期待下一期视频,我们将解决目前算法的不足,进一步提高边界框的精确度。