为了产生运动,我们对背景和椅子随机抽取二维仿射参数。这些椅子的转换是相对于背景变换的,它可以被解释为摄像机和物体移动。利用变换参数,生成第二幅图像, ground truth光流和遮挡区域。
对每个图像对,所有参数(数量、类型、大小和椅子的初始位置;转换参数)都是随机抽样的。我们调整这些参数的随机分布,使产生的位移直方图类似于Sintel(细节可以在补充材料中找到)。使用这个过程,我们生成一个数据集,其中包含22,872个图像对和流场(我们多次重用每个背景图像)。请注意,这个大小是任意选择的,原则上可以更大。
由于我们不仅要增加图像的多样性,而且要增加流场的多样性,我们对一对图像应用相同的强几何变换,但在这两个图像之间的相对变换也更小。
具体地说,我们从图片宽度x和y[-20%,20%]范围内采样变换;旋转 [−17 ◦ , 17 ◦ ];缩放从[0.9,2.0]。高斯噪声的抽样分布是0 0.04;对比度是在 [−0.8, 0.4];每张图片RGB通道颜色从 [0.5, 2];gamma值[0.7, 1.5],更新的亮度变换使用sigma 为0.2的高斯。
5. 实验 我们报告了我们的网络在Sintel、KITTI和Middlebury数据集的结果,以及我们的合成Flying Chairs数据集。我们还试验了在Sintel数据上对网络微调,以及对预测流场的变分改进。此外,与其他方法相比,我们报告了我们网络的运行时间。
5.1. 网络和训练细节 我们所训练的网络的确切架构如图2所示。总的来说,我们试图保持不同网络的架构是一致的:它们有9个卷积层,其中6个步长是2(最简单的池形式),每一层斗都有都有一个非线性的ReLU。我们没有任何全连接层,这使得网络可以将任意大小的图像作为输入。在更深的网络层方向卷积滤波器的大小会减少:第一层的7x7,下面两层的5x5,从第4层开始的3x3。在更深层的层中,特征图的数量增加,每一个步长为2的层都增加了2倍。对于FlowNetC中的相关层,我们选择了参数k=0,d=20,s_1=1,s_2=2。作为训练损失,我们使用了endpoint error (EPE),这是光流估计的标准误差测量方法。它是预测的光流向量和ground truth之间的欧氏距离,在所有像素上平均超。
为了训练CNNs,我们使用了一个修改版的caffe[20]框架。我们选择Adam [22]作为优化方法,因为对于我们的任务,它显示的收敛速度快于标准的带有动量的随机梯度下降。如[22]推荐的那样,我们固定Adam的参数: β_1 = 0.9 and β_2 = 0.999。因为,从某种意义上说,每个像素都是一个训练样本,我们使用相当小的小批量的8个图像对。我们从学习速率从 λ = 1e−4开始,然后在第一个300 k之后,每100 k次迭代除以2。使用FlowNetCorr,我们可以观察到λ = 1e−4梯度爆炸。为了解决这个问题,我们从一个非常低的学习率 λ = 1e−6开始,在10 k次迭代之后慢慢地将它增加到 λ = 1e−4,然后按照刚才描述的时间表进行。
为了在训练和微调过程中监测过度拟合,我们将 Flying Chairs的数据集分成了22,232个训练和640个测试样本,并将Sintel训练集分成908个训练和133个验证对。
我们发现在测试过程中增加输入图像可以提高性能。尽管最优的规模取决于具体的数据集,但是我们为每个网络所有任务固定了的规模。对于FlowNetS来说,我们并不上采样,对于FlowNetC我们选择了1.25的因数。
微调。所使用的数据集在对象类型和它们所包含的运动方面是非常不同的。标准的解决方案是在目标数据集上对网络进行微调。KITTI数据集很小,只有稀疏的流场ground truth。因此,我们选择在Sintel训练集上进行微调,我们使用来自Sintel的干净和最终版本的图像,并在使用低学习率λ = 1e−6迭代几千次进行微调。为了获得最佳性能,在定义了使用验证集的最佳迭代次数之后,我们将对整个训练进行微调,以获得相同数量的迭代。在表格中,我们表示带有“+ft”后缀的finetuned网络。
5.2. 结果