Я пытаюсь применить настройку связки, как описано здесь , к моим собственным сгенерированным случайным данным.Однако, после запуска алгоритма оптимизации, параметр ухудшается по сравнению с основным параметром истинности, который я использовал для создания данных.Мой код выглядит следующим образом:
Генерация моих данных:
N = 10000
points_3d = np.random.uniform(-1, 1, size=(N, 3))
my_camera_params_gt = np.array(np.array([[ 1.57415159e-02, -1.27909362e-02, -4.40084981e-03, 4.96590616e+00,
4.89248613e+00, 6.12022403e+00, 3.99751526e+02, -3.17706439e-07, 5.88204905e-13],
[ 1.59773241e-02, -2.52244646e-02, -9.40014165e-03, 4.99143323e+00,
4.87811951e+00, 5.71901331e+00, 4.02017534e+02, -3.78047656e-07, 9.30743117e-13]]))
my_camera_params_initial = my_camera_params_gt + my_camera_params_gt * np.random.normal(0,0.1, size = my_camera_params_gt.shape)
my_points_3d_gt = points_3d
my_points_3d_initial = my_points_3d_gt + my_points_3d_gt * np.random.normal(0,0.1, size = my_points_3d_gt.shape)
n_points = my_points_3d_gt.shape[0]
n_observations = n_points * 2
my_camera_indices = np.concatenate([np.zeros((n_points), dtype=np.int16), np.ones((n_points), dtype=np.int16)])
my_point_indices = np.concatenate([np.arange(n_points, dtype=np.int16), np.arange(n_points, dtype=np.int16)])
my_points_2d_gt = project(my_points_3d_gt[my_point_indices], my_camera_params_gt[my_camera_indices])
my_points_2d = my_points_2d_gt + my_points_2d_gt * np.random.normal(0,0.01, size = my_points_2d_gt.shape)
n_cameras = my_camera_params_gt.shape[0]
n_points = my_points_3d_gt.shape[0]
И тогда я называю процесс оптимизации следующим образом:
x0 = np.hstack((my_camera_params_initial.ravel(), my_points_3d_initial.ravel()))
A = bundle_adjustment_sparsity(n_cameras, n_points, my_camera_indices, my_point_indices)
res = least_squares(fun, x0, jac_sparsity=A, verbose=2, x_scale='jac', ftol=1e-5, method='trf',
args=(n_cameras, n_points, my_camera_indices, my_point_indices, my_points_2d))
Со всеми функциями какопределено в ссылке.
Однако, если я тогда сравниваю основную истину с результатами оптимизации:
print(my_camera_params_gt)
print('#####')
print(my_camera_params_initial)
print('#####')
print(res.x[:18].reshape(2,9))
результаты оптимизации хуже, чем первоначальные предположения.Как это может быть?