Point cloud classification


#1

Hi all,

I read in another thread that ODM can classify - Ground vs non-ground points in a point cloud.

Wanted to explore that feature and ran below command:-
sudo ./run.sh --images ‘/home/garlac/ODM_input_datsets/MLA_3Nov’ --use-3dmesh --time --dtm --pc-classify ‘pmf’

No. of Images were 365, 64 Gb RAM and swap of 110 Gb.
However, I ran into below error at pdal stage:

[92m[DEBUG] running pdal pipeline -i /tmp/tmpUnTBcH.json > /dev/null 2>&1e[0m
Traceback (most recent call last):
File “/home/garlac/ODM_master/run.py”, line 47, in
plasm.execute(niter=1)
File “/home/garlac/ODM_master/scripts/odm_dem.py”, line 112, in process
max_workers=args.max_concurrency
File “/home/garlac/ODM_master/opendm/dem/commands.py”, line 38, in create_dems
fouts = list(e.map(create_dem_for_radius, radius))
File “/usr/local/lib/python2.7/dist-packages/loky/process_executor.py”, line 794, in _chain_from_iterable_of_lists
for element in iterable:
File “/usr/local/lib/python2.7/dist-packages/loky/_base.py”, line 589, in result_iterator
yield future.result()
File “/usr/local/lib/python2.7/dist-packages/loky/_base.py”, line 433, in result
return self.__get_result()
File “/usr/local/lib/python2.7/dist-packages/loky/_base.py”, line 381, in __get_result
raise self._exception
Exception: Child returned 137

This was caused directly by
“”"
Traceback (most recent call last):
File “/usr/local/lib/python2.7/dist-packages/loky/process_executor.py”, line 418, in _process_worker
r = call_item()
File “/usr/local/lib/python2.7/dist-packages/loky/process_executor.py”, line 272, in call
return self.fn(*self.args, **self.kwargs)
File “/usr/local/lib/python2.7/dist-packages/loky/process_executor.py”, line 337, in _process_chunk
return [fn(*args) for args in chunk]
File “/home/garlac/ODM_master/opendm/dem/commands.py”, line 92, in create_dem
pdal.run_pipeline(json, verbose=verbose)
File “/home/garlac/ODM_master/opendm/dem/pdal.py”, line 232, in run_pipeline
out = system.run(’ ‘.join(cmd) + ’ > /dev/null 2>&1’)
File “/home/garlac/ODM_master/opendm/system.py”, line 34, in run
raise Exception(“Child returned {}”.format(retcode))
Exception: Child returned 137

Looks like its because of memory issues since RAM usage while error occurred was almost 170 GB.

Is there any way, I can reduce the memory usage or tweak parameters to successfully run point cloud classification?


#2

Set --dem-resolution to 4x your orthophoto résolution, e.g. 20, or update to the latest master(if you’re running natively) and it will autocalculate this resolution for you.


#3

I should say this is failing not because of point cloud classification but due to DEM . The fix went in yesterday: https://github.com/OpenDroneMap/ODM/pull/915


#4

Thank you. Will pull the latest master and try it.


#5

With the latest master, you should require no flags. And if you want to save time, delete your odm_dem directory and rerun-from thatbstep.