【问题标题】:Need help putting a minimization equation into scipy weighted least squares solver需要帮助将最小化方程放入 scipy 加权最小二乘求解器
【发布时间】:2018-05-12 13:35:47
【问题描述】:

我的问题是如何将加权最小二乘问题放入 python 求解器中。我正在尝试实施发现here(PDF 警告)的论文中的方法。帖子底部有问题的概述。

具体来说,我想从以下最小化方程(论文中的 19)开始:

latex formula can be found here

\frac{min}{\Theta \epsilon M} \sum_{j=1}^{n} \sum_{i=1}^{m}(w(i,j))\left | \Psi(i,j)*\Theta (i,j) - I(i,j) \right |^{2}

它表示为加权最小二乘问题。
wpsiI 是我的已知问题,我正在尝试解决 theta

我首先尝试创建一个函数,该函数接受一个 theta 并返回这个方程的总和,就像上面表达的那样。然后我将它传递给 scipy.optimize.least_squares,但优化后 theta 值始终保持不变。我尝试实现一个雅可比,但结果总和爆炸成巨大的负值。当我试图在图像上运行它时,它也需要很长时间(I 是像素 j 与光 i 的像素值)。

然后我意识到我几乎肯定误解了如何解决这个问题,并且可以使用一些帮助来解决它。我当前的代码如下:

def theta_solver(self, theta):
    imshape = self.images.shape
    sm = 0

    for j in j_array:
        for i in i_array:
            w = self.get_w(i, j, theta)
            psi = self.non_diff_smoothing(self.get_psi(i, j))
            diff = psi*(theta[i, j]) - self.I[i, j]
            res = w*(diff)
            sm += res

    return sm

def solve_theta(self, theta_guess):
    res = scipy.optimize.least_squares(self.theta_solver, theta_guess) 

有些事情告诉我,我解决这个问题的方法离我很远,我可以用手指朝正确的方向前进。感谢您的宝贵时间。

问题概述:

这种特殊的视觉方法称为光度立体。通过拍摄具有不同光源的场景的多张图像,我们可以创建该场景的 3D 重建。
一个问题是照明中的1/r^2 衰减取决于与光源的距离,这意味着这无法通过正常的线性解决方案来解决。
论文中记录的方法是一种非线性方法,用于解决近光光度立体问题。它做了两件事:

  • 它解决了表面Z,和
  • 由 theta 表示的每个像素的反照率/强度,通过交替求解器。

在这个问题中,我只是试图解决方程的theta 元素,它可以通过加权最小二乘法来解决。

【问题讨论】:

    标签: python scipy regression linear-algebra


    【解决方案1】:

    事实证明我对这个问题的思考过度了。这可以分解为 Ax = b 形式的简单线性解。在查看误差方程时,在这种情况下:

    argmin(THETA) sum(W * ||PSI * THETA - I||^2)
    

    我们可以通过均方根内的部分分配权重。我们的等式最终是:

    W * PSI * THETA = W * I
    

    我们可以使用您最喜欢的线性求解器(即共轭梯度下降法)求解

    【讨论】:

      猜你喜欢
      • 2018-05-16
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 2022-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      相关资源
      最近更新 更多