| Documentation | CI | Coverage | Release | DOI |
|---|---|---|---|---|
Julia repository of bundle adjustment problems from the repository Bundle Adjustment in the Large.
If you use BundleAdjustmentModels.jl in your work, please cite using the format given in CITATION.cff.
If you think you found a bug, feel free to open an issue. Focused suggestions and requests can also be opened as issues. Before opening a pull request, please start an issue or a discussion on the topic.
If you want to ask a question not suited for a bug report, feel free to start a discussion here.
using BundleAdjustmentModels, DataFrames
# Get a DataFrame with all problems
df = problems_df()
# Show first few rows
first(df, 5)5×5 DataFrame
Row │ name group nequ nvar nnzj
│ String String Int64 Int64 Int64
─────┼─────────────────────────────────────────────────────────
1 │ problem-16-22106 dubrovnik 167436 66462 2009232
2 │ problem-88-64298 dubrovnik 767874 193686 9214488
3 │ problem-135-90642 dubrovnik 1106672 273141 13280064
4 │ problem-142-93602 dubrovnik 1131216 282084 13574592
5 │ problem-150-95821 dubrovnik 1136238 288813 13634856The DataFrame has the following columns:
- name: Problem name.
- group: Group to which the problem belongs.
- nequ: Number of equations (rows).
- nvar: Number of variables (columns).
- nnzj: Number of non-zero elements in the Jacobian.
You can filter problems based on specific criteria. For instance:
# Select problems with more than 50000 equations and less than 34000 variables
filter_df = filter(pb -> pb.nequ >= 50_000 && pb.nvar <= 34_000, df)Extract the name of the first problem in the filtered DataFrame:
name = filter_df[1, :name]Download the problem artifact for the given name:
path = fetch_ba_name(name)Create a nonlinear least-squares model:
using NLPModels
model = BundleAdjustmentModel(name)You can evaluate residuals and Jacobians using functions from NLPModels.
residuals = residual(model, model.meta.x0)Compute the Jacobian structure:
rows = Vector{Int}(undef, model.nls_meta.nnzj)
cols = Vector{Int}(undef, model.nls_meta.nnzj)
jac_structure_residual!(model, rows, cols)Evaluate Jacobian values:
vals = Vector{Float64}(undef, length(rows))
jac_coord_residual!(model, model.meta.x0, vals)Delete specific or all downloaded artifacts:
delete_ba_artifact!(name) # Delete one artifact
delete_all_ba_artifacts!() # Delete all artifactsSpecial thanks to Célestine Angla for her initial work on this project during her internship.
Licensed under the MPL-2.0 License.