场景旋转算法

人工智能 深度学习 计算机视觉
2021-11-03 02:50:53

我的目标是拍摄一张图像并返回另一张看起来好像从另一个角度观看场景的图像。角度的差异可能很小——假设拿着相机的手稍微向侧面移动。

2个回答

— 立体合成 —

生成可能会出现在头部右眼中的图像(您已经从左眼获得图像(反之亦然))过于复杂,无法期望简单的卷积(线性矩阵变换)获得合理的结果。

你是正确的,旋转不是正确的描述,仅仅是因为它是模棱两可的。什么是旋转?最好的描述是从单眼/相机合成立体图像。

尽管深度学习是一种很好的方法,但它是一个非常笼统的术语,许多概念、书籍、研究项目和软件组件都适用。我同意其他答案,这些答案表明,在反复尝试寻找可行的解决方案时,很容易找到错过的目标。在黑暗中拍摄可能会浪费时间和精力。

例如,自动编码器可能无法很好地工作,因为如果没有可以完成自动特征提取的相似场景的大量立体图像对,深度建模可能不是提取的特征。

如果可以进行特征提取,则需要去除的不是噪声,而是需要表征像素化和光学失真,以便位置偏移所揭示的表面随后可以充满相同的轮廓、焦点模糊、反射特性,并且当生成与新显示的表面相对应的像素时,边缘延续作为相同对象的相邻表面。

为了获得最大的图像真实性,要对生成的像素进行分析和注入的另一个噪声配置文件是捕获设备噪声配置文件。

— 正式的问题重述 —

为了缩小机器学习方法的范围,以便我们可以在光线下拍摄,让我们考虑一个暴露在光源下的三维场景模型,其中两个摄像头彼此相邻。让我们更正式地考虑生成相当可靠和准确的第二张图像所需的输入、输出和内部架构。

我们有图像像素矩阵 I1,它表示到达相机 c1 的光,该相机 c1 包含 xz 平面中的矩形图像捕获表面,有效焦距为 l1 和孔径 a1 的镜头在从 s1 开始到结束于的时间窗口内聚焦在场景 S 上e1。某个点位于笛卡尔坐标轴的原点,相机 c1 和另一个相机 c2 都指向,使得原点位于图像捕捉和镜头焦点的中心。c1 和 c2 的三维坐标是已知的。

您希望预测到达相机 c2 的第二张图像 I2。

为简单起见,我们假设 l1 = l2,a1 = a2,并且场景是静止的,因此时间在模型中并不重要。我们还假设相机 c1 和 c2 的 y 坐标和图像捕获持续时间(e 减去 s)相同。

— 解决方案架构 —

对于这个简化的情况,假设对象空间不是一个只包含一个对象的深渊,解决方案的流程架构如下。每个 --> 符号都是一个子进程。c1 和 c2 之间的水平和垂直位置差是 { x, z }。

{ I1, l, a, y, x, z }
--> { I1, l, a, y, { S1 ... Sn }}
--> { I1, l, a, y, { S1 ... Sn }, { E1 ... En }}
--> { I2 }

第一个子过程是特征提取,其中特征是在二维图像 I1 中可见的三维表面。这是一个有问题的提取,因为场景中没有可用的 y 信息,并且问题陈述中没有提到 y 标记的训练数据。

第二个子过程是提取特征的扩展,为 I2 提供所需的表面表示。

最后一个过程是渲染 I2,可能使用 I1 中的变形像素并使用 E1 到 En 填充剩余的透明部分,并了解轮廓、反射特性、边缘延续和从特征提取中捕获设备噪声轮廓。

— 学习场景的实用性 —

任何深度学习架构的有效性都可以从上述对视觉的理解和对基于 DNA 的生活场景的理解中受益。自动特征提取的问题很复杂,因为如前所述,数据没有用 y 信息标记。

运动的发生以及与物理对象和液体粘度的相互作用为输入数据提供了更多的维度,这有助于通过基于 DNA 的生命学习对任意场景的视觉理解。

如果你在这里尝试使用深度学习,你应该记住,深度学习背后的真正意图是学习概率分布,这意味着如果你要使用深度学习模型来“旋转”图像,你只能在特定类别的图像(例如面孔、猫等)上执行此操作。

如果这是你的目标,生成模型就是你要走的路:

自动编码器

您可以训练自动编码器来稍微改变角度。自动编码器是一种特殊类型的神经网络,经过训练可以输出与您输入它们的输入相同的输入,但会施加一些限制,以防止它学习微不足道的恒等函数。在您的情况下,您可以使用去噪自动编码器的变体。顾名思义,去噪自动编码器生成相同的输入图像减去人工随机噪声。实现这一点的方法是提供图像的损坏版本,然后评估未损坏版本的损失。

这如何适应您的情况?

在您的情况下,您可以将原始图像输入您的自动编码器并根据旋转后的图像对其进行评估。这将导致您的自动编码器有效地学习生成图像的内部分布,以便生成它的稍微“旋转”的版本。有关去噪自动编码器的更多信息,请参阅原始论文

生成对抗网络

对于更复杂的方法,您可以使用生成对抗网络。GAN 相对难以操作,但在图像方面通常比其他生成模型表现更好。

这如何适应您的情况?

一般来说,GANs 从噪声中生成图像。但是,在您的情况下,您可以使用原始(未旋转)图像作为生成器的输入。例如,生成器可以是卷积自动编码器。而“真实图像”数据集将是您的旋转图像。这样,您的模型将学习通过在传统 GAN 中输入等效噪声来生成稍微旋转的图像,在您的情况下,这将是原始图像。有关 GAN 的更多信息,我建议使用这篇文章和原始论文
我应该指出,GAN 的缺陷之一是扭曲的视角,所以它可能是在黑暗中拍摄的;但是,我认为这不会成为问题,因为您将使用真实图像作为输入而不是完全噪声。

相关工作

现在,就文献而言,我认为这在以前没有做过,除了这个(有点)用于人脸表示学习。这与您的方法相似的唯一方法是您可以修改实现以仅生成从不同角度输入的面部,而不是它所学到的所有内容的平均值。