Ceres 求解器:对非线性最小二乘法使用平滑近似
Ceres Solver : using smooth approximations for non-linear least squares
我们正在使用 Google ceres 求解器来解决计算机视觉应用程序中出现的优化问题。我们正在使用 AutoDiffCostFunction 来评估残差,密集 QR 求解器能够优化函数并找到合适的最小值。但我想知道使用像 fmax、fmin 和 relu(或残差内的 if/else)这样的非平滑函数是否被认为是一种不好的做法。
我们的残差包含一些非平滑操作:
// compute the area of intersection rectangle
T interArea = fmax(T(0.0), xB - xA) * fmax(T(0.0), yB - yA);
另一个在零处不可微的片段:
// Generalized Intersection over Union
T g_iou = (a_c > T(0.0)) ? (iou - (a_c - u) / a_c) : T(0.0);
例如,我们可以用平滑近似替换 fmax :
(1) fmax(x, y; k) = log( exp(kx) + exp(ky) ) / k
问题是,即使密集 QR 按预期工作,我们是否应该系统地去除任何非平滑度残差?
线性求解器的选择与objective函数的平滑度无关。如果它有效,那很好,但是 Ceres Solver 理论上假设的是平滑的 objective。不光滑是轻微的或不是非常广泛存在,那么你可能没问题。也就是说,人们(包括我)经常有您在我们的 objective 函数中使用的那种条件。
我们正在使用 Google ceres 求解器来解决计算机视觉应用程序中出现的优化问题。我们正在使用 AutoDiffCostFunction 来评估残差,密集 QR 求解器能够优化函数并找到合适的最小值。但我想知道使用像 fmax、fmin 和 relu(或残差内的 if/else)这样的非平滑函数是否被认为是一种不好的做法。
我们的残差包含一些非平滑操作:
// compute the area of intersection rectangle
T interArea = fmax(T(0.0), xB - xA) * fmax(T(0.0), yB - yA);
另一个在零处不可微的片段:
// Generalized Intersection over Union
T g_iou = (a_c > T(0.0)) ? (iou - (a_c - u) / a_c) : T(0.0);
例如,我们可以用平滑近似替换 fmax :
(1) fmax(x, y; k) = log( exp(kx) + exp(ky) ) / k
问题是,即使密集 QR 按预期工作,我们是否应该系统地去除任何非平滑度残差?
线性求解器的选择与objective函数的平滑度无关。如果它有效,那很好,但是 Ceres Solver 理论上假设的是平滑的 objective。不光滑是轻微的或不是非常广泛存在,那么你可能没问题。也就是说,人们(包括我)经常有您在我们的 objective 函数中使用的那种条件。