利用深度学习玩转计算机视觉

想做计算机视觉?深度学习是最近的发展方向。大规模数据集加上深度卷积神经网络(CNN)的表征能力使得超精确和稳健的模型成为可能。只剩下一个挑战:如何设计模型。


由于计算机视觉领域广泛而复杂,因此解决方案并不总是很清晰。计算机视觉中的许多标准任务都需要特别考虑:分类,检测,分割,姿势估计,增强和恢复以及动作识别。尽管用于每个网络的最先进的网络都具有共同的模式,但它们仍然需要自己独特的设计。

那么我们如何为所有这些不同的任务建立模型呢?

让我告诉你如何在深度学习的计算机视觉中做所有事情!

分类

其中最为人所知!图像分类网络以固定大小的输入开始。输入图像可以具有任意数量的通道,但对于RGB图像通常为3。在设计网络时,分辨率在技术上可以是任何大小,只要它足够大以支持您将在整个网络中执行的下采样量。例如,如果您在网络中进行4次下采样,那么您的输入需要至少为4²​​= 16 x 16像素。

当您深入网络时,空间分辨率将随着我们尝试挤压所有信息并降低到一维向量表示而降低。为了确保网络始终具有继承其提取的所有信息的能力,我们按比例增加特征地图的数量以适应空间分辨率的降低。即我们在下采样过程中丢失空间信息,为了适应损失,我们扩展了我们的特征图以增加我们的语义信息。

在您选择了一定数量的下采样后,功能图会被矢量化并送入一系列完全连接的图层。最后一层的输出与数据集中的类一样多。


物体检测

物体探测器有两种形式:一级和两级。他们两人都以"锚箱"开始; 这些是默认的边界框。我们的探测器将预测这些方框与地面实况之间的差异,而不是直接预测方框。

在两级探测器中,我们自然有两个网络:框建议网络和分类网络。框建议网络提出了边界框的坐标,它认为对象存在的可能性很大; 再次这些是相对于锚箱。然后,分类网络获取每个边界框并对其中的潜在对象进行分类。

在一级探测器中,提议和分类器网络被融合到一个单一阶段中。网络直接预测边界框坐标和驻留在该框内的类。因为两个阶段融合在一起,所以一阶段探测器往往比两阶段更快。但是由于两个任务的分离,两级探测器具有更高的精度。

Faster-RCNN两阶段物体检测架构


SSD一阶段对象检测架构

分割

分割是计算机视觉中更独特的任务之一,因为网络需要学习低级和高级信息。通过像素精确地分割图像中的每个区域和对象的低级信息,以及用于直接对这些像素进行分类的高级信息。这导致网络被设计为将来自较早层和高分辨率(低级空间信息)的信息与较深层和低分辨率(高级语义信息)组合。

正如我们在下面看到的,我们首先通过标准分类网络运行我们的图像。然后,我们从网络的每个阶段提取特征,从而使用从低到高的范围内的信息。每个信息级别都是独立处理的,然后依次将它们组合在一起。在组合信息时,我们对特征图进行上采样以最终获得完整的图像分辨率。

GCN分段架构

姿势估计

姿态估计模型需要完成2个任务:
(1)检测图像中每个身体部位的关键点
(2)找出如何正确连接这些关键点。

这分三个阶段完成:

① 使用标准分类网络从图像中提取特征

② 鉴于这些特征,训练子网络以预测一组2D热图。每个热图与特定关键点相关联,并且包含关于关键点是否可能存在于每个图像像素的置信度值

③ 再次给出来自分类网络的特征,我们训练子网络以预测一组2D矢量场,其中每个矢量场编码关键点之间的关联度。然后认为具有高关联的关键点是连通的。

以这种方式利用子网络训练模型将共同优化检测关键点并将它们连接在一起。

OpenPose姿势估计架构

增强和恢复

增强和恢复网络是他们自己独特的野兽。我们不对这些进行任何下采样,因为我们真正关心的是高像素/空间精度。下采样会真正消除这些信息,因为它会减少我们的空间精度像素数。相反,所有处理都以完整的图像分辨率完成。

我们首先将我们想要增强/恢复的图像传递给我们的网络,无需任何修改,全分辨率。网络简单地由许多卷积和激活函数组成。这些块通常是灵感的,偶尔会直接复制最初为图像分类而开发的那些块,例如残留块,密集块,挤压激励块等。最后一层没有激活功能,甚至没有sigmoid或softmax,因为我们想要直接预测图像像素,不需要任何概率或分数。

这就是这些类型的网络的全部内容!在图像的全分辨率下进行大量处理,以实现高空间精度,使用已证明可与其他任务一起使用的相同卷积。

EDSR超分辨率架构

动作识别

动作识别是少数几个特别要求视频数据运行良好的应用程序之一。为了对行动进行分类,我们需要了解随着时间推移而发生的场景变化; 这自然会导致我们需要视频。我们的网络必须经过训练,以学习空间和时间信息,即空间和时间的变化。完美的网络是3D-CNN。

当然,3D-CNN是一个使用3D卷积的卷积网!它们与常规CNN的区别在于,卷积以三维方式应用:宽度,高度和时间。因此,每个输出像素是根据基于其周围的像素和相同位置中的先前帧和后续帧中的像素的计算来预测的!

直接传递大批量图像

视频帧可以通过多种方式传递:

(1)直接在大批量中,如第一图中所示。由于我们传递的是一系列帧,因此可以获得空间和时间信息

单帧+光流(左)视频+光流(右)

(2)我们还可以在一个流中传递单个图像帧(数据的空间信息)及其对应的光流表示来自视频(数据的时间信息)。我们将使用常规2D CNN提取特征,然后将它们组合起来传递给我们的3D CNN,它结合了两种类型的信息

(3)将我们的帧序列传递给一个3D CNN,并将视频的光流表示传递给另一个3D CNN。两个数据流都具有可用的空间和时间信息。这是最慢的选择,但也可能是最准确的选择,因为我们正在对包含我们所有信息的两个不同的视频表示进行特定处理。

所有这些网络都输出视频的动作分类。

本文转自:今日头条 - AI火箭营,转载此文目的在于传递更多信息,版权归原作者所有。

推荐阅读