1

机器学习和计算器的新手。从照片中进行照明方向估计的机器学习?

最近,我一直在尝试创建一种机器学习算法,根据对象的反射来估计光源的方向。 我知道这可能是一个复杂的主题,这就是为什么,作为第一步,我试图尽可能简化它。

我首先将问题从回归问题转换为分类问题,只将其作为输出:光源位于对象的左侧或光源位于对象的右侧。 我也只为一个角度变化我的数据集。

短版我的问题:

  • 你认为这是可以做到这样的事情与机器学习? (我的经验太难以确定了)
  • 如果是,那么更适合您的神经网络是什么? CNN? R-CNN? LSTM? SVM?
  • 什么是管道来完成这项任务?

我目前使用Unity Engine定向光源,它采用[10,60]/[120,170]和一个带有金属反射的球体之间的随机X角来创建和标记数据集。下面是一个例子:

https://imgur.com/a/FxNew标签:0(左侧)

https://imgur.com/a/9KFhi标签:1(右侧)

对于前处理:

  • 图像被调整为64x64图像
  • 从RGB转换为灰度格式。

对于机器学习,我目前使用tensorflow和使用卷积神经网络:

  • 10000平衡,标记的64×64的灰度图像作为输入,并作为0/1标签

  • 数据
  • 3卷积层用滤波器[16,32,64]与大小[5,5] RELU

  • 3池层用大小[2,2]和步幅[2,2]
  • 1 1024个隐藏神经元和差(速率= 0.4)RELU致密层
  • 1与2个输出神经元(1为每个类)使用SoftMax

至于问题致密层:我的网络根本就不是学习损失几乎没有下降,准确性表明,好的结果是随机的,无论数据,层数,优化器,学习率,......我的输出在两个类别之间只是平均值[0.5,0.5]。

我的猜测是,这个问题比我第一次想到的更复杂,我的数据并没有给出我的预测应该是什么的好暗示,而是我应该培养一个网络来检测物体上的反射点然后使用对象中心和点之间的方向。我对吗 ?

另一种猜测是卷积层没有考虑位置,因此对于卷积部分来说,所有图像都是相同的,因为球体总是相同的,以及照明模式。它会始终检测到相同的事物,并且不会考虑到光照区域已经移动。你有什么建议,我可以用哪个网络来解决这个问题?

我真的在寻找一些建议,警告如何解决这类任务。 请记住,我仍然是相当新的机器学习和仍然学习比我的机器嘿嘿...

谢谢。

回答

0

您认为使用机器学习可以做这样的事情吗?

绝对。而且您已经正确选择了CNN模型 - 这是最适合此任务的模型。

我的猜测是,这个问题比我第一次想到的更复杂,我的数据并没有给出我的预测应该是什么的好暗示,而是我应该培养一个检测到反射点的网络一个对象,然后使用对象中心和点之间的方向。我对吗 ?

不,CNN已经证明可以从原始像素中很好地分类。它应该弄清楚自己要注意什么。

对于我可以用来解决此问题的网络,您有任何建议吗?

如果您提供完整的代码,我会很好。没有学习的原因有很多:图像预处理错误,数据错误标记,超参数选择不当(学习速率,初始化...),错误丢失函数等。可能有简单错误

我的建议马上,基于描述CNN架构:

  • 5x5滤波器的尺寸可能过大,因为你没有那么多的过滤器。尝试3x3并稍微增加一些过滤器,例如32 - 64 - 64
  • 我假设你使用CONV - POLL - CONV - POLL - CONV - POOL而不是CONV - CONV - CONV - POOL - POOL - POLL。只想确认一下。
  • 你可能不需要你的FC层有这么多的神经元。你只有两个班级和非常相似的图像!将1024减少为256
  • 您目前不会遇到任何过度配合,因此请立即禁用此退出:keep_probability=1.0
  • 注意初始化和学习率。以对数比例尝试不同的值,例如learning_rate = 0.1, 0.01, 0.001并检查学习模式是否改变。
+0

非常感谢@Maxim的帮助,数据错误标签是问题(请参阅我的回答...),我对此感到非常愚蠢,但是,这就是你如何学习嘿嘿。也感谢你的提示,它帮助我完善了我的网络。祝你好运,并看到你 –

+0

@MarcRavaine太棒了!不要为这个错误感到难过,它会发生在每一位工程师身上,特别是当API是新的和陌生的时候。 – Maxim

1

感谢@Maxim的回答。这非常有帮助,并帮助我解决了我的问题,并改善了我的网络。

他指出我的问题:数据错误标签。

我很确定我的数据标签,但无论如何都证实了。

的问题是那里......

我在这里写答案,因此它可以或许帮助其他不知情tensorflow用户: 当您使用tf.string_input_producer没有具体说明,默认为:“洗牌= True“,其中洗牌您的文件名队列。

因为我使用.csv文件作为图像的标签和.png文件夹,所以标签的读取顺序从1到10000,而.png文件是随机读取的。

我觉得这很愚蠢,但这就是你如何学习嘿嘿。