Object detection in satellite imagery: Which approach?

Huge FastAi fan, first time poster.

Project goal: I’m using aerial imagery to identify every surface parking lot in US cities. I want to create a database of the locations and bounding boxes of each parking lot.

Data sources:

  • Imagery source: ~1m resolution NAIP imagery over a handful of US cities
  • Training data: OpenStreetMaps has an incomplete set of parking lot areas identified. In San Francisco, for example, they have ~4000 identified parking lots. I want to find the rest of them.

Question

I am considering two approaches and wanted to get people’s input:

Approach 1) Divide the imagery into tiles (e.g. 64x64 pixels). Use a CNN to identify which pixels in each tile are parking lot pixels based on the training data.

Approach 2) Segment the objects in the imagery (e.g. buildings, roads, parking lots) to create superpixel representations of the object. I’ve used a Felzenzwalb segmentation via SKImage. Use a random forest on features of the superpixels as my model.

This approach is inspired by this excellent post: object based image analysis

The challenge

Approach 1 challenge: All CNN approaches I’m familiar with have a categorial output - e.g. dog or cat. The output I’d be looking for is a binary “is parking?” for each pixel in the 64x64 image. How can I have a CNN output a 64x64 output rather than a single category for the tile? Also, which model would be best for this application (e.g. VGG16)?

Approach 2 challenge: The superpixels are varying sizes and asymmetric. This means a CNN won’t work because it accepts rectangular images of the same size. I’m not sure what model or features to use to describe the superpixels. The post above suggests a Random Forest as the model but doesn’t give guidance on which features to use for the Random Forest.

Any guidance on how to approach this problem?

4 Likes

Take a look at MaskRCNN. There is a keras implementation which is exceptionally well documented with example notebooks and works! Not found a functioning pytorch implementation but I am working on one.

2 Likes

I have no experience related with your project, but it’s very interesting.

If you want, keep us posted about your progresses, I think many of us would be interested. Thanks! :slight_smile:

Seems like U-nets might be good for this purpose. They are used for image segmentation and can be used for binary and multi-class problems.

See:
https://arxiv.org/abs/1505.04597
https://arxiv.org/abs/1801.05746

Have you gone through the submissions for the Kaggle DSTL competition? The task reminds me of that challenge.

Hi - I know this is several months after the original post, but I thought I’d check in on this post to see if you were successful. If so, were you able to leverage the fastai library for this project? I am in the early stages of developing a deep learning project with my brother who is an Architect / Urban Planner in Flint, MI. One thing I want to look at is identifying parking lots (as well as underutilized land) from satellite imagery. I’ve been browsing the forums looking for similar projects and found this one. I can’t believe I found something so similar. If you have any tips or advice, I’m all ears.

Cheers,

Charles

Hi, I have a very similar problem and was planning on using Unet with the fastai to practice. I have labeled some of the data I have but I keep getting a Zero division error. Do you have any idea what it could be?

Thank you