Are you interested in learning the technology behind today's self driving cars? Do you want to get involved in the industry and make your mark in a new sector? Then you're probably interested in Udacity's Self-driving car nanodegree.
The big question is, is it worth it? Are there better opportunities to learn out there?
Well, in this blog post I'll be providing my honest review of the course and letting you know whether it is worth your time, effort and money.
Udacity Self Driving Car Nanodegree Syllabus
Let's start by taking a look at the syllabus of this course.
Term 1 - Deep Learning and Computer Vision: The first term concentrates on Computer vision using mostly the Python programming language. There are a total of 5 projects in the first term. These include
- Lane Finding: This is the intro to computer vision. I had to build a system from scratch that would be used to identify road / lane markings on a road using OpenCV
- Traffic Sign Classifier: This project focused on building a DNN (Deep Neural Network) in Tensorflow for identifying and categorizing the different traffic signs in a data set of German Traffic signs.
- Behavioural Cloning: Perhaps one of the more exciting projects in the first term, this focuses on building an end-to-end DNN (Deep Neural Network) that is used to train a car to drive by itself like a human being does. Quite an impressive project for the first term, I thought so anyways!
- Advanced Lane Finding: This one continues on from the first lesson and makes things a little more interesting, it integrates classical computer vision techniques such as color masking, Sobel etc. This helps us find the road markings more accurately. It's interesting to learn these classical approaches but using the DNN has always shown better results in my experience.
- Vehicle Detection and Tracking: I chose to use the YOLO network for this course but it is taught using a classical approach known a HOG. You can also use an SSD network and some of the other students on my course did just that. The idea in this section is to create a system that detects and tracks cars in a video stream. It's a fun project and I enjoyed doing it, I had a few issues but my teacher was able to help me out and the forums was very useful.
Term 2 - Robotics: This term focuses on Control, Sensor Fusion and Localization and some other elements of robotics. C++ is the primary language in this term, so it's good to have at least a basic functional understanding of how C++ works before taking this course. As a complete newbie to Robotics and having only a basic understanding of C++ this term proved quite difficult for me to master, but there was help at the ready for when I got stuck. This term consists of 5 projects, just like the previous term. These include:
- EKF (Extended Kalman Filter): This section is all about Sensor fusion (which is basically combining data from multiple unclear sensors) and then you put that knowledge to use in building an EKF from the very beginning to the end in C++.
- UKF (Unscented Kalman Filter): The second section focuses on learning the different pros and cons of using EKF and introduces UKF as a solution to the problems involved with EKF. You are tasked with building a UKF that is able to handle non-linear motion.
- Stolen Vehicle: This sections focuses on solving the problem of losing a vehicle or having it stolen. It uses localization to pinpoint the position of the vehicle and the task is to build a particle filter compatible with an SDC to help perform this task.
- PID (Proportional-integral-derivative) control: Very similar to the Behavioural cloning project in the first term, this time we were required to build a PID Controller and this project in particular really helps you fully understand why robotics is an important part of the self driving car pie and the benefits it has for some situations compared to the data driven ways.
- MPC (Model Predictive Control): Again, with some similarities to the Behavioural cloning project and therefore the PID project with a little added fun and complexity. The purpose of this project is to build a Model Predictive Control from scratch that allows a car to navigate around a track all by itself.
Term 3 - Concentrations, System Integration and Path Planning: The hardest and final term of the entire course, it's filled with 3 fantastic projects that really get your brain going and will take some serious thought and effort to complete. It will be challenging, but you will learn a lot here. Both Python and C++ is used in this section, bringing the power of the two together. Without further delay, here are the different projects included in the final term:
- Path Planning: Perhaps one of the most challenging projects in all three of the terms, one that almost everyone I know struggled with is the path planning project. It ties together a lot of what we already learned in the previous terms and challenges us to create path planner. The path planner is often known as the brains of the self driving car - so it's a pretty crucial part of it. You'll most likely need help with this one, but the help is at the ready and easily available.
- Functional Safety/Semantic Segmentation: You are given a choice here, you can complete one of two projects. I personally chose Semantic Segmentation as that works brilliantly when object detectors like SSD and YOLO are hit by limitations because of bounding boxes etc. In the Semantic Segmentation project I learned how to segment out road pixels and as an added (but non-mandatory) lesson I built and end-to-end segmentation Deep Neural Network for different categories of obstacles such as people, buildings, roads etc. Freezing the computational graph of a DNN and optimizing it for inference time was definitely one of the most important parts of this course.
- System Integration: Here's where things get a bit interesting as you are given the chance to pair up with other students to work on a project together. We formed a team of between 4-5 students and built different modules for Carla (Udacity's self driving car) including, but not limited to, a classifier, path planner, traffic light detector and all sorts of other modules.
How Much Time Do I Need To Put In To Complete This Course?
It's going to vary - Udacity recommends between 15-20 hours per week but in my experience it took a lot more than that. You will run into problems and sometimes things don't get fixed for awhile, even with the expert help. Be prepared to work extra hard for this degree. If you really want to make the most out of your Udacity Nanodegree experience, you'll want to be doing other cool projects with the knowledge you're learning along the way - this will increase your likelihood of receiving job offers at the end as well.
I'm not going to lie - it's a really tough course. But once you've completed it you will have applicable real-world skills that can help you land the job you want.
Is the content of the course worth the money? Is it quality?
The content in the course is of a very high quality and I was incredibly pleased with the level of support offered during the degree. It provides an understanding of the classical approaches to self driving cars but also includes a good amount of deep learning approaches. It really gets you up to speed enough that you could handle an entry level job in the industry.
Do I Need To Know How To Program To Start The Course?
Definitely. The course goes pretty in-depth straight away and it doesn't cover the basics. It's important you have a decent understanding of both C++ and Python syntax and structure.
What if I don't know how to program?
Not to worry, if you are not a capable programmer just yet, there is a wide variety of course available online to get you up to date with the latest programming languages.
We highly recommend Pluralsight as a great starting point to take you from novice to expert in a variety of languages including Python, which is featured heavily in this nanodegree.