Skip to content

FPCFilter - v0.2 - double free or corruption (out) [docker] #4

@disarticulate

Description

@disarticulate

I have a container in Docker running NodeODM:

[INFO] Initializing ODM 3.5.6 - Mon Aug 25 06:44:15 2025
[INFO] ==============
[INFO] 3d_tiles: False
[INFO] align: None
[INFO] auto_boundary: False
[INFO] auto_boundary_distance: 0
[INFO] bg_removal: False
[INFO] boundary: {}
[INFO] build_overviews: True
[INFO] camera_lens: brown
[INFO] cameras: {}
[INFO] cog: True
[INFO] copy_to: None
[INFO] crop: 3
[INFO] dem_decimation: 1
[INFO] dem_euclidean_map: False
[INFO] dem_gapfill_steps: 0
[INFO] dem_resolution: 8.0
[INFO] dsm: True
[INFO] dtm: True
[INFO] end_with: odm_postprocess
[INFO] fast_orthophoto: False
[INFO] feature_quality: medium
[INFO] feature_type: sift
[INFO] force_gps: True
[INFO] gcp: /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/gcp/gcp_list.txt
[INFO] geo: /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/gcp/geo.txt
[INFO] gltf: False
[INFO] gps_accuracy: 1.0
[INFO] gps_z_offset: 0
[INFO] ignore_gsd: False
[INFO] matcher_neighbors: 8
[INFO] matcher_order: 2
[INFO] matcher_type: flann
[INFO] max_concurrency: 28
[INFO] merge: all
[INFO] mesh_octree_depth: 8
[INFO] mesh_size: 200000
[INFO] min_num_features: 10000
[INFO] name: 060bc581-2363-4a30-bfba-e2fe3db50c56
[INFO] no_gpu: False
[INFO] optimize_disk_space: False
[INFO] orthophoto_compression: DEFLATE
[INFO] orthophoto_cutline: True
[INFO] orthophoto_kmz: False
[INFO] orthophoto_no_tiled: False
[INFO] orthophoto_png: False
[INFO] orthophoto_resolution: 2.0
[INFO] pc_classify: True
[INFO] pc_copc: True
[INFO] pc_csv: False
[INFO] pc_ept: True
[INFO] pc_filter: 5.0
[INFO] pc_las: False
[INFO] pc_quality: high
[INFO] pc_rectify: True
[INFO] pc_sample: 0.05
[INFO] pc_skip_geometric: True
[INFO] primary_band: auto
[INFO] project_path: /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56
[INFO] radiometric_calibration: none
[INFO] rerun: None
[INFO] rerun_all: False
[INFO] rerun_from: ['dataset', 'split', 'merge', 'opensfm', 'openmvs', 'odm_filterpoints', 'odm_meshing', 'mvs_texturing', 'odm_georeferencing', 'odm_dem', 'odm_orthophoto', 'odm_report', 'odm_postprocess']
[INFO] rolling_shutter: False
[INFO] rolling_shutter_readout: 0
[INFO] sfm_algorithm: triangulation
[INFO] sfm_no_partial: False
[INFO] skip_3dmodel: False
[INFO] skip_band_alignment: False
[INFO] skip_orthophoto: False
[INFO] skip_report: False
[INFO] sky_removal: False
[INFO] sm_cluster: True
[INFO] sm_no_align: False
[INFO] smrf_scalar: 1.25
[INFO] smrf_slope: 0.15
[INFO] smrf_threshold: 0.5
[INFO] smrf_window: 18.0
[INFO] split: 999999
[INFO] split_image_groups: None
[INFO] split_overlap: 150
[INFO] texturing_keep_unseen_faces: False
[INFO] texturing_single_material: False
[INFO] texturing_skip_global_seam_leveling: False
[INFO] tiles: False
[INFO] use_3dmesh: True
[INFO] use_exif: False
[INFO] use_fixed_camera_params: False
[INFO] use_hybrid_bundle_adjustment: False
[INFO] video_limit: 500
[INFO] video_resolution: 4000
[INFO] ==============
[INFO] Running dataset stage
[INFO] Loading dataset from: /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/images
[INFO] Loading 1639 images
[INFO] Found image geolocation file
[INFO] Updated 1639 image positions
[INFO] Forcing GPS DOP to 1.0 for all images
[INFO] Setting camera lens to brown for all images
[INFO] Wrote images database: /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/images.json
[INFO] Found 1639 usable images
[INFO] 19 GCP points will be used for georeferencing
[INFO] Generated coords file from GCP: WGS84 UTM 15N
[INFO] Wrote /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_georeferencing/odm_georeferencing_model_geo.txt
[INFO] Finished dataset stage
[INFO] Running split stage
[INFO] Normal dataset, will process all at once.
[INFO] Finished split stage
[INFO] Running merge stage
[INFO] Normal dataset, nothing to merge.

[crash_log.txt](https://github.com/user-attachments/files/21973258/crash_log.txt)

[INFO] Finished merge stage
[INFO] Running opensfm stage
[INFO] Maximum photo dimensions: 9504px
[INFO] Photo dimensions for feature extraction: 1188px
[WARNING] Georeferenced reconstruction, ignoring --matcher-order
[INFO] Checking for GPU as using SIFT for extracting features
[INFO] nvidia-smi detected
[INFO] popsift can handle texture size 1188x792
[INFO] Using GPU for extracting SIFT features
[INFO] Altitude data detected, enabling it for GPS alignment
[INFO] ['use_exif_size: no', 'flann_algorithm: KDTREE', 'feature_process_size: 1188', 'feature_min_frames: 10000', 'processes: 28', 'matching_gps_neighbors: 8', 'matching_gps_distance: 0', 'matching_graph_rounds: 0', 'optimize_camera_parameters: yes', 'reconstruction_algorithm: triangulation', 'undistorted_image_format: tif', 'bundle_outlier_filtering_type: AUTO', 'sift_peak_threshold: 0.066', 'align_orientation_prior: vertical', 'triangulation_type: ROBUST', 'retriangulation_ratio: 2', 'camera_projection_type: BROWN', 'matcher_type: FLANN', 'feature_type: SIFT_GPU', 'use_altitude_tag: yes', 'align_method: auto', 'local_bundle_radius: 0', 'bundle_use_gcp: yes', 'bundle_compensate_gps_bias: yes']
[...]

it crashes on the FPCFilter - v0.2:

[INFO] running "/code/SuperBuild/install/bin/FPCFilter" --input "/var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/opensfm/undistorted/openmvs/scene_dense_dense_filtered.ply" --output "/var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud.ply" --concurrency 28 --radius 0.05 --meank 16 --std 5.0 --stats "/var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud_stats.json"
*** FPCFilter - v0.2 ***

?> Parameters:
input = /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/opensfm/undistorted/openmvs/scene_dense_dense_filtered.ply
output = /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud.ply
stats = /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud_stats.json
std = 5
radius = 0.05
meanK = 16
boundary = auto
concurrency = 28
verbose = no

-> Setting num_threads to 28

?> Skipping crop

-> Sampling

double free or corruption (out)
Aborted (core dumped)

===== Dumping Info for Geeks (developers need this to fix bugs) =====
Child returned 134
Traceback (most recent call last):
File "/code/stages/odm_app.py", line 82, in execute
self.first_stage.run()
File "/code/opendm/types.py", line 470, in run
self.next_stage.run(outputs)
File "/code/opendm/types.py", line 470, in run
self.next_stage.run(outputs)
File "/code/opendm/types.py", line 470, in run
self.next_stage.run(outputs)
[Previous line repeated 2 more times]
File "/code/opendm/types.py", line 449, in run
self.process(self.args, outputs)
File "/code/stages/odm_filterpoints.py", line 52, in process
point_cloud.filter(inputPointCloud, tree.filtered_point_cloud, tree.filtered_point_cloud_stats,
File "/code/opendm/point_cloud.py", line 108, in filter
system.run('"%s" %s' % (context.fpcfilter_path, " ".join(args)))
File "/code/opendm/system.py", line 112, in run
raise SubprocessException("Child returned {}".format(retcode), retcode)
opendm.system.SubprocessException: Child returned 134

===== Done, human-readable information to follow... =====

[ERROR] Uh oh! Processing stopped because of strange values in the reconstruction. This is often a sign that the input data has some issues or the software cannot deal with it. Have you followed best practices for data acquisition? See https://docs.opendronemap.org/flying/

However, when I shell into the running container, it succeeds:

"/code/SuperBuild/install/bin/FPCFilter" --input "/var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/opensfm/undistorted/openmvs/scene_dense_dense_filtered.ply" --output "/var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud.ply" --concurrency 28 --radius 0.05 --meank 16 --std 5.0 --stats "/var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud_stats.json"
 *** FPCFilter - v0.2 ***

?> Parameters:
        input = /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/opensfm/undistorted/openmvs/scene_dense_dense_filtered.ply
        output = /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud.ply
        stats = /var/www/data/060bc581-2363-4a30-bfba-e2fe3db50c56/odm_filterpoints/point_cloud_stats.json
        std = 5
        radius = 0.05
        meanK = 16
        boundary = auto
        concurrency = 28
        verbose = no

 -> Setting num_threads to 28

 ?> Skipping crop

 -> Sampling

 ?> Done in 84.27s

 -> Statistical filtering

 -> Spacing estimation completed (0.04 meters)

 ?> Done in 19.72s

 -> Writing output

 ?> Done in 4.908s

 ?> Pipeline done in 108.9s

Which seems to rule out Docker limits on memory or cpu, as there shouldn't be a difference between the container running itself and running a shell inside the container. It's possible this is a ODM issue, but unclear.

crash_log.txt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions