Machine learning 基于图像的照明方向估计的机器学习?

Machine learning 基于图像的照明方向估计的机器学习?,machine-learning,tensorflow,neural-network,computer-vision,Machine Learning,Tensorflow,Neural Network,Computer Vision,机器学习和堆栈溢出的新手 最近,我一直在尝试创建一种机器学习算法,该算法基于对象的反射来估计光源的方向。 我知道这可能是一个复杂的问题,这就是为什么,作为第一步,我尽量简化它 我首先将问题从回归问题改为分类问题,只将其作为输出:光源位于对象的左侧或光源位于对象的右侧。 对于我的数据集,我也只改变一个角度 我的问题的简短版本: 你认为机器学习有可能做到这一点吗?(我的经验太有限,无法真正确定) 如果是,什么样的神经网络更适合你?有线电视新闻网?R-CNN?LSTM?支持向量机 完成这项任务的管道

机器学习和堆栈溢出的新手

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

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

我的问题的简短版本:

  • 你认为机器学习有可能做到这一点吗?(我的经验太有限,无法真正确定)
  • 如果是,什么样的神经网络更适合你?有线电视新闻网?R-CNN?LSTM?支持向量机
  • 完成这项任务的管道是什么
我目前正在使用Unity Engine和平行光,该平行光采用[10,60]/[120170]之间的随机X角和具有金属反射的球体来创建和标记数据集。以下是一个例子:

标签:0(左侧)

标签:1(右侧)

对于预处理:

  • 图像大小调整为64x64图像
  • 从RGB转换为灰度格式
对于机器学习,我目前正在使用tensorflow和卷积神经网络:

  • 10000个64x64灰度图片的平衡标记数据作为输入,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]

我的猜测是,问题比我最初想象的要复杂,我的数据没有很好地暗示我的预测应该是什么,我应该训练一个网络,检测物体上的反射点,然后使用物体中心和点之间的方向。我说得对吗

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

我真的在寻找一些建议,关于如何处理这类任务的警告。 请记住,我对机器学习还是相当陌生的,而且仍然比我的机器学习得更多,呵呵

多谢各位

你认为机器学习有可能做到这一点吗

当然。你已经正确地选择了一个CNN模型——它最适合这个任务

我的猜测是,问题比我最初想象的要复杂,我的数据没有很好地暗示我的预测应该是什么,我应该训练一个网络,检测物体上的反射点,然后使用物体中心和点之间的方向。我说得对吗

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

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

如果您提供完整的代码,我将非常高兴。不学习的原因有很多:图像预处理错误、数据错误标记、超参数选择不当(学习率、初始化等)、错误的丢失函数等。可能只是错误

根据所描述的CNN架构,我立即提出建议:

  • 5x5
    过滤器大小可能太大,因为您没有那么多过滤器。尝试
    3x3
    并将过滤器的数量增加一点,例如
    32-64-64
  • 我假设您使用的是
    CONV-POLL-CONV-POLL-CONV-POOL
    ,而不是
    CONV-CONV-POOL-POOL-POLL
    。只是为了确定一下
  • 在FC层中可能不需要那么多神经元。您只有两个类和非常相似的图像!将
    1024
    减少为
    256
  • 您目前没有遇到任何过度装配的情况,因此暂时禁用退出:
    keep_probability=1.0
  • 注意初始化和学习率。在对数刻度中尝试不同的值,例如
    learning\u rate=0.1、0.01、0.001
    ,并检查学习模式是否发生变化

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

      他向我指出了问题所在:数据标签错误

      我对我的数据标签非常确定,但还是进行了验证

      问题就在那里

      我将答案写在这里,以便它可以帮助其他不知情的tensorflow用户: 如果使用tf.string\u input\u producer而不指定它,则默认值为:“Shuffle=True”,它将洗牌文件名队列

      由于我对标签使用.csv文件,对图像使用.png文件夹,因此标签的读取顺序为1到10000,而.png文件是随机读取的


      我对此感到非常愚蠢,但这就是你学习呵呵的方式。

      非常感谢@Maxim的帮助,数据标签错误是问题所在(见我的答案…),我对此感到非常愚蠢,但呵呵,这就是你学习呵呵的方式。也谢谢你的提示,它帮助了我