Ignore row/column blocks structure when using dynamic sparsity
The row/column blocks can be huge when using dynamic sparsity. This
can result in very large memory usage when augmenting the jacobian
with the LM diagonal.
Thanks to Mingsong Dou for reporting this.
Change-Id: I6aa140ceefa98389ae17958f89ca76e0c76f95b8
diff --git a/internal/ceres/dynamic_compressed_row_jacobian_writer.cc b/internal/ceres/dynamic_compressed_row_jacobian_writer.cc
index 2f01617..b46cb79 100644
--- a/internal/ceres/dynamic_compressed_row_jacobian_writer.cc
+++ b/internal/ceres/dynamic_compressed_row_jacobian_writer.cc
@@ -54,8 +54,15 @@
num_effective_parameters,
0);
- CompressedRowJacobianWriter::PopulateJacobianRowAndColumnBlockVectors(
- program_, jacobian);
+ vector<int>* row_blocks = jacobian->mutable_row_blocks();
+ for (int i = 0; i < jacobian->num_rows(); ++i) {
+ row_blocks->push_back(1);
+ }
+
+ vector<int>* col_blocks = jacobian->mutable_col_blocks();
+ for (int i = 0; i < jacobian->num_cols(); ++i) {
+ col_blocks->push_back(1);
+ }
return jacobian;
}