這個問題與「C++中的數字食譜」有關,所以它將被保留給對此知之甚少的人們多維優化。數字食譜/多維根搜索(使用newt):如何最大限度地減少最大誤差
我正在編寫一個需要搜索多維根的程序,爲了解決這個問題,我使用了多維牛頓根的查找方法,即「newt」程序。
對於那些對細節感興趣的人,我試圖根據幾個特徵點(兩個攝像頭看到的特徵點),將可變形的3D模型擬合到物體的stereocopic視圖中。
對於這一點,我使用的蠑螈程序使用以下:
- 11輸入參數:我的可變形模型可以與11個參數(5個幾何參數組成和6個deegres自由度爲被建模三維物體位置):
- 14輸出參數我需要找到根:根據攝像機識別的特徵點,並給定一組「輸入參數」,我可以計算一組相機看到的特徵點之間的距離及其理論值陽離子。我有7個點,所以給我14個參數(7距離乘以2,因爲我計算兩個相機的距離)
我的問題是,我有更多的輸出參數(14)比輸入參數11):無論何時我稱之爲「newt」,該算法總是收斂,但是它會找到一個解決方案,將11個第一個輸出參數幾乎完美地減到最小,但在其餘3個參數上有很多錯誤。
但是我想這些錯誤在輸出參數中統一分配。
我已經嘗試過在下面所描述的方法:
- 嘗試將14個輸出參數組合成11參數( 例如,你需要一定距離的平均值,代替使用 兩個距離)。不過我並不滿足於這種方法
- 混合幾種解決方案,100%具有以下原則:
- 呼叫mnewt和記憶發現的根
- 更改14輸出參數
- 的順序再次調用mnewt記住所找到的根
- 計算一個解決方案是在兩個發現根的平均
有沒有人知道更通用的方法,其中根發現算法將有利於在輸出參數之間統一劃分的錯誤,而不是偏向於第一個參數?
爲什麼不設置單個「距離度量」,例如,所有7個特徵點的平方距離總和,然後運行一些優化程序。 Levenberg-Marquardt似乎很合適。 –
我已經嘗試過了,這是一個失敗。如果你閱讀NR書籍的多維優化,你會看到(我相信他們),嘗試將multidim根搜索轉換爲最小搜索(根據你的建議)是一個壞主意:你最終試圖最小化一個方向上具有多個局部最小值和多個平坦區域的函數 –
然而,我會盡量在一個方向上運行一個最小化(例如,在一個方向上導出一個零點:類似牛頓的方法的噩夢)蠑螈給出的起點。也許它不太可能會收斂到虛假的局部最小值。 –