/Self-Driving-Cars-Term1-Project5

Repository for the project #5, vehicle ( object ) detection and tracking for Term 1 of Udacity's Self Driving Car Course

Primary LanguageJupyter Notebook

Read me for Self-Driving-Cars-Term1-Project5 - Vehicle Detection and Tracking


  • A submission by Jai Lad

Table of contents





Objective(s) :

The goals / steps of this project are the following:

  • Perform a Histogram of Oriented Gradients (HOG) feature extraction on a labeled training set of images and train a classifier Linear SVM classifier
  • Optionally, you can also apply a color transform and append binned color features, as well as histograms of color, to your HOG feature vector.
  • Implement a sliding-window technique and use your trained classifier to search for vehicles in images.
  • Run your pipeline on a video stream and create a heat map of recurring detections frame by frame to reject outliers and follow detected vehicles.
  • Estimate a bounding box for vehicles detected.



Key File(s) :

  • writeup.md - Report writeup file.
  • output_images folder - Folder with various images as generated from the pipeline.
  • test_video - Video of the output from the pipeline for the project video. Alternative Youtube link is here.
  • pipeline_video - Video of the output from the pipeline for the project video. Alternative Youtube link is here.
  • project.ipynb - Jupyter notebook used to implement the pipeline.
  • trained models - Folder with a few trained Models which were generated from the training pipeline



Challenges and Comments :

  • The process of finding optimal detection parameters was very manual. I would like to find a better way to automate this process. One good aspect of this process was that it really drives home the point of feature engineering capabilities of neural network(s), as I reflect on the process of crafting the 8000 column+ feature vector for this project.

  • Jupyter environment was running out of memory easily when I tried to train the model with the entire set of available features ( length of a single feature > 8000 ), and when I tried to use all available samples. Therefore, for the longest time, I struggled with training the pipeline with the complete set of features and samples. This was resolved by migrating the training code to a Python pipeline. I have since made this my default workflow, as in, initial EDA ( exploratory data analysis ) and code validation in Jupyter for a small data set, and subsequent migration to a Python notebook when running the code on large scale data.

  • SVM model(s) train much faster than Neural Network(s) !

  • SVM model(s) also have a smaller on-Disk footprint relative to Neural Networks. The model for this project stands at 266 KB.

  • To handle the potential difference in terms of pixel strengths ( e.g. between o - 1 versus 0 - 255), I captured the min max range(s) of pixel strengths dynamically.

  • The detection capacity of the pipeline at far off distances is not good, presumably because of the underlying data ( or the scale at which I am searching).