# UMich EECS 498-007 / 598-005: Deep Learning for Computer Vision

## Course Introduction

- Offered by: UMich
- Prerequisites: Basic Python, Matrix Theory (familiarity with matrix derivation is sufficient), Calculus
- Programming Languages: Python
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 60 ~ 80 hours

The University of Michigan's Computer Vision course is of exceptionally high quality, with its videos and assignments covering an extensive range of topics. 

The assignments gradually increase in difficulty and cover all stages of mainstream CV model development, making this an excellent introductory course for Computer Vision.

In each assignment, you'll build and train models or frameworks mentioned in the lectures, following the provided handouts.

You don't need any prior experience with deep learning frameworks. 

The course will teach you from scratch how to use Pytorch in the early assignments, and it can subsequently serve as a reference book for you.

As each assignment deals with different themes, you'll not only gain a first-hand understanding of the development of mainstream CV models through these progressive assignments but also appreciate the impacts of different models and training methods on final performance and accuracy. 

Moreover, you'll get hands-on experience in implementing them.

In Assignment 1 (A1), you'll learn how to use Pytorch and Google Colab.

In Assignment 2 (A2), you will build a Linear Classifier and a two-layer neural network. Finally, you'll have the opportunity to work with the MNIST dataset, on which you will train and evaluate your neural network.

In Assignment 3 (A3), you'll encounter the classic Convolutional Neural Network (CNN) and experience the power of convolutional neural networks.

In Assignment 4 (A4), you'll have the opportunity to build an object detection model from scratch, following the handout to implement a One-Stage Detector and a Two-Stage Detector from two research papers.

By Assignment 5 (A5), you'll transition from CNN to RNN. You'll have the opportunity to build two different attention-based models, RNNs (Vanilla RNN & LSTM), and the famous Transformer.

In the final assignment (A6), you'll get a chance to implement two more advanced models, VAE and GAN, and apply them to the MNIST dataset. Finally, you'll implement two very cool features: network visualization and style transfer.

Beyond the assignments, you can also implement a Mini-Project, building a complete deep learning pipeline. You can refer to the course homepage for specifics.

All the resources involved in the course, such as lectures, notes, and assignments, are open source. 

The only downside is that the Autograder is only available to students enrolled at the University of Michigan. 

However, given that the correctness of the implementation and the expected results can already be confirmed in the provided *.ipynb (i.e., the Handout), I personally feel that the absence of Autograder doesn't affect the learning process.

It's worth mentioning that the main lecturer for this course, Justin Johnson, is a Ph.D. graduate of Fei-Fei Li and currently an Assistant Professor at the University of Michigan.

The open-source 2017 version of Stanford's CS231N was taught by Justin Johnson.

Because CS231N was mainly developed by Justin Johnson and Andrej Karpathy, this course also adopts some materials from CS231N. 

Therefore, students who have studied CS231N might find some materials in this course familiar.

Lastly, I recommend every student enrolled in this course to watch the lectures on YouTube. Justin Johnson's teaching style and content are very clear and easy to understand, making them a fantastic resource.

## Course Resources

- Course Website：<https://web.eecs.umich.edu/~justincj/teaching/eecs498/WI2022/>
- Course Video：<https://www.youtube.com/playlist?list=PL5-TkQAfAZFbzxjBHtzdVCWE0Zbhomg7r>
- Course Materials: Only recommended textbooks, link: <https://www.deeplearningbook.org/>
- Coursework：See the course homepage for details, six Assignments and one Mini-Project
## Personal Resources
@Michael-Jetson The 200,000 to 300,000 words of notes I have taken (and did not include homework, etc.) can be used as a reference:[Michael-Jetson/ML_DL_CV_with_pytorch](https://github.com/Michael-Jetson/ML_DL_CV_with_pytorch)
