使用金字塔卷积 LSTM 进行光流估计的无监督学习
论文原文请看这里
摘要
当前大多数基于卷积神经网络 (CNN) 的光流估计方法都侧重于在具有真实值的合成数据集上学习光流,这是不切实际的。 在本文中,我们提出了一种名为 PCLNet 的无监督光流估计框架。 它使用具有相邻帧重建约束的 pyramid Convolution LSTM (ConvLSTM),可以灵活地估计来自任何视频剪辑的多帧光流。 此外,通过将运动特征学习和光流表示解耦,我们的方法避免了现有框架中使用的复杂快捷连接,同时提高了光流估计的准确性。 此外,与使用专门的 CNN 架构捕捉运动的方法不同,我们的框架直接从通用 CNN 的特征中学习光流,因此可以轻松嵌入任何基于 CNN 的框架中以执行其他任务。 大量实验证明,我们的方法不仅可以有效准确地估计光流,而且在动作识别方面也获得了可比的性能。
1. 引言
作为视频分析中的一个关键问题,光流估计被广泛应用于视觉SLAM、自动驾驶、动作识别等领域。传统的光流估计方法(例如TVL-1 [1]) 将估计问题视为能量函数最小化问题,对像素级信息(如亮度和空间平滑度)做出强有力的假设 [2]。 这些方法耗时大且难以用于大规模视频数据。
随着 CNN 在图像理解方面的显着成功,最近提出的基于深度学习的方法如 FlowNet [3]、FlowNet2.0 [4]、PWC-Net [5]、 等。这些方法是端到端的可训练的,同时比传统方法具有更好的准确性和更低的时间消耗。 然而,这些基于 CNN 的方法中的大多数在学习过程中都需要真实光流进行监督,这在许多实际应用中几乎不可用,例如网站视频的动作识别、监控视频的行人跟踪等。
此外, 这些方法通常采用“粗到细”的方式通过利用高级语义层之间的辅助快捷连接来预测光流。 这带来了以下缺点:一是增加了短连接处理的复杂性; 其次,通过这种结合运动特征学习和光流表示的耦合架构,这些框架很难扩展到其他任务。 此外,这些方法倾向于定制用于光流估计的架构,因此通常需要在一些合成数据集上从头开始训练,这导致与当前成熟的 CNN 主干(例如 VGG、ResNet 等)的兼容性较低。
我们从三个方面解决了这项工作中的上述问题:首先,为了对真实世界视频进行无监督学习,我们将光流估计制定为使用相邻帧的重建问题,并采用重建损失 [6] 指导我们的网络训练。 其次,我们的框架首先应用空间金字塔池化将多尺度运动信息聚合成低维运动特征,然后直接从这些特征解码光流,从而将运动捕获和光流表示解耦。 因此,它在提高估计精度的同时避免了复杂的连接。 最后,我们的方法在通用 CNN 上构建光流学习,因此可以灵活地嵌入到其他基于 CNN 的架构中以执行其他任务,同时,通过 ImageNet 预训练显着减少网络训练时间。 与其他无监督学习方法 [6, 7] 不同,我们的方法使用 ConvLSTM 而不仅仅是 CNN 来执行光流学习。 因此,它能够同时处理视频序列上的多帧。
总之,我们工作的贡献有三方面:首先,我们提出了一种无监督的方法,可以在没有ground truth的视频上同时学习多帧光流。 其次,我们的方法将运动学习和光流表示解耦。 这样,在提高估计精度的同时,避免了高级语义层之间复杂的快捷连接的时间消耗。 最后,我们的模型与通用 CNN 兼容,因此可以嵌入到基于 CNN 的通用框架中。
2 相关工作
传统的流量估计方法主要基于变分方法。 最具代表性的是Horn和Schunck[2]提出的方法。 它通过使用一些光度学假设(例如亮度一致性和空间平滑度)最小化能量函数来估计光流。 然而,这些假设在某些现实情况下是站不住脚的。 其他方法通过选择近似但更宽松的约束来进行改进,例如 [8]。 然而,由于这些假设的手工设计,这些方法容易受到限制。
FlowNet [3] 通过使用简单的 U-Net [9] 架构以细化的方式逐层学习光流,迈出了首先处理这个问题的重要的一步。 之后,提出了许多其他基于 CNN 的光流估计方法。 其中,FlowNet2.0通过将FlowNet中的几个子模型(FlowNetS和FlowNetC)堆叠成一个大模型来推动这个任务,并且在估计上获得了很大的改进。 SpyNet [10] 仅计算每一层的光流残差,因此比以前的方法获得更小的模型尺寸和更快的推理速度。 PWC-Net [5] 构建光流遵循三个原则:金字塔处理、变形和成本量。 通过在每个 CNN 层应用这些原则,PWC-Net 取得了比以前参数更少更好的结果。 为了捕获运动信息,这些方法通常使用名为“相关性”的特殊 CNN 层计算不同特征级别的成本量,该层将第二个特征的补丁作为卷积核对第一个特征进行卷积。 可以将其视为一种匹配方案,用于查找两个特征表示之间具有空间相似性的区域。
通常,这些基于 CNN 的光流估计方法主要侧重于在具有真实值的视频上学习光流,并使用复杂的捷径连接进行细化。 相比之下,我们的方法探索在没有真实数据的情况下学习真实世界视频的光流。 此外,通过应用 ConvLSTM 来捕获多尺度运动信息并在光流估计之前聚合运动信息,我们的框架能够在没有这些复杂连接的情况下学习多帧光流。 此外,与使用“相关”层捕获两帧之间运动的方法不同,我们使用 ConvLSTM 隐式学习运动动力学并将其解码为光流。由于与通用 CNN 的兼容性,我们的框架可以灵活地嵌入到其他基于 CNN 的网络中。
3.方法
我们的框架主要由三个模块组成:用于外观特征提取的通用CNN,学习多尺度运动表示的运动集中模块和从运动特征估计光流的光流重建模块 (见图1)。 我们使用通用 ResNet18 [11] 作为我们的特征提取网络,并将其 4 个块的输出用于以下处理。 在本节的其余部分,我们将介绍其他两个模块的详细信息:运动集中模块和光流重建模块。
图 1:我们提出的框架,主要包括三个模块。 特征提取头(上):通用 CNN; 运动集中模块(中):通过金字塔 ConvLSTMs 学习运动特征,然后将隐藏状态编码为低维运动特征。 光流重建模块(底部):根据学习到的运动特征重建光流。 请注意,这里的“W”表示“逆扭曲”操作。 “OFE Block”的意思是“Optical Flow Estimation Block”(右下),其中橙色虚线边框的立方体只存在于PCLNetC(4.3节)中,在PCLNet中被移除。
3.1. 运动集中模块
为了完整起见,我们首先简要介绍我们用于在 CNN 特征金字塔上捕获运动动态的 ConvLSTM。 与原始 LSTM 一样,ConvLSTM 使用四个“门”来控制数据流动和自更新,包括输入门 it、遗忘门 ft、单元门 ct 和输出门 ot。 它以二维特征图作为输入,并在它们之间进行卷积运算。 整体操作可以表述为:
其中*表示卷积运算,◦表示Hadamard积,σ表示sigmoid运算。
我们将 ConvLSTM 层应用于特征提取 CNN 的每个输出层。 假设每个输入剪辑的长度是 l。 那么每个ConvLSTM层的输出隐藏状态的形状为l×ci×hi×wi,其中ci、hi、wi分别为对应第i层的输出通道、高度和宽度。 我们将后面的 l -1 个隐藏状态作为这些 l 帧中学习到的运动表达。 之后,我们使用几个卷积层来细化学习到的隐藏特征并将它们传递给下一层。 最后,为了捕捉不同尺度的运动信息,我们将空间金字塔池化 [12] 应用于所有层的输出,以生成固定长度的低维运动特征。
3.2. 光流重建模块
为了约束模型学习运动动力学,我们从学习到的运动特征重建每个输入剪辑的相邻帧之间的光流。 由于在大多数情况下,ground truth 光流不可用于现实任务,受 [6, 7] 的启发,我们将光流估计问题表述为图像重建问题。
设 I = {I1, I2} 为相邻两帧作为输入,则 I1 到 I2 的变换可表示为 I2 = W(I1, F),其中 F 为 I1 到 I2 的光流,W 表示 根据流 F 将 I1 的每个点映射到 I2 的扭曲操作。相反,给定估计的流 Fˆ,我们可以使用逆扭曲操作 W−1 [13] 将 I1 重构为 Iˆ1 = W−1(I2, Fˆ) . 为了获得估计的光流 Fˆ,我们最小化 Iˆ1 和 I1 之间的相似性误差,可以表示为
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rKMUdfwy-1639452051050)(C:\Users\Zhangyu\AppData\Roaming\Typora\typora-user-images\image-20211208172459598.png)]
其中 Lsim 是相似度损失函数。 在这里,我们使用如下三种相似度损失函数。
像素相似性损失。
它使用广义 Charbonnier 惩罚函数直接计算两帧之间的逐像素误差,以减轻异常值的影响:
其中 α 是 Charbonnier 惩罚因子。
修正的峰值信噪比 (PSNR Peak Signal-to-Noise Ratio) 损失。
PSNR 测量两个图像之间的峰值误差。 它是一种常见的基于像素差异的图片退化度量。 在这里,我们将原始 PSNR 修改为大于 0 :
其中 MSE 表示均方误差度量。
平均结构相似性 (MSSIM Mean Structural Similarity) 损失。
结构相似性 (SSIM) [14] 将图像退化视为三个方面的感知变化:亮度、对比度和结构信息。 它基于空间中较近的区域具有更强的相互依赖性并提供图像外观的结构信息的假设。 通过首先将参考图像和目标图像分成小窗口,然后计算所有窗口的平均 SSIM (MSSIM) 误差来计算整体相似度误差:
其中 SSIM(.) 是标准的结构相似性函数,M 表示我们分割的窗口数。
最后,我们将这三个相似性损失函数的加权和作为最终的重建损失:
这里β1、β2和β3分别是这三个相似度损失的平衡权重。
为了以更高分辨率重建光流,我们通过从下到上堆叠五个光流估计 (OFE) 块(图 1 中的右下角)来放大预测的流。 这里,OFE 块中的“流量预测”是一个简单的卷积层,它在不改变高度和宽度的情况下将特征通道缩小到 2。 我们计算每一层的重建损失,并累加到最终的无监督重建损失。 此外,为了捕捉空间上下文以获得更精细的流表示,我们在顶部应用了一个由 7 个扩张卷积层组成的“上下文块”,如 [5] 中所述。 请注意,我们仅从低维运动特征细化光流,而没有利用来自高级特征的辅助快捷连接。
4. 实验
4.1. 数据集
没有真实数据的数据集。
我们在两个真实世界的动作识别数据集上研究了光流估计的性能:UCF101 [15] 和 HMDB51 [16]。 UCF101 包含 101 个动作类别和 13,320 个视频。 HMDB51 包含来自 51 个动作类的 6766 个视频剪辑。
具有真实性的数据集。
我们在两个合成光流数据集上进行实验:FlyingChairs [3] 和 MPI Sintel [17]。 FlyingChairs 由 22,872 个帧对组成,分为 22,232 个训练示例和 640 个测试示例。 MPI-Sintel 由 1628 帧组成,具有更高分辨率和多种运动模式。 分为训练集和测试集。 两者都分为三个“pass”:Albedo、Clean和Final。 为了监督我们的训练,我们进一步将训练集拆分为训练片段和验证片段,如 [10]。
4.2. 训练细节
我们首先在 FlyingChairs 和 MPI-Sintel 数据集上预训练我们的网络。 具体来说,我们使用从 ImageNet 预训练的权重初始化特征提取网络(我们实验中的 ResNet18)。 在这个阶段,我们使用平均终点误差(EPE)作为训练损失。 在这里,我们使用单个 GPU 并将批大小设置为 32 进行训练。 我们以 1e-4 的初始学习率开始训练,然后在步骤 60K、80K、100K 和 120K 将学习衰减 0.5。 对于数据增强,我们在光流估计任务中应用随机裁剪、随机缩放、水平翻转和垂直翻转( random crop, random scale, horizontal flipping and vertical flipping)。 请注意,我们对每个输入剪辑执行联合增强以保持光流连贯。
接下来,我们在没有ground truth光流监督的 HMDB51 和 UCF101 数据集上训练我们的模型。 我们也像在预训练阶段一样应用数据增强。 我们将每个视频分成多个剪辑。 每个输入剪辑的大小设置为 6×224×224。 请注意,在此阶段,我们仅使用重建损失进行训练,并将 α 设置为 0.4(方程 3)、M = 7(方程 5)和 β1 = 1.0、β2 = 0.2、β3 = 0.5(方程 6) 基于验证。 在这里,我们将批量大小设置为 48,并以 1e-3 的学习率开始训练,然后在训练损失平稳时将学习衰减 0.1。 以上所有实验均在 NVIDIA Titan V GPU 上进行。
4.3. 消融研究
为了调查对我们“解耦”设计的影响并与使用快捷连接的方法进行比较,我们设计了另一个 U-net,像 PCLNet,如图 2 所示。我们在下一节中的将此网络表示为“PCLNetC”。 在这个模型中,我们在运动集中模块的每一层和光流重建模块的相应层之间添加了一对连接。 该模型的其余部分与 PCLNet 中的相同。
图 2:PCLNetC 中“耦合连接”的图示(从上到下用橙色箭头表示)。 请注意,除了耦合连接外,其他与 PCLNet 中的完全相同(见图 1)。
我们在 MPI-Sintel 数据集的训练集上评估这两种模型。 结果如表 1 所示。令人惊讶的是,即使使用更轻的框架,没有“耦合连接”的 PCLNet 也比耦合的实现了更好的结果。 我们对空间金字塔池化的使用进行了改进:通过在解码为光流之前将多尺度信息集成到低维特征中,它在不使用来自高级语义层的辅助信息(auxiliary information )的情况下获得了更好的性能。 此外,这种解耦设计在一定程度上减少了时间消耗。
表 1:MPI-Sintel 数据集(训练集)上 PCLNetC 和 PCLNet 之间的 EPE(端点误差)和运行时的比较。
4.4. 比较结果
显然,我们的框架可以通过简单地将重建损失(方程 6)替换为 EPE 损失来扩展为完全监督学习。 为了进行比较,我们首先进行了一个实验,对 MPI-Sintel 数据集进行光流估计,仅具有 EPE 损失。 结果如表 2 所示。如表所示,我们的方法在准确性和效率方面都比传统 TVL-1 实现了更好的性能。 对于基于 CNN 的光流估计方法,尽管我们的模型精度略差,但与其他方法相比,它实现了最佳的运行时间。 它表明,尽管我们从低维运动特征中估计光流,没有使用高级短程连接,但我们的方法仍然在准确性和效率之间取得了良好的平衡。 PCLNet 和 PCLNetC 上估计光流的可视化结果如图 4 所示。我们可以看到,这两种模型都能够估计清晰的光流,而 PCLNet 在捕获细节方面稍好一些 .
表 2:在 MPI-Sintel 数据集上评估的不同光流估计方法的 EPE 和时间消耗。 这里,“ft”表示该方法已经在训练分割上进行了微调。
图 4:MPI-Sintel 数据集上光流估计的视觉结果。 前两行:在 Clean pass 上评估的结果。 底部两行:final pass的结果。 “-ft”表示模型已经在数据集上进行了微调。
至于没有ground truth的视频无监督学习,我们使用PCLNet在HMDB51和UCF101上评估我们的方法。 估计的光流如图 3 所示。如图所示,我们的框架能够仅使用重建约束来估计清晰的光流。 为了定量验证我们在真实世界视频上的光流估计方法,我们进一步在这些数据集上进行了动作识别任务的实验,并与其他光流估计方法(包括 TVL-1 [1]、DIS-Fast [18]、Deepflow [19]、FlowNet [3] 和 FlowNet2.0 [4])进行了比较 。 具体来说,我们首先在这两个数据集上预先计算光流,然后我们将它们作为输入并使用 ResNet50 网络进行动作识别(action recognition)。 结果如表 3 所示。虽然我们的结果比 TV-L1 的结果稍差,但我们享有比其他专用运动描述符更高的准确度。
图 3:在 HMDB 和 UCF101 数据集上从 PCLNet 重构光流的可视化。 前两行是帧叠加和相应的估计流量。 底部两行分别是来自 UCF101 的示例。
表 3:不同运动描述符在 HMDB51(split 1) 和 UCF101 (split 1) 数据集上的分类精度比较。
5. 结论
在本文中,我们提出了一种用于光流估计的新型端到端可训练框架。 通过利用重建约束作为监督,我们的框架能够在没有ground truth的情况下有效地学习真实世界视频的光流。 此外,我们通过在多尺度上应用 ConvLSTM 来捕获运动动力学,然后将学习到的运动特征解码为光流,从而将学习的运动特征和光流重建解耦。 通过这种方式,我们的方法无需复杂的捷径连接即可同时估计多帧光流。 此外,该框架与通用 CNN 兼容,因此可以轻松嵌入基于 CNN 的网络中,用于其他视频分析任务。 实验证实,我们的方法在合成视频数据和现实世界视频数据的光流估计方面取得了有前景的结果。