ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
ConfigBA.h
Go to the documentation of this file.
1 // File: ConfigBA.h
3 // Author: Changchang Wu (ccwu@cs.washington.edu)
4 // Description : 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 #ifndef CONFIG_BA_H
22 #define CONFIG_BA_H
23 #include <vector>
24 
25 namespace pba {
26 
27 class ConfigBA {
28  protected:
29  enum {
48  FUNC_JX = 0,
66  NUM_FUNC
67  };
68  class TimerBA {
69  ConfigBA* _config;
70  int _timer;
71 
72  public:
73  TimerBA(ConfigBA* config, int timer) {
74  (_config = config)->BundleTimerStart(_timer = timer);
75  }
76  TimerBA(ConfigBA* config, int timer, bool) {
77  (_config = config)->BundleTimerSwitch(_timer = timer);
78  }
79  ~TimerBA() { _config->BundleTimerSwitch(_timer); }
80  };
81  friend class TimerBA;
82 
83  public:
85  int __lm_max_iteration; //(default 50)
86  int __cg_max_iteration; //(default 100)
87  int __cg_min_iteration; //(default 10)
88  int __cg_recalculate_freq; //(default 0)
89  bool __accurate_gain_ratio; //(default true) accurate gain ratio for
90  //approximate solutions
91 
93  float __lm_delta_threshold; //(default 1e-6)|dx|_2, I use absolute (not
94  //relative) change
95  float __lm_gradient_threshold; //(default 1e-10)|Jt * e|_inf
96  float __lm_mse_threshold; //(default 0.25) quit if MSE is equal to or smaller
97  //than this
98  float __lm_initial_damp; //(default 0.001)initial damping factor
99  float __lm_minimum_damp; //(default 1e-10)minimum damping factor
101  float __cg_norm_threshold; //(default 0.1)terminate CG if norm ratio is less
102  //than threshold
103  float __cg_norm_guard; //(default 1.0)abort cg when norm increases to
106 
108  bool __lm_check_gradient; //(default false) check g_inf for convergence
110  bool __lm_use_diagonal_damp; //(default true)use (Jt*J + lambda * diag(Jt*J))
111  //= Jt * e
112  // or use (Jt*J + lambda * I) = Jt * e
113  bool __fixed_intrinsics; //(default false) set true for calibrated camera
114  //system
115  int __use_radial_distortion; //(default 0, 1 for projection distortion, 2 for
116  //measurement distortion)
117  bool __reset_initial_distortion; //(default false) reset the initial
118  //distortio to 0
119 
121  int __verbose_level; //(default 2) how many messages to print out
122  bool __abort_flag; //(default false)abort the bundle adjustment loop if set
123  //true
124  bool __verbose_cg_iteration; //(default false)print out details of Conjugate
125  //Gradients
126  bool __verbose_function_time; //(default false)print timing of some key
127  //functions
128  bool __save_gradient_norm; //(default false)save |Jt * e|_2 of each iteration
129  bool __verbose_allocation; //(default false)whether print out allocation
130  //details
131  bool __verbose_sse; //(default false) show mse or sse
132 
134  bool __jc_store_transpose; //(default true) whether store transpose of JC
135  bool __no_jacobian_store; //(default false) whether use memory saving mode
136  bool __jc_store_original; //(default true) whether store original JC
137 
139  bool __jacobian_normalize; //(default true) scaling the jacobians according
140  //to initial jacobians
141  bool __focal_normalize; //(default true) data normalization
142  bool __depth_normalize; //(default true) data normalization
147 
148  protected:
149  bool __multiply_jx_usenoj; // for debug purpose
150  protected:
159  float __final_mse;
182  const char* __driver_output;
183  std::vector<float> __bundle_records;
187 
188  protected:
189  ConfigBA();
191  void ResetTemporarySetting();
192  void ResetBundleStatistics();
193  void PrintBundleStatistics();
194  void SaveBundleStatistics(int ncam, int npt, int nproj);
196  void BundleTimerStart(int timer);
197  void BundleTimerSwitch(int timer);
198  float BundleTimerGet(int timer);
199  void BundleTimerSwap(int timer1, int timer2);
202  void SaveBundleRecord(int iter, float res, float damping, float gn, float gi);
203  bool IsTimeBudgetAvailable();
204  double MyClock();
205 
206  public:
207  void ParseParam(int argc, char** argv);
208 
209  public:
210  // the following are to be called after finishing BA
211  const char* GetOutputParam() { return __driver_output; }
212  float GetInitialMSE() { return __initial_mse; }
213  float GetFinalMSE() { return __final_mse; }
215  return __timer_record[timer];
216  }
222 };
223 
224 } // namespace pba
225 
226 #endif
TimerBA(ConfigBA *config, int timer, bool)
Definition: ConfigBA.h:76
TimerBA(ConfigBA *config, int timer)
Definition: ConfigBA.h:73
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
float GetInitialMSE()
Definition: ConfigBA.h:212
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 GetIterationsLM()
Definition: ConfigBA.h:217
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
int GetBundleReturnCode()
Definition: ConfigBA.h:220
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 GetCurrentDevice()
Definition: ConfigBA.h:219
int __num_jacobian_eval
Definition: ConfigBA.h:169
void BundleTimerSwitch(int timer)
Definition: ConfigBA.cpp:307
int GetActiveDevice()
Definition: ConfigBA.h:221
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
const char * GetOutputParam()
Definition: ConfigBA.h:211
float GetFinalMSE()
Definition: ConfigBA.h:213
@ TIMER_PREPROCESSING
Definition: ConfigBA.h:34
@ TIMER_FUNCTION_BC
Definition: ConfigBA.h:43
@ TIMER_FUNCTION_MP
Definition: ConfigBA.h:44
@ TIMER_LM_ITERATION
Definition: ConfigBA.h:37
@ TIMER_PROFILE_STEP
Definition: ConfigBA.h:46
@ TIMER_GPU_DOWNLOAD
Definition: ConfigBA.h:35
@ TIMER_FUNCTION_JTE
Definition: ConfigBA.h:42
@ FUNC_JJ_JCO_JCT_JP
Definition: ConfigBA.h:54
@ TIMER_FUNCTION_PJ
Definition: ConfigBA.h:39
@ TIMER_CG_ITERATION
Definition: ConfigBA.h:36
@ TIMER_FUNCTION_JJ
Definition: ConfigBA.h:38
@ FUNC_JJ_JCO_JP
Definition: ConfigBA.h:55
@ TIMER_FUNCTION_JX
Definition: ConfigBA.h:41
@ TIMER_FUNCTION_DD
Definition: ConfigBA.h:40
@ FUNC_JJ_JCT_JP
Definition: ConfigBA.h:56
@ 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
int GetIterationsCG()
Definition: ConfigBA.h:218
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
double GetBundleTiming(int timer=TIMER_OVERALL)
Definition: ConfigBA.h:214
bool IsTimeBudgetAvailable()
Definition: ConfigBA.cpp:324
bool __warmup_device
Definition: ConfigBA.h:177
int __recent_cg_status
Definition: ConfigBA.h:173
int __num_cpu_thread_all
Definition: ConfigBA.h:185
Definition: ConfigBA.cpp:44
double timer
Definition: struct.h:215