gpt4 book ai didi

keras - 用于二维图像旋转估计的 CNN(角度回归)

转载 作者:行者123 更新时间:2023-12-01 10:35:53 83 4
gpt4 key购买 nike

我正在尝试构建一个可以估计图像(或 2d 对象)旋转的 CNN(在 Keras 中)。所以基本上,输入是一个图像,输出应该是它的旋转。

我的第一个实验是估计 MŃIST 数字的旋转(从只有一个数字“类”开始,假设是“3”)。所以我所做的是从 MNIST 集中提取所有 3s,然后构建一个“旋转 3s”数据集,通过多次随机旋转这些图像,并将旋转后的图像与其旋转角度一起存储为地面实况标签。

所以我的第一个问题是 2d 旋转是循环的,我不知道如何模拟这种行为。因此,我将角度编码为 y=sin(ang), x = cos(ang)。这给了我我的数据集(旋转的 3s 图像)和相应的标签(x 和 y 值)。

对于 CNN,作为开始,我只是采用了 keras MNIST CNN 示例(https://keras.io/examples/mnist_cnn/)并用具有 2 个输出(x 和 y)的密集层替换了最后一个密集层(具有 10 个输出和一个 softmax 激活)和 tanh 激活(因为 y=sin(ang),x = cos(ang) 在 [-1,1] 内)。

我必须决定的最后一件事是损失函数,我基本上想要对角度进行距离测量。因此我认为“cosine_proximity”是要走的路。

在训练网络时,我可以看到损失正在减少并收敛到某个点。然而,当我检查预测与真实情况时,我观察到(对我而言)相当令人惊讶的行为。几乎所有的 x 和 y 预测都趋向于 0 或 +/-1。由于我的旋转的“解码”是 ang=atan2(y,x),因此预测通常是 +/- 0°、45°、90、135° 或 180°。
但是,我的训练和测试数据只有 0°、20°、40°、... 360° 的角度。
如果我改变网络的复杂性,这并不会真正改变。我还尝试了优化器参数,但没有成功。

假设有什么问题吗:
- x,y 角度编码
- tanh 激活值在 [-1,1]
- cosine_proximity 作为损失函数

预先感谢您提供任何建议、提示或指出我可能犯的错误!

最佳答案

很难给你一个确切的答案,所以让我们尝试一些想法:

  • 从 Cosine Proximity 更改为 MSE 或其他损失并检查是否有变化。
  • 改变你编码目标的方式。您可以将角度表示为 0 到 1 之间的数字。即使角度是环形的,这似乎也不是问题。
  • 确保您的预处理/增强步骤对这个特定任务有意义。
  • 关于keras - 用于二维图像旋转估计的 CNN(角度回归),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56462202/

    83 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com