机器学习用于从图片中估计光照方向?

我是机器学习和stackoverflow的新手。

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

我首先将问题从回归问题转变为分类问题,只考虑输出:光源在对象的左侧或光源在对象的右侧。我的数据集中也只让一个角度发生变化。

我的问题的简短版本:

  • 你认为用机器学习可以做到这样的事情吗?(我的经验太有限了,无法确定)
  • 如果可以,你认为最适合的神经网络是什么?CNN?R-CNN?LSTM?SVM?
  • 完成这项任务的流程是什么?

我目前使用Unity引擎和方向光,方向光在[10,60] / [120,170]之间随机选择X角度,并使用具有金属反射的球体来创建和标记数据集。这里是一个例子:

https://i.sstatic.net/eqe1v.jpg 标签:0(左侧)

https://i.sstatic.net/5OUAX.jpg 标签:1(右侧)

对于预处理:

  • 图片调整为64×64尺寸
  • 从RGB转换为灰度格式。

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

  • 10000个平衡的、标记好的64×64灰度图片作为输入,0/1作为标签

  • 3个卷积层,滤波器数量为[16,32,64],大小为[5,5],使用RELU激活函数

  • 3个池化层,大小为[2,2],步长为[2,2]

  • 1个全连接层,1024个隐藏神经元,使用dropout(丢弃率=0.4),使用RELU激活函数

  • 1个全连接层,2个输出神经元(每个类别一个),使用Softmax激活函数

关于问题:我的网络根本没有学习,损失几乎没有下降,准确率显示好的结果是随机的,无论数据、层数、优化器、学习率等如何,我的输出只是在两个类别之间平均:[0.5 , 0.5]。

我的猜测是这个问题比我最初想象的要复杂,我的数据没有提供一个好的提示来预测结果,我应该训练一个能够检测对象上反射点的网络,然后使用对象中心和反射点之间的方向。我对吗?

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

我真的在寻找一些建议和警告,关于如何处理这种任务。请记住,我对机器学习还是相当新手,我还在学习比我的机器更多的知识,呵呵…

谢谢你。


回答:

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

绝对可以。你正确地选择了CNN模型——这是最适合这项任务的模型。

我的猜测是这个问题比我最初想象的要复杂,我的数据没有提供一个好的提示来预测结果,我应该训练一个能够检测对象上反射点的网络,然后使用对象中心和反射点之间的方向。我对吗?

不,CNN已经证明可以很好地从原始像素进行分类。它应该自己找出需要关注什么。

你对我可以使用哪种网络来解决这个问题有什么建议吗?

如果你能提供你的完整代码会很好。有很多原因可能导致无法学习:图像预处理错误、数据标记错误、超参数选择不当(学习率、初始化等)、错误的损失函数等,可能只是有简单的错误

根据你描述的CNN架构,我建议立即采取以下措施:

  • 5x5的滤波器大小可能太大,因为你没有那么多滤波器。尝试使用3x3并稍微增加滤波器数量,例如32 - 64 - 64
  • 我假设你使用的是CONV - POLL - CONV - POLL - CONV - POOL,而不是CONV - CONV - CONV - POOL - POOL - POLL。只是为了确认一下。
  • 你可能不需要在全连接层中使用那么多神经元。你只有两个类别,而且图片非常相似!将1024减少到256左右。
  • 你目前没有遇到过拟合问题,所以暂时禁用dropout:keep_probability=1.0
  • 注意初始化和学习率。尝试在对数尺度上使用不同的值,例如learning_rate = 0.1, 0.01, 0.001,并检查学习模式是否有变化。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注