graphical representation of my pipeline
我正在尝试对从视频Feed中捕获的脸部进行姿势估计。 我使用tracking.js的面部对齐算法。 这给了我点数,然后我用它来估计我的脸在相机空间中的位置。
由于面是非刚性物体,角度问题可能会修改图像上的对齐点,我使用参数化的3D点列表,然后将其投影到平面上以获得相应的2D点列表。
然后我做一个点到点的平方距离来计算错误率然后我尝试最小化。
我正在使用FMIN.js的共轭梯度算法来最小化错误率。
但是大多数时候,似乎由于零值,算法卡在了沃尔夫线性部分上。是因为使用finite differential gradient?
我做错了吗?
我对优化算法很陌生,我不确定我是否正在做一切正常的工作。我的价值往往很高(约80k),这也导致我的渐变也很大。我尝试了一个规范化过程(使用第一个错误作为规范)但是没有变得更好。
目前,对于有限差分梯度计算,我使用了遇到的值中的一个小值。
我也将旋转的渐变限制为Pi / 2,因为我认为太大的值会导致算法超出步长,超出角度范围。
答案 0 :(得分:0)
似乎问题来自梯度计算。 由于我对大价值做了一个天真的有限区分,我的渐变非常大。 试图遵循这个巨大的梯度使参数摆脱合理的空间搜索,下一次评估返回更大的值。 归一化使问题成反过来:我的梯度现在太小了,步数不够大,无法有效地下降。
我使用了一种中间解决方案:使梯度成为函数评估的比率,然后将其乘以每个参数的适当值:
gradient = gradient / fx * eigenVector