Road Semantic Segmentation with Full Convolutional Network on Kitti dataset

Road surface segmentation

This is project 2 of Term 3 of Udacity Self-Driving Car Nanodegree. The goal of the project is to classify each pixel on the image if it is road or not. Such tasks are called semantic segmentation of the image.

Full Convolutional Network (FCN)

In this project I use Full Convolutional Network. This network consist from convolutional part and deconvolutional part. For convolutional part I use pretrained VGG-16 with freezed weights. This network have several features:

  • 1x1 convolutions. Fully connected layers replaced with mathematically same operation of 1x1 convolution that saves spatial information
  • Transposed convolutions. Convolutions that makes layers bigger.
  • Skip connections. Connections that passes outputs from some of layers from convolutional part into similar layers from deconvolutional parts. This is needed to save information about some small features.

Whole architecure looks like this:

FCN architecture

Setup

Frameworks and Packages

Make sure you have the following is installed:

Dataset

Download the Kitti Road dataset from here. Extract the dataset in the data folder. This will create the folder data_road with all the training a test images.

Run

Run the following command to run the project:

python main.py

type

python main.py -h

for details