| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | #if !defined(SPARSE_BUNDLE_CU_H) |
| | #define SPARSE_BUNDLE_CU_H |
| |
|
| | #include "ConfigBA.h" |
| | #include "CuTexImage.h" |
| | #include "DataInterface.h" |
| |
|
| | namespace pba { |
| |
|
| | class SparseBundleCU : public ParallelBA, public ConfigBA { |
| | protected: |
| | int _num_camera; |
| | int _num_point; |
| | int _num_imgpt; |
| | CameraT* _camera_data; |
| | float* _point_data; |
| | |
| | const float* _imgpt_data; |
| | const int* _camera_idx; |
| | const int* _point_idx; |
| | const int* _focal_mask; |
| | std::vector<float> _imgpt_datax; |
| | |
| | float _projection_sse; |
| | protected: |
| | CuTexImage _cuCameraData; |
| | CuTexImage _cuCameraDataEX; |
| | CuTexImage _cuPointData; |
| | CuTexImage _cuPointDataEX; |
| | CuTexImage _cuMeasurements; |
| | CuTexImage _cuImageProj; |
| | CuTexImage _cuJacobianCamera; |
| | CuTexImage _cuJacobianPoint; |
| | CuTexImage _cuJacobianCameraT; |
| | CuTexImage _cuProjectionMap; |
| | CuTexImage _cuPointMeasurementMap; |
| | CuTexImage _cuCameraMeasurementMap; |
| | CuTexImage _cuCameraMeasurementList; |
| | CuTexImage _cuCameraMeasurementListT; |
| |
|
| | |
| | CuTexImage _cuBufferData; |
| | |
| | CuTexImage _cuBlockPC; |
| | CuTexImage _cuVectorSJ; |
| |
|
| | |
| | CuTexImage _cuVectorJtE; |
| | CuTexImage _cuVectorJJ; |
| | CuTexImage _cuVectorJX; |
| | CuTexImage _cuVectorXK; |
| | CuTexImage _cuVectorPK; |
| | CuTexImage _cuVectorZK; |
| | CuTexImage _cuVectorRK; |
| |
|
| | |
| | protected: |
| | int _num_imgpt_q; |
| | float _weight_q; |
| | CuTexImage _cuCameraQList; |
| | CuTexImage _cuCameraQMap; |
| | CuTexImage _cuCameraQMapW; |
| | CuTexImage _cuCameraQListW; |
| |
|
| | protected: |
| | bool ProcessIndexCameraQ(std::vector<int>& qmap, std::vector<int>& qlist); |
| | void ProcessWeightCameraQ(std::vector<int>& cpnum, std::vector<int>& qmap, |
| | std::vector<float>& qmapw, |
| | std::vector<float>& qlistw); |
| |
|
| | protected: |
| | int GetParameterLength(); |
| | int InitializeBundle(); |
| | int ValidateInputData(); |
| | void ReleaseAllocatedData(); |
| | bool InitializeStorageForCG(); |
| | bool InitializeBundleGPU(); |
| | bool TransferDataToGPU(); |
| | void TransferDataToHost(); |
| | void DenormalizeData(); |
| | void NormalizeData(); |
| | void NormalizeDataF(); |
| | void NormalizeDataD(); |
| | void DebugProjections(); |
| | void RunDebugSteps(); |
| | bool CheckRequiredMem(int fresh = 1); |
| | bool CheckRequiredMemX(); |
| | void ReserveStorage(size_t ncam, size_t npt, size_t nproj); |
| | void ReserveStorageAuto(); |
| |
|
| | protected: |
| | float EvaluateProjection(CuTexImage& cam, CuTexImage& point, |
| | CuTexImage& proj); |
| | float EvaluateProjectionX(CuTexImage& cam, CuTexImage& point, |
| | CuTexImage& proj); |
| | float UpdateCameraPoint(CuTexImage& dx, CuTexImage& cuImageTempProj); |
| | float SaveUpdatedSystem(float residual_reduction, float dx_sqnorm, |
| | float damping); |
| | float EvaluateDeltaNorm(); |
| | void EvaluateJacobians(bool shuffle = true); |
| | void PrepareJacobianNormalization(); |
| | void ComputeJtE(CuTexImage& E, CuTexImage& JtE, int mode = 0); |
| | void ComputeJX(CuTexImage& X, CuTexImage& JX, int mode = 0); |
| | void ComputeDiagonal(CuTexImage& JJ, CuTexImage& JJI); |
| | void ComputeBlockPC(float lambda, bool dampd = true); |
| | void ApplyBlockPC(CuTexImage& v, CuTexImage& pv, int mode = 0); |
| | int SolveNormalEquationPCGB(float lambda); |
| | int SolveNormalEquationPCGX(float lambda); |
| | int SolveNormalEquation(float lambda); |
| | void AdjustBundleAdjsutmentMode(); |
| | void NonlinearOptimizeLM(); |
| | void BundleAdjustment(); |
| | void RunTestIterationLM(bool reduced); |
| | void SaveBundleRecord(int iter, float res, float damping, float& g_norm, |
| | float& g_inf); |
| | |
| | void SaveNormalEquation(float lambda); |
| | void RunProfileSteps(); |
| | void WarmupDevice(); |
| |
|
| | public: |
| | virtual float GetMeanSquaredError(); |
| | virtual void SetCameraData(size_t ncam, CameraT* cams); |
| | virtual void SetPointData(size_t npoint, Point3D* pts); |
| | virtual void SetProjection(size_t nproj, const Point2D* imgpts, |
| | const int* point_idx, const int* cam_idx); |
| | virtual void SetFocalMask(const int* fmask, float weight); |
| | virtual int RunBundleAdjustment(); |
| |
|
| | |
| | virtual void AbortBundleAdjustment() { __abort_flag = true; } |
| | virtual int GetCurrentIteration() { return __current_iteration; } |
| | virtual void SetNextTimeBudget(int seconds) { |
| | __bundle_time_budget = seconds; |
| | } |
| | virtual void SetNextBundleMode(BundleModeT mode) { |
| | __bundle_mode_next = mode; |
| | } |
| | virtual void SetFixedIntrinsics(bool fixed) { __fixed_intrinsics = fixed; } |
| | virtual void EnableRadialDistortion(DistortionT type) { |
| | __use_radial_distortion = type; |
| | } |
| | virtual void ParseParam(int narg, char** argv) { |
| | ConfigBA::ParseParam(narg, argv); |
| | } |
| | virtual ConfigBA* GetInternalConfig() { return this; } |
| |
|
| | public: |
| | SparseBundleCU(int device); |
| | size_t GetMemCapacity(); |
| | }; |
| |
|
| | } |
| |
|
| | #endif |
| |
|