使用极坐标图像作为 CNN 的输入是否合适?还是必须先进行笛卡尔变换?

数据挖掘 机器学习 喀拉斯 张量流 美国有线电视新闻网
2021-09-26 03:11:53

我已经建立了一个卷积神经网络,它对最初在极地空间中表示的数据进行训练(测量值是角度和距离的函数)。我的管道首先将坐标转换为笛卡尔网格并重新投影图像。然而,这会导致数据维度(即输入图像的像素大小)显着增加,并且需要我希望避免的插值步骤。

是否有合适的方法(在 keras/tensorflow 中实现)可用于对原始极坐标数据执行(2D)卷积?我已经学习了 cs231n 课程,所以我有一些背景,但还不是专家,尤其是在理论方面。谢谢!

2个回答

在基本层面上,CNN 的工作原理是找到空间相关的相关性,即输入中经常出现的位置。出于这个原因,从极地信息创建数据的笛卡尔投影听起来是很自然的方法。

如果您的原始数据存在某种固有结构,则可以使用 CNN 之类的东西,但您必须仔细考虑架构。


以下是我脑海中闪过的一些其他想法,它们可能会帮助您集思广益或找到相关的研究论文:

  • 正如您描述的方法,将极坐标数据转换为图像不仅会增加数据的维度,而且通常会增加数据的稀疏性。这使得训练像 CNN 这样的东西变得非常困难,它通常最适用于密集的信息块,比如照片。如果您的数据稀疏,您可能会考虑进行一些其他预处理,例如为投影添加模糊。

  • 具有距离度量的极坐标本质上与点云相同。如果您将系列表示为扫描,而不是一组图像,而是作为 3d 点云,您可以查看诸如PointNet、PointNet++、VoxelNet 之类的模型(请参阅该链接网页底部的示例项目)。有 3d 点云中的对象检测或分割示例,这可能会为您的案例提供其他想法 - 所有这些都在 Tensorflow 或其他 DL 框架中公开可用。

  • 您对数据的理解程度如何?也许一些进一步的探索或可视化可能有助于激发一些想法,或者至少为可行的方法提供更好的感觉。尝试使用 PyntCloud(示例)之类的东西绘制数据的笛卡尔坐标(如果您可以将许多帧映射到全局原点)。

您可以完美地使用具有 2D 卷积的极坐标数据,而无需进行笛卡尔转换(我并不是说它会更好)

  • 制作一个网格(图像),其中行代表仰角,列代表方位角
  • 然后,使用以下三个参数中的两个,您将获得第三个参数:角度限制、角度分辨率、像素数
  • 映射您的极坐标 p(ϕ,θ) 到像素坐标 (h,w)

例子:

  • 海拔(ϕ) 限制 = [-45,45]º
  • azimuht_limits (θ) = [0,180]º
  • 海拔分辨率 Δϕ = 1º
  • 方位角分辨率 Δθ = 0.5º

因此,

  • 行数 H = 90/1 = 90 像素
  • 列数 W = 180/0.5 = 360 像素

你最终得到一个 90x360 像素的图像。

然后你需要一个映射函数 p(ϕ,θ) 极坐标为 (h,w) 像素位置,函数由下式给出:

h=ϕΔϕ,

w=θΔθ

让我们以我们的例子为例,

p(ϕ,θ)=(32.1º,125.2º)(h,w)=32,250