ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ConfigBA.cpp
Go to the documentation of this file.
1 // File: ConfigBA.cpp
3 // Author: Changchang Wu
4 // Description : implementation of the configuration object class
5 //
6 // Copyright (c) 2011 Changchang Wu (ccwu@cs.washington.edu)
7 // and the University of Washington at Seattle
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU General Public
11 // License as published by the Free Software Foundation; either
12 // Version 3 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // General Public License for more details.
18 //
20 
21 #include <string.h>
22 #include <iostream>
23 #include <algorithm>
24 #include <time.h>
25 #include <iomanip>
26 #include <fstream>
27 #include <string>
28 
29 using std::cout;
30 using std::ofstream;
31 using std::string;
32 
33 #ifndef _WIN32
34 #include <sys/time.h>
35 #endif
36 
37 #include "ConfigBA.h"
38 
39 #ifdef _MSC_VER
40 #define strcpy strcpy_s
41 #define sprintf sprintf_s
42 #endif
43 
44 namespace pba {
45 
47  __lm_max_iteration = 50;
48  __lm_initial_damp = 1e-3f;
49  __lm_minimum_damp = 1e-10f;
50  __lm_maximum_damp = 1e+5f;
51  __lm_delta_threshold = 1e-6f;
52  __lm_gradient_threshold = 1e-10f;
53  __lm_mse_threshold = 0.25f;
55  __lm_check_gradient = false;
60 
62  __cg_max_iteration = 100;
63  __cg_min_iteration = 10;
65  __cg_norm_threshold = 0.1f;
66  __cg_norm_guard = 1.0f;
69 
71  __fixed_intrinsics = false;
74 
76  __verbose_level = 2;
77  __verbose_cg_iteration = false;
79  __verbose_allocation = false;
80  __verbose_sse = false;
81  __save_gradient_norm = false;
83  __matlab_format_stat = true;
84 
86  __jc_store_transpose = true;
87  __jc_store_original = true;
88  __no_jacobian_store = false;
89 
90  __focal_normalize = true;
91  __depth_normalize = true;
93  __jacobian_normalize = true;
95  __depth_check_epsilon = 0.01f;
96 
98  __multiply_jx_usenoj = true;
99 
101  __accurate_gain_ratio = true;
104  __current_device = -1;
105  __selected_device = -1;
106  __memory_usage = 0;
109 
111  __debug_pba = false;
112  __profile_pba = 0;
113  __cpu_thread_profile = false;
114  __warmup_device = false;
115 
118 
121 }
122 
124  __abort_flag = false;
125  __num_lm_success = 0;
126  __num_lm_iteration = 0;
127  __num_cg_iteration = 0;
131  __num_point_behind = 0;
132  __initial_mse = 0;
133  __final_mse = 0;
134  __final_mse_x = 0;
135  __focal_scaling = 1.0f;
136  __depth_scaling = 1.0f;
137  __pba_return_code = 0;
139  __warmup_device = false;
141  for (int i = 0; i < NUM_TIMER; ++i) __timer_record[i] = 0;
142  __bundle_records.resize(0);
143  if (__num_cpu_thread_all) {
144  std::cout << "WARNING: set all thread number to " << __num_cpu_thread_all
145  << '\n';
146  for (int i = 0; i < NUM_FUNC; ++i)
148  }
149 }
150 
154  __bundle_mode_next = 0;
158  __lm_use_diagonal_damp = true;
159 }
160 
161 void ConfigBA::SaveBundleStatistics(int ncam, int npt, int nproj) {
162  if (__profile_pba) return;
163  if (__stat_filename && __bundle_records.size() > 0) {
164  char filenamebuf[1024];
165  char* ret = strchr(__stat_filename, '\r');
166  if (ret) ret[0] = 0;
167  char* dot = strrchr(__stat_filename, '.');
168  if (dot && strchr(dot, '/') == NULL && strchr(dot, '\\') == NULL)
169  strcpy(filenamebuf, __stat_filename); // if filename has extension, use
170  // it
171  else
172  sprintf(filenamebuf, "%s%s%s%s%s%s%s%s%s.%s", __stat_filename,
173  __cpu_data_precision == 0 ? "_gpu" : "_cpu",
174  __cpu_data_precision == sizeof(double) ? "d" : "",
175  __cg_schur_complement ? "_schur" : "\0",
177  ? "\0"
178  : (__lm_damping_auto_switch > 0 ? "_ad" : "_id"),
180  ? "_md"
181  : (__use_radial_distortion ? "_pd" : "\0"),
182  __jacobian_normalize ? "\0" : "_nojn",
183  __focal_normalize || __depth_normalize ? "\0" : "_nodn",
184  __depth_degeneracy_fix ? "\0" : "_nodf",
185  __matlab_format_stat ? "m" : "log");
186 
188  ofstream out(filenamebuf);
189  out << std::left;
190 
191  float overhead =
194  out << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"
195  << "ncam = " << ncam << "; npt = " << npt << "; nproj = " << nproj
196  << ";\n"
197  << "%% overhead = " << overhead << ";\n"
198  << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"
199  << "%% " << std::setw(10) << __num_lm_iteration
200  << "\t linear systems solved;\n"
201  << "%% " << std::setw(10) << __num_cg_iteration
202  << "\t conjugated gradient steps;\n"
203  << "%% " << std::setw(10) << BundleTimerGet(TIMER_OVERALL)
204  << "\t seconds used overall;\n"
205  << "%% " << std::setw(10) << BundleTimerGet(TIMER_PREPROCESSING)
206  << "\t seconds on pre-processing;\n"
207  << "%% " << std::setw(10)
210  << "\t seconds on upload;\n"
211  << "%% " << std::setw(10) << BundleTimerGet(TIMER_OPTIMIZATION)
212  << "\t seconds on optimization;\n"
213  << "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n"
214  << (__cpu_data_precision == 0 ? "gpustat" : "cpustat")
215  << (__cpu_data_precision == sizeof(double) ? "_db" : "")
216  << (__jacobian_normalize ? "" : "_nojn")
217  << (__depth_degeneracy_fix ? "" : "_nodf")
218  << (__cg_schur_complement ? "_schur" : "") << " = [\n";
219 
220  for (size_t i = 0; i < __bundle_records.size(); ++i)
221  out << std::setw((i % 7 > 2) ? ((i % 7 > 4 && !__save_gradient_norm &&
223  ? 0
224  : 12)
225  : 5)
226  << (__bundle_records[i] + (i == 1 ? overhead : 0))
227  << (i % 7 == 6 ? '\n' : '\t');
228 
229  if (__matlab_format_stat) out << "];\n\n";
230 
231  if (__verbose_level)
232  std::cout << "\n---------------------------------------\n" << filenamebuf;
233  }
234 }
235 
236 #define REPORT_FUNCTION_TIME(FID) \
237  std::setw(5) << (((int)(BundleTimerGet(FID) * 100 + 50)) * 0.01) << "(" \
238  << std::setw(2) \
239  << 0.1f * ((int)(1000 * BundleTimerGet(FID) / \
240  BundleTimerGet(TIMER_OPTIMIZATION))) \
241  << "%)"
242 
244  if (__profile_pba) return;
245 
246  if (__verbose_level)
247  std::cout << "\n---------------------------------------\n" << std::setw(10)
248  << __num_lm_success << "\t successful iterations;\n"
249  << std::setw(10) << __num_lm_iteration
250  << "\t linear systems solved;\n" << std::setw(10)
251  << __num_cg_iteration << "\t conjugated gradient steps;\n"
252  << std::setw(10) << BundleTimerGet(TIMER_OVERALL)
253  << "\t seconds used overall;\n" << std::setw(10)
255  << "\t seconds on allocation;\n" << std::setw(10)
257  << "\t seconds on pre-processing;\n" << std::setw(10)
258  << BundleTimerGet(TIMER_GPU_UPLOAD) << "\t seconds on upload;\n"
259  << std::setw(10) << BundleTimerGet(TIMER_OPTIMIZATION)
260  << "\t seconds on optimization;\n";
263  << "\t seconds on jacobians;\n"
265  << "\t seconds on projections;\n"
267  << "\t seconds on JX;\n"
269  << "\t seconds on JtE;\n"
271  << "\t seconds to compute preconditioner;\n"
273  << "\t seconds to apply preconditioner;\n"
275  << "\t seconds to update parameters;\n";
276  if (__verbose_level)
277  std::cout << "---------------------------------------\n"
278  << "mse = " << __initial_mse << " -> " << __final_mse << ""
279  << " (" << __final_mse_x
280  << (__use_radial_distortion == -1 ? 'D' : 'U') << ")\n"
281  << "---------------------------------------\n";
282 }
283 
285 #ifdef _WIN32
286  return clock() / double(CLOCKS_PER_SEC);
287 #else
288  static int started = 0;
289  static struct timeval tstart;
290  if (started == 0) {
291  gettimeofday(&tstart, NULL);
292  started = 1;
293  return 0;
294  } else {
295  struct timeval now;
296  gettimeofday(&now, NULL);
297  return ((now.tv_usec - tstart.tv_usec) / 1000000.0 +
298  (now.tv_sec - tstart.tv_sec));
299  }
300 #endif
301 }
302 
305 }
306 
309 }
310 
311 void ConfigBA::BundleTimerSwap(int timer1, int timer2) {
312  BundleTimerSwitch(timer1);
313  BundleTimerSwitch(timer2);
314 }
315 
317  return float(__timer_record[timer]);
318 }
319 
321  return 0.01f * ((int)(100 * (MyClock() - __timer_record[timer])));
322 }
323 
325  if (__bundle_time_budget <= 0) return true;
327 }
328 
329 void ConfigBA::SaveBundleRecord(int iter, float res, float damping, float gn,
330  float gi) {
331  __bundle_records.push_back(float(iter));
332  __bundle_records.push_back(BundleTimerGetNow());
333  __bundle_records.push_back(float(__num_cg_iteration));
334  __bundle_records.push_back(res);
335  __bundle_records.push_back(damping);
336  __bundle_records.push_back(gn);
337  __bundle_records.push_back(gi);
338 }
339 
340 void ConfigBA::ParseParam(int argc, char** argv) {
341 #define CHAR1_TO_INT(x) ((x >= 'A' && x <= 'Z') ? x + 32 : x)
342 #define CHAR2_TO_INT(str, i) \
343  (str[i] ? CHAR1_TO_INT(str[i]) + (CHAR1_TO_INT(str[i + 1]) << 8) : 0)
344 #define CHAR3_TO_INT(str, i) \
345  (str[i] ? CHAR1_TO_INT(str[i]) + (CHAR2_TO_INT(str, i + 1) << 8) : 0)
346 #define STRING_TO_INT(str) (CHAR1_TO_INT(str[0]) + (CHAR3_TO_INT(str, 1) << 8))
347 
348 #ifdef _MSC_VER
349 // charizing is microsoft only
350 #define MAKEINT1(a) (#@ a)
351 #define sscanf sscanf_s
352 #else
353 #define mychar0 '0'
354 #define mychar1 '1'
355 #define mychar2 '2'
356 #define mychar3 '3'
357 #define mychara 'a'
358 #define mycharb 'b'
359 #define mycharc 'c'
360 #define mychard 'd'
361 #define mychare 'e'
362 #define mycharf 'f'
363 #define mycharg 'g'
364 #define mycharh 'h'
365 #define mychari 'i'
366 #define mycharj 'j'
367 #define mychark 'k'
368 #define mycharl 'l'
369 #define mycharm 'm'
370 #define mycharn 'n'
371 #define mycharo 'o'
372 #define mycharp 'p'
373 #define mycharq 'q'
374 #define mycharr 'r'
375 #define mychars 's'
376 #define mychart 't'
377 #define mycharu 'u'
378 #define mycharv 'v'
379 #define mycharw 'w'
380 #define mycharx 'x'
381 #define mychary 'y'
382 #define mycharz 'z'
383 #define MAKEINT1(a) (mychar##a)
384 #endif
385 #define MAKEINT2(a, b) (MAKEINT1(a) + (MAKEINT1(b) << 8))
386 #define MAKEINT3(a, b, c) (MAKEINT1(a) + (MAKEINT2(b, c) << 8))
387 #define MAKEINT4(a, b, c, d) (MAKEINT1(a) + (MAKEINT3(b, c, d) << 8))
388 
389  char *arg, *param, *opt;
390  int opti, argi;
391  float argf;
392  for (int i = 0; i < argc; i++) {
393  arg = argv[i];
394  if (arg == NULL || arg[0] != '-' || !arg[1]) continue;
395  opt = arg + 1;
396  opti = STRING_TO_INT(opt);
397  param = argv[i + 1];
398 
400  switch (opti) {
401  case MAKEINT3(l, m, i):
402  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi > 0)
403  __lm_max_iteration = argi;
404  break;
405  case MAKEINT3(l, m, d):
406  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf >= 0)
407  __lm_delta_threshold = argf;
408  break;
409  case MAKEINT3(l, m, e):
410  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf >= 0)
411  __lm_mse_threshold = argf;
412  break;
413  case MAKEINT3(l, m, g):
414  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
416  break;
417  case MAKEINT4(d, a, m, p):
418  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
419  __lm_initial_damp = argf;
420  break;
421  case MAKEINT4(d, m, i, n):
422  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
423  __lm_minimum_damp = argf;
424  break;
425  case MAKEINT4(d, m, a, x):
426  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
427  __lm_maximum_damp = argf;
428  break;
429  case MAKEINT3(c, g, i):
430  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi > 0)
431  __cg_max_iteration = argi;
432  break;
433  case MAKEINT4(c, g, i, m):
434  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi > 0)
435  __cg_min_iteration = argi;
436  break;
437  case MAKEINT3(c, g, n):
438  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
439  __cg_norm_threshold = argf;
440  break;
441  case MAKEINT3(c, g, g):
442  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
443  __cg_norm_guard = argf;
444  break;
445  case MAKEINT4(c, g, r, f):
446  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi > 0)
447  __cg_recalculate_freq = argi;
448  break;
449  case MAKEINT1(v):
450  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi >= 0)
451  __verbose_level = argi;
452  break;
453  case MAKEINT4(d, e, v, i):
454  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi >= 0)
455  __selected_device = argi;
456  break;
457  case MAKEINT4(b, u, d, g):
458  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi >= 0)
459  __bundle_time_budget = argi;
460  break;
461  case MAKEINT3(e, x, p):
462  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi >= 0)
463  __pba_experimental = argi;
464  break;
465  case MAKEINT4(t, n, u, m):
466  if (i + 1 < argc && sscanf(param, "%d", &argi) && argi > 0)
467  __num_cpu_thread_all = argi;
468  break;
469  case MAKEINT4(p, r, o, f):
470  __profile_pba = (i + 1 < argc && sscanf(param, "%d", &argi))
471  ? std::max(10, argi)
472  : 100;
473  break;
474  case MAKEINT4(t, p, r, o):
475  __cpu_thread_profile = true;
476  break;
477  case MAKEINT4(c, a, l, i):
478  __fixed_intrinsics = true;
479  break;
480  case MAKEINT4(s, c, h, u):
481  case MAKEINT4(s, s, o, r):
482  __cg_schur_complement = true;
483  break;
484  case MAKEINT2(m, d):
485  case MAKEINT4(r, a, d, i):
487  break;
488  case MAKEINT2(p, d):
490  break;
491  case MAKEINT3(r, 0, 0):
493  break;
494  case MAKEINT4(v, a, r, i):
495  __fixed_intrinsics = false;
496  break;
497  case MAKEINT4(n, a, c, c):
498  __accurate_gain_ratio = false;
499  break;
500  case MAKEINT4(v, c, g, i):
501  __verbose_cg_iteration = true;
502  break;
503  case MAKEINT4(v, f, u, n):
505  break;
506  case MAKEINT4(v, a, l, l):
507  __verbose_allocation = true;
508  break;
509  case MAKEINT4(v, s, s, e):
510  __verbose_sse = true;
511  break;
512  case MAKEINT4(s, v, g, n):
513  __save_gradient_norm = true;
514  break;
515  case MAKEINT2(i, d):
516  __lm_use_diagonal_damp = false;
517  break;
518  case MAKEINT3(d, a, s):
519  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
520  __lm_damping_auto_switch = std::max(argf, 0.1f);
521  else
523  break;
524  case MAKEINT4(c, h, k, g):
525  __lm_check_gradient = true;
526  break;
527  case MAKEINT4(n, o, j, n):
528  __jacobian_normalize = false;
529  break;
530  case MAKEINT2(n, j):
531  __no_jacobian_store = true;
532  case MAKEINT3(n, j, c):
533  __jc_store_transpose = false;
534  __jc_store_original = false;
535  break;
536  case MAKEINT4(n, j, c, o):
537  __jc_store_original = false;
538  break;
539  case MAKEINT4(n, j, c, t):
540  __jc_store_transpose = false;
541  break;
542  case MAKEINT3(j, x, j):
543  __multiply_jx_usenoj = false;
544  break;
545  case MAKEINT4(j, x, n, j):
546  __multiply_jx_usenoj = true;
547  break;
548  case MAKEINT4(n, o, d, n):
549  __depth_normalize = false;
550  __focal_normalize = false;
551  break;
552  case MAKEINT4(n, o, d, f):
553  __depth_degeneracy_fix = false;
554  break;
555  case MAKEINT4(n, o, r, m):
556  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0)
558  break;
559  case MAKEINT3(d, c, e):
560  if (i + 1 < argc && sscanf(param, "%f", &argf) && argf > 0 &&
561  argf <= 0.01)
562  __depth_check_epsilon = argf;
563  break;
564  case MAKEINT4(d, e, b, u):
565  __debug_pba = true;
566  break;
567  case MAKEINT4(e, v, a, l):
568  __lm_max_iteration = 100;
569  __warmup_device = true;
570  case MAKEINT4(s, t, a, t):
571  __stat_filename = (i + 1 < argc && param[0] != '-') ? param : NULL;
572  break;
573  case MAKEINT3(o, u, t):
574  __driver_output = (i + 1 < argc && param[0] != '-') ? param : NULL;
575  break;
576  case MAKEINT4(w, a, r, m):
577  __warmup_device = true;
578  break;
579  case MAKEINT4(m, o, t, i):
580  __bundle_mode_next = 1;
581  break;
582  case MAKEINT4(s, t, r, u):
583  __bundle_mode_next = 2;
584  break;
585  }
586  }
587 }
588 
589 } // namespace pba
#define MAKEINT1(a)
#define REPORT_FUNCTION_TIME(FID)
Definition: ConfigBA.cpp:236
#define MAKEINT4(a, b, c, d)
#define STRING_TO_INT(str)
#define MAKEINT3(a, b, c)
#define MAKEINT2(a, b)
#define NULL
void ParseParam(int argc, char **argv)
Definition: ConfigBA.cpp:340
bool __debug_pba
Definition: ConfigBA.h:176
bool __verbose_function_time
Definition: ConfigBA.h:126
bool __verbose_sse
Definition: ConfigBA.h:131
int __selected_device
Definition: ConfigBA.h:152
bool __fixed_intrinsics
Definition: ConfigBA.h:113
int __pba_return_code
Definition: ConfigBA.h:172
float __depth_scaling
Definition: ConfigBA.h:162
std::vector< float > __bundle_records
Definition: ConfigBA.h:183
float __final_mse_x
Definition: ConfigBA.h:160
bool __jacobian_normalize
Definition: ConfigBA.h:139
float __focal_scaling
Definition: ConfigBA.h:161
bool __verbose_cg_iteration
Definition: ConfigBA.h:124
bool __jc_store_transpose
Definition: ConfigBA.h:134
void PrintBundleStatistics()
Definition: ConfigBA.cpp:243
bool __cpu_thread_profile
Definition: ConfigBA.h:175
float __cg_norm_guard
Definition: ConfigBA.h:103
int __current_device
Definition: ConfigBA.h:163
int __num_camera_modified
Definition: ConfigBA.h:170
void BundleTimerSwap(int timer1, int timer2)
Definition: ConfigBA.cpp:311
bool __lm_use_diagonal_damp
Definition: ConfigBA.h:110
bool __abort_flag
Definition: ConfigBA.h:122
bool __depth_degeneracy_fix
Definition: ConfigBA.h:143
int __current_iteration
Definition: ConfigBA.h:164
int __verbose_level
Definition: ConfigBA.h:121
bool __matlab_format_stat
Definition: ConfigBA.h:180
bool __lm_check_gradient
Definition: ConfigBA.h:108
int __profile_pba
Definition: ConfigBA.h:174
float __lm_delta_threshold
Definition: ConfigBA.h:93
bool __depth_normalize
Definition: ConfigBA.h:142
bool __verbose_allocation
Definition: ConfigBA.h:129
int __num_cg_iteration
Definition: ConfigBA.h:165
int __num_lm_success
Definition: ConfigBA.h:166
float __final_mse
Definition: ConfigBA.h:159
int __pba_experimental
Definition: ConfigBA.h:104
int __cg_min_iteration
Definition: ConfigBA.h:87
int __num_jacobian_eval
Definition: ConfigBA.h:169
void BundleTimerSwitch(int timer)
Definition: ConfigBA.cpp:307
float __depth_check_epsilon
Definition: ConfigBA.h:145
size_t __memory_usage
Definition: ConfigBA.h:178
float __cg_norm_threshold
Definition: ConfigBA.h:101
float __lm_initial_damp
Definition: ConfigBA.h:98
void SaveBundleStatistics(int ncam, int npt, int nproj)
Definition: ConfigBA.cpp:161
int __num_lm_iteration
Definition: ConfigBA.h:167
int __bundle_mode_next
Definition: ConfigBA.h:155
int __use_radial_distortion
Definition: ConfigBA.h:115
bool __cg_schur_complement
Definition: ConfigBA.h:105
bool __accurate_gain_ratio
Definition: ConfigBA.h:89
bool __jc_store_original
Definition: ConfigBA.h:136
int __cpu_data_precision
Definition: ConfigBA.h:153
float __lm_mse_threshold
Definition: ConfigBA.h:96
void SaveBundleRecord(int iter, float res, float damping, float gn, float gi)
Definition: ConfigBA.cpp:329
double MyClock()
Definition: ConfigBA.cpp:284
@ TIMER_PREPROCESSING
Definition: ConfigBA.h:34
@ TIMER_FUNCTION_BC
Definition: ConfigBA.h:43
@ TIMER_FUNCTION_MP
Definition: ConfigBA.h:44
@ TIMER_FUNCTION_JTE
Definition: ConfigBA.h:42
@ TIMER_FUNCTION_PJ
Definition: ConfigBA.h:39
@ TIMER_FUNCTION_JJ
Definition: ConfigBA.h:38
@ TIMER_FUNCTION_JX
Definition: ConfigBA.h:41
@ TIMER_GPU_ALLOCATION
Definition: ConfigBA.h:32
@ TIMER_FUNCTION_UP
Definition: ConfigBA.h:45
@ TIMER_OPTIMIZATION
Definition: ConfigBA.h:31
@ TIMER_GPU_UPLOAD
Definition: ConfigBA.h:33
int __num_point_behind
Definition: ConfigBA.h:171
float __data_normalize_median
Definition: ConfigBA.h:144
int __lm_max_iteration
Definition: ConfigBA.h:85
char * __stat_filename
Definition: ConfigBA.h:181
const char * __driver_output
Definition: ConfigBA.h:182
float __lm_damping_auto_switch
Definition: ConfigBA.h:109
double __timer_record[NUM_TIMER]
Definition: ConfigBA.h:184
float __lm_gradient_threshold
Definition: ConfigBA.h:95
float __lm_maximum_damp
Definition: ConfigBA.h:100
bool __focal_normalize
Definition: ConfigBA.h:141
bool __reset_initial_distortion
Definition: ConfigBA.h:117
float BundleTimerGet(int timer)
Definition: ConfigBA.cpp:316
int __cg_max_iteration
Definition: ConfigBA.h:86
int __cg_recalculate_freq
Definition: ConfigBA.h:88
int __bundle_time_budget
Definition: ConfigBA.h:154
int __num_projection_eval
Definition: ConfigBA.h:168
int __num_cpu_thread[NUM_FUNC]
Definition: ConfigBA.h:186
void BundleTimerStart(int timer)
Definition: ConfigBA.cpp:303
bool __multiply_jx_usenoj
Definition: ConfigBA.h:149
float BundleTimerGetNow(int timer=TIMER_OPTIMIZATION)
Definition: ConfigBA.cpp:320
void ResetTemporarySetting()
Definition: ConfigBA.cpp:151
float __lm_minimum_damp
Definition: ConfigBA.h:99
int __bundle_current_mode
Definition: ConfigBA.h:156
void ResetBundleStatistics()
Definition: ConfigBA.cpp:123
bool __save_gradient_norm
Definition: ConfigBA.h:128
bool __no_jacobian_store
Definition: ConfigBA.h:135
float __initial_mse
Definition: ConfigBA.h:158
bool IsTimeBudgetAvailable()
Definition: ConfigBA.cpp:324
bool __warmup_device
Definition: ConfigBA.h:177
int __num_cpu_thread_all
Definition: ConfigBA.h:185
__host__ __device__ float dot(float2 a, float2 b)
Definition: cutil_math.h:1119
int max(int a, int b)
Definition: cutil_math.h:48
Definition: ConfigBA.cpp:44
double timer
Definition: struct.h:215