-
Notifications
You must be signed in to change notification settings - Fork 22
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7517598
commit 7cb4f19
Showing
17 changed files
with
111 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
Please save your output images to this folder and include a description in your README of what each image shows. |
Binary file not shown.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
##Writeup Template | ||
###You can use this file as a template for your writeup if you want to submit it as a markdown file, but feel free to use some other method and submit a pdf if you prefer. | ||
|
||
--- | ||
|
||
**Vehicle Detection Project** | ||
|
||
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. | ||
* Note: for those first two steps don't forget to normalize your features and randomize a selection for training and testing. | ||
* 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. | ||
|
||
[//]: # (Image References) | ||
[image1]: ./examples/car_not_car.png | ||
[image2]: ./examples/HOG_example.jpg | ||
[image3]: ./examples/sliding_windows.jpg | ||
[image4]: ./examples/sliding_window.jpg | ||
[image5]: ./examples/img50.jpg | ||
[image6]: ./examples/example_output.jpg | ||
[video1]: ./project_video.mp4 | ||
|
||
## [Rubric](https://review.udacity.com/#!/rubrics/513/view) Points | ||
###Here I will consider the rubric points individually and describe how I addressed each point in my implementation. | ||
|
||
--- | ||
###Writeup / README | ||
|
||
####1. Provide a Writeup / README that includes all the rubric points and how you addressed each one. You can submit your writeup as markdown or pdf. [Here](https://github.com/udacity/CarND-Vehicle-Detection/blob/master/writeup_template.md) is a template writeup for this project you can use as a guide and a starting point. | ||
|
||
You're reading it! | ||
|
||
###Histogram of Oriented Gradients (HOG) | ||
|
||
####1. Explain how (and identify where in your code) you extracted HOG features from the training images. | ||
|
||
The code for this step is contained in the first code cell of the IPython notebook (or in lines # through # of the file called `some_file.py`). | ||
|
||
I started by reading in all the `vehicle` and `non-vehicle` images. Here is an example of one of each of the `vehicle` and `non-vehicle` classes: | ||
|
||
![alt text][image1] | ||
|
||
I then explored different color spaces and different `skimage.hog()` parameters (`orientations`, `pixels_per_cell`, and `cells_per_block`). I grabbed random images from each of the two classes and displayed them to get a feel for what the `skimage.hog()` output looks like. | ||
|
||
Here is an example using the `YCrCb` color space and HOG parameters of `orientations=8`, `pixels_per_cell=(8, 8)` and `cells_per_block=(2, 2)`: | ||
|
||
|
||
![alt text][image2] | ||
|
||
####2. Explain how you settled on your final choice of HOG parameters. | ||
|
||
I tried various combinations of parameters and... | ||
|
||
####3. Describe how (and identify where in your code) you trained a classifier using your selected HOG features (and color features if you used them). | ||
|
||
I trained a linear SVM using... | ||
|
||
###Sliding Window Search | ||
|
||
####1. Describe how (and identify where in your code) you implemented a sliding window search. How did you decide what scales to search and how much to overlap windows? | ||
|
||
I decided to search random window positions at random scales all over the image and came up with this (ok just kidding I didn't actually ;): | ||
|
||
![alt text][image3] | ||
|
||
####1. Show some examples of test images to demonstrate how your pipeline is working. What did you do to try to minimize false positives and reliably detect cars? | ||
|
||
Ultimately I searched on two scales using YCrCb 3-channel HOG features plus spatially binned color and histograms of color in the feature vector, which provided a nice result. Here are some example images: | ||
|
||
![alt text][image4] | ||
--- | ||
|
||
### Video Implementation | ||
|
||
####1. Provide a link to your final video output. Your pipeline should perform reasonably well on the entire project video (somewhat wobbly or unstable bounding boxes are ok as long as you are identifying the vehicles most of the time with minimal false positives.) | ||
Here's a [link to my video result](./project_video.mp4) | ||
|
||
|
||
####2. Describe how (and identify where in your code) you implemented some kind of filter for false positives and some method for combining overlapping bounding boxes. | ||
|
||
I recorded the positions of positive detections in each frame of the video. From the positive detections I created a heatmap and then thresholded that map to identify vehicle positions. I then used blob detection in Sci-kit Image (Determinant of a Hessian [`skimage.feature.blob_doh()`](http://scikit-image.org/docs/dev/auto_examples/plot_blob.html) worked best for me) to identify individual blobs in the heatmap and then determined the extent of each blob using [`skimage.morphology.watershed()`](http://scikit-image.org/docs/dev/auto_examples/plot_watershed.html). I then assumed each blob corresponded to a vehicle. I constructed bounding boxes to cover the area of each blob detected. | ||
|
||
Here's an example result showing the heatmap and bounding boxes overlaid on a frame of video: | ||
|
||
![alt text][image5] | ||
|
||
--- | ||
|
||
###Discussion | ||
|
||
####1. Briefly discuss any problems / issues you faced in your implementation of this project. Where will your pipeline likely fail? What could you do to make it more robust? | ||
|
||
Here I'll talk about the approach I took, what techniques I used, what worked and why, where the pipeline might fail and how I might improve it if I were going to pursue this project further. | ||
|