Enabling split-merge on WebODM

Hi, I’ve read quite a bit but don’t see anything specific about using split-merge in WebODM. From this webpage (https://www.opendronemap.org/2019/05/split-merge-nearing-completion/) it appears that it “Coming soon to a WebODM near you… .”. This was a year ago, is this available in WebODM?

I’ve found a sentence that indicates that is should be, but it is slightly difficult to parse. From here (https://docs.opendronemap.org/large.html) it says:

“Split-merge works in WebODM out of the box as long as the processing nodes support split-merge, by enabling the --split option when creating a new task.”

How can I enable the ‘–split’ option in WebODM? I’ve read through all the text boxes on the options and don’t see anyway to enable the split-merge method.

How do I make sure the processing nodes support split-merge? It seems I need to enable “the --split option when creating a new task.” But where do I type that in? Does that apply when I am only using the one node on my local machine? How do I enable “the --split option” on that one node?

Sorry for asking the same question multiple times, I’m just trying to illustrate what the difficulty is with understanding that part of the documentation for a novice user of ODM.

Thanks!

1 Like

Are you on the most recent version? I’ve attached a screenshot of what you’re looking for. You need split-overlap (the size in meters between overlapping image clusters) and split (the number of images you want to split each cluster into).

Screen Shot 2020-05-16 at 10.53.16

Screen Shot 2020-05-16 at 10.50.18!

2 Likes

Thanks for your reply. I’m again having some trouble parsing a sentence. When you say I “need split-overlap (the size in meters between overlapping image clusters)” I’m a bit confused. If the clusters were overlapping there would not be a distance “between”. Do you mean that “split-overlap” is the amount of overlap between overlapping image clusters?

Currently I’m having to re-download the docker image as I had to increase the size of the docker container, but I’ll look for those settings.

I ended up running

docker-machine rm default
docker-machine create --driver virtualbox --virtualbox-disk-size "40000" default

And then when I ran

git clone https://github.com/OpenDroneMap/WebODM --config core.autocrlf=input --depth 1
cd WebODM
./webodm.sh start

It downloaded a new container. Is that “using the latest version” or do I need to do a

./webodm.sh update

Or do I need to do a

git pull origin master

as well?

As you said, --split-overlap should be the overlap between the submodels. --split defines the size of each submodel.

2 Likes

Any info on my last question?

./webodm.sh down && ./webodm.sh update && ./webodm.sh restart

:point_up_2: will get you the latest, although you probably already have split-merge (it’s been in place since Junish of 2019), but it’s always good to run an update, as we are constantly improving.

Below is a dataset that was run through split-merge. The background image is the resulting aerial. The black outlines are the edges of each of the overlapping submodels, and the different shades of orange correspond to the number of submodels overlapping in a particular area (1 model at the lightest, and 3 models for the most intense orange).

image

To enable split merge, you have to specify your split size in number of images. This should be close to as large a number of images that can process at a time on your machine (make it 20% less than the maximum to be safe). The process then breaks your dataset into chunks approximately this size including overlap between these submodels and then processes them in sequence and stitches them back together.

If you connect a few different processors to a central ClusterODM node, you can get the submodels to process in parallel, but that’s a master class version.

I hope this helps!

1 Like

I found another slight better figure of overlapping submodels:
image

In this case, the + symbols are GCPs that are included, but you can see that for this dataset, we ended up with 4 submodels.

1 Like

Thanks, yes, that does help. Also this (https://docs.opendronemap.org/large.html#) is much more informative than the last time I looked at it.

I’m wondering if there is a way to set the size of the clusters (number of images) if I am using multiple machines with varying capabilities. Is the number of images parameter set on an individual node? or are they all the same?

I’m asking because I have multiple machines available with varying capabilities 8GB - 32GB of RAM per machine and it’d be great to take advantage of all of them while maximizing the capabilities of each.

1 Like

Absolutely. So when you start a node, you can set the capacity of that node, and that will be respected by ClusterODM. There are two flags I would set, --max-concurrency and --max_images:
docker run -p 3000:3000 opendronemap/nodeodm --max_concurrency 12 --max_images 8000&

Max concurrency is going to be ~= the number of cores. Max images (probably the more important one) is RAM dependent.

1 Like

Okay great, thanks! Looking forward to trying this.

1 Like

Yeah, each time I work on a project that needs split-merge, I document my discoveries and recommendations there. I’m working through a larger dataset at the moment and will likely have some additional refinement (such as including the info on setting node sizes for those of us not renting infrastructure).

Feel free to do pull requests against those docs too as you get into this. There are probably some decent gaps left to document, as it’s pretty powerful functionality and use cases matter in how we describe the use. Your use cases may inform others.

1 Like