Problem

This is a Kaggle instance segmentation problem (https://www.kaggle.com/c/airbus-ship-detection#description). In the problem, I am trying to build a model to detects all ships in satellite images as quickly as possible.

Shipping traffic is growing fast. More ships increase the chances of infractions at sea like environmentally devastating ship accidents, piracy, illegal fishing, drug trafficking, and illegal cargo movement. This has compelled many organizations, from environmental protection agencies to insurance companies and national government authorities, to have a closer watch over the open seas. Airbus offers comprehensive maritime monitoring services by building a meaningful solution for wide coverage, fine details, intensive monitoring, premium reactivity and interpretation response. Combining its proprietary-data with highly-trained analysts, they help to support the maritime industry to increase knowledge, anticipate threats, trigger alerts, and improve efficiency at sea. A lot of work has been done over the last 10 years to automatically extract objects from satellite images with significative results but no effective operational effects. Now Airbus is turning to Kagglers to increase the accuracy and speed of automatic ship detection.

Data

The data are provided by Kaggle. The data are 192,555 satellite images (in .jpg format) of different size and different resolution.

Validation Data: 20% of the data are used to validate the model.

Data augmentation: Because the images are satellite images, rotate the image by arbitrary angle can help to increase the training accuracy. See below.

Date exploratory analysis

Model

In this problem, because most image (~80%) contains no ships, it’s very important to select those images without any ships at the begining. So, my strategy is the following:

  • 1. Image classification: build a classifier to detect if a image has any ships.
  • 2. Image segmentation: Feed the image that contains image detected by the classifier to Mask R-CNN.
  • Image classification

    The image classification is built upon fast.ai framework. I use the network structure as the same as Resnext50 (a famous image classification network). Instead of training from scratch, I use the network structure that were pre-trained on the ImageNet dataset.

    Image segmentation

    There are several deep learning models that works with objects detection such as YOLO, R-CNN, Fast R-CNN, Faster R-CNN. Recently there is a nice paper on object instance segmentation (https://arxiv.org/abs/1703.06870) called Mask R-CNN. It’s has been proved works very well for object detection. The image segmentation model is built using TensorFlow framework. Every image which detected has ships are feed into the Mask-RCNN network to generate a mask for every individual ship.

    Result

    Achieved an overall IoU score of 0.84475, ranked top 10%.

    Conclusions

    This is a very interesting Kaggle competition. It involves image classification, object detection and object segmentation. I learned use different frame works for deep learning and computer vision (such as fastai, TensorFlow). If I had more time to do the projects, I would like to add cross validation, training the model longer and try more different hyperparameters to make the model more robust.