Mask-RCNN进行目标检测和实例分割
想做计算机视觉?深度学习是最近的发展方向。大规模数据集加上深度卷积神经网络(CNNs)的表征能力使得超精确和稳健的模型成为可能。现在只剩下一个挑战:如何设计你的模型。
由于计算机视觉领域广泛而复杂,因此解决方案并不总是很清晰。计算机视觉中的许多标准任务都需要特别考虑:分类,检测,分割,姿态估计,增强和恢复,动作识别。尽管用于每个任务的最先进的网络表现出共同的模式,但他们都需要自己独特的设计风格。
那么我们如何为所有这些不同的任务建立模型呢?
让我来告诉你如何用深度学习在计算机视觉中做所有事情!
分类
所有任务中最为人所知的!图像分类网络以固定尺寸的输入开始。输入图像可以具有任意数量的通道,但对于RGB图像通常为3。在设计网络时,分辨率在技术上可以是任何尺寸,只要它足够大以支持你将在整个网络中执行的下采样数量。例如,如果您在网络中进行4次下采样,那么您的输入尺寸需要至少为 4² = 16 x 16 像素。
当你进入网络更深层时,空间分辨率将会降低,就像我们尽力挤压所有信息并降低到一维向量表示。为了确保网络始终具有继承其提取的所有信息的能力,我们根据深度按比例增加特征图的数量以适应空间分辨率的降低。也就是说,我们在下采样过程中丢失了空间信息,为了适应损失,我们扩展了我们的特征图以增加我们的语义信息。
在你选择了一定数量的下采样后,特征图会被矢量化并送入一系列全连接层。最后一层的输出与数据集中的类一样多。
目标检测
目标检测器有两种形式:单阶段和两阶段。它们两者都以“锚框”开始;这些是默认的边界框。我们的检测器将预测这些方框与边界框真值之间的差异,而不是直接预测方框。
在两阶段检测器中,我们自然有两个网络:一个框提议网络和一个分类网络。框提议网络得到了边界框的坐标,它认为目标在这里的可能性很大;再次提醒,这些坐标都是相对于锚框的。然后,分类网络获取每个边界框并对其中的潜在物体进行分类。
在单阶段检测器中,提议和分类器网络被融合到一个单独的阶段中。网络直接预测边界框坐标和在该框内物体的类别。因为两个阶段融合在一起,所以单阶段检测器往往比两阶段更快。但是由于两个任务的分离,两阶段检测器具有更高的精度。
Faster-RCNN 两阶段目标检测架构
SSD 一阶段目标检测架构
分割
分割是计算机视觉中更独特的任务之一,因为网络需要学习低级和高级信息。低级信息通过像素精确地分割图像中的每个区域和物体,而高级信息用于直接对这些像素进行分类。这就需要将网络设计成结合低级信息和高级信息的结构,其中低级空间信息来自于前面层且是高分辨率的,高级语义信息来自于较深层且是低分辨率的。
正如我们在下面看到的,我们首先在标准分类网络上运行我们的图像。然后,我们从网络的每个阶段提取特征,从而使用从低到高的级别内的信息。每个级别的信息都是独立处理的,然后依次将它们组合在一起。在组合信息时,我们对特征图进行上采样以最终获得完整的图像分辨率。
GCN分割架构
姿态估计
姿态估计模型需要完成两个任务:(1)检测每个身体部位图像中的关键点(2)找出如何正确连接这些关键点的方式。这分为三个阶段:
1、使用标准分类网络从图像中提取特征
2、鉴于这些特点,训练一个子网络来预测一组2D热力图。每张热力图都与一个特定的关键点相关联,并且包含每个图像像素是否可能存在关键点的置信值。
3、再次给出分类网络的特征,我们训练一个子网络来预测一组2D向量场,其中每个向量场编码关键点之间的关联度。具有高度关联性的关键点就称其为连接的。
以这种方式训练模型与子网络将共同优化检测关键点并将它们连接在一起。
开放式姿态估计体系结构
增强和恢复
增强和恢复网络是它们自己的独特之处。因为我们真正关心的是高像素/空间精度,所以我们不会对这些进行任何降采样。降采样真的会杀死这些信息,因为它会减少我们空间精度的许多像素。相反,所有的处理都是在完整的图像分辨率下完成的。
我们首先将要增强/恢复的图像以全解析度传递到我们的网络,而不进行任何修正。网络仅仅由一堆卷积和激活函数组成。这些块通常是最初为图像分类而开发的那些块的灵感,有时是直接副本,例如残余块、密集块、挤压激励块等。由于我们希望直接预测图像像素,不需要任何的概率或分数,所以在最后一层上没有激活功能,甚至没有sigmoid或softmax。。
这就是所有这些类型的网络!在图像的全解析度下进行大量的处理,以获得高空间精度,这些使用已经证明与其他任务相同的卷积。
EDSR超分辨率架构
行为识别
动作识别是少数几个需要视频数据才能正常工作的应用之一。要对一个动作进行分类,我们需要知道随着时间的推移场景发生的变化;这导致我们需要视频。所以我们的网络必须训练以学习空间和时间信息。也就是空间和时间的变化。最适合的网络是3D-CNN。
3D- CNN,顾名思义,就是一个使用3D卷积的卷积网络!它们不同于常规CNN的地方在于其卷积应用于三维空间:宽度、高度和时间。因此,每个输出像素都是基于它周围的像素和相同位置上的前帧和后帧中的像素进行计算预测的!
直接进行图像的批量传递
视频帧可以通过以下几种方式传递:
(1)直接以大批量,如图1所示。由于我们正在传递一组序列帧,因此空间和时间信息都是可用的
单帧+光流(左)。视频+光流(右)
(2)我们还可以在一个流(数据的空间信息)中传递单个图像帧,并从视频(数据的时间信息)中传递其相应的光流表示。我们将使用常规的2D CNNs从两者中提取特征,然后将它们组合起来传递给我们的3D CNN,它将组合这两种类型的信息
(3)将我们的帧序列传递给一个3D CNN,将视频的光流表示传递给另一个3D CNN。这两个数据流都有可用的空间和时间信息。这可能是最慢的选项,但同时也可能是最准确的选项,因为我们正在对视频的两个不同表示进行特定的处理,这两个表示都包含所有信息。
所有这些网络都输出视频的动作分类。