GeoDeep - Lightweight AI Object Detection Library

edit: now integrated in WebODM! AI Object Detection by pierotofy · Pull Request #1589 · OpenDroneMap/WebODM · GitHub


Hey all :wave:,

as part of Idea: Implement raster vision module/plugin for AI object detection · Issue #792 · OpenDroneMap/WebODM · GitHub today I’ve released the first version of GeoDeep, a new lightweight library for performing object detection on GeoTIFFs. While the primary use case is for use in WebODM, it works as a standalone library and I hope it can be useful for other use cases outside of WebODM.

Project: GitHub - uav4geo/GeoDeep: Free and open source library for AI object detection in geospatial rasters. 🚀

Quickstart:

pip install geodeep
geodeep [geotiff] cars → GeoJSON

Comments, feedback, bug reports, all welcome. :clinking_glasses:

18 Likes

One more example:

4 Likes

Tree crown detection:

Not as accurate as cars, but not too bad either!

5 Likes

Nice! Does this require a GPU to use or is this all CPU based?

1 Like

Does not require a GPU (but can use a GPU).

2 Likes

Looks fantastic!

3 Likes

Now integrated directly into WebODM: AI Object Detection by pierotofy · Pull Request #1589 · OpenDroneMap/WebODM · GitHub
:rocket:

7 Likes

a test on Mahe, Seychelles from

There are some errors like boats or buildings with roof steel but works well ! 926 cars in 340 hectares

4 Likes

Wow really great! just updated my WebODM and I saw it’s activated. Very easy to use from the (2D) viewer.

Also looking forward to train / add/ share own models.

7 Likes

Adding support for multi-class models:

8 Likes

How could we help the training? I have some examples with animals and a lot with trees or ruins.

2 Likes

Great work!
I wonder if this functionality will be integrated directly into NodeODM? (Specifically, PyODM. I’ll create the appropriate PRs for the PyODM project to integrate the API requests if needed)

Also, do you have any list of new objects you plan to add in the future?
I am interested in detecting some military objects. For example, “trenches”, “armored vehicle”, “tank”, “armored car” and so on.

Even if you are not interested in training code with such detections, it would be nice to have such functionality at least in ODM

I’ll write instructions on training in the upcoming days.

As these kind of objects could be very well misused for offensive military operations, I will not consider adding them. Also while I cannot stop others from using the software for such uses, I would encourage others to think of the ethics and effects that AI software could have on people.

7 Likes

Thank you so much for highlighting the importance of this. I know a lot of people realize how powerful a lot of open source things ODM are, but never stop to think what limits they should impose on themselves.

3 Likes

One more screenshot:

Find just the tennis courts:

geodeep ortho.tif aerovision --classes tennis-court

2 Likes

Can also inspect models via a new utility:

geodeep-inspect cars

det_type: YOLO_v5_or_v7_default
det_conf: 0.3
det_iou_thresh: 0.8
det_classes: []
resolution: 10.0
class_names: {'0': 'car'}
model_type: Detector
tiles_overlap: 10.0
tiles_size: 640
input_shape: [1, 3, 640, 640]
input_name: images
1 Like

Hi Pierotofy, this is some really neat work, thanks!

I have been fiddling around on this side with a python/panda3d/jsbsim flight simulator idea. I am fetching satellite tiles and terrain dem data, draping the image data over the top of the 3d mesh and the results come out looking rather nice. Kind of like google earth 10-15 years ago? But it’s python + open-source, and I’m writing it from scratch because it’s interesting and fun for me. Here’s an example screenshot out in utah somewhere:

For a while I have been thinking it would be cool to scan the sat images for trees and buildings to add some 3d object interest to the scene so it’s not just flat when you get down to low altitudes.

Question: is it possible to adjust the code to process plain jpg files and output pixel coordinates? (and then I can do the geo math after that.)

Also, if you are playing around with training up new models, I’d love to experiment with one that could detect houses or small building foot prints, but I’d be happy with just detecting trees for starters.

I probably could do the math up front to convert my jpgs to geotiff, but that seems like a whole lot of extra cpu/disk churning. But I don’t understand all the ins and outs of how you are doing all this, so maybe it’s not possible to process simple jpgs?

(Oh, my project is here: GitHub - NorthStarUAS/Simulator: Flight dynamics simulation, visualization, and logging. … not well documented, still trying to spin up the basic functionality …)

Thanks again!

Curt.

2 Likes

Cool project! You can certainly adapt GeoDeep to process normal images. You’d need to remove the part that reads the GeoTIFF tiles and call execute directly: GeoDeep/geodeep/geodeep.py at main · uav4geo/GeoDeep · GitHub, perhaps some other modifications, feel free to fork it.

5 Likes

Could this be modified for multispectral imagery? Or elevation layers?

2 Likes

Yes to both.

3 Likes