The thing we're going to learn about in this course, computer vision, has a very interesting history. It's roots really go all the way back to the beginning of computing and artifical intelligence. When this course is over, I want you to understand where we really are today, how we got here, and be able to make some reasonable conjectures about where the field is going next.
I want you to be comfortable with cutting edge deep learning techniques, but also understand the broader context to which they belong. I want you to really understand why it's so deceptively difficult to program a computer to anything remotely close to what our visual cortex does.
Upon successful completion of this course, students will be able to:
- Setup and manage a scientific python computing environment
- Implement key computer vision algorithms in python to solve real computer vision problems
- Train + Validate machine learning models to find data-based solutions to computer vision problems
- Interpret algorithm performance through measurement techniques and by creating clarifying visualizations
- Debug issues in computer vision algorithms in python
- Understand the difference between analytical and empirical techniques, and the role each plays in the field
- Discuss historical and current trends in computer vision and key research developments
- Collaborate with peers and advisors to find and implement solutions to real computer vision problems
Detailed course schedule is here. The course is broadly broken into 6 modules and 1 semester-long group project.
- The Original Problem
- Learning to See
- Neural Networks Demystified
- Autonomous Driving
- Structure from Motion
- Deep Learning
Most modules will be accompanied with a coding challenge. These challenges will be automatically graded using an evaluation server. The evaluation server will also run anti-plagiarism checks to ensure each student's code is their own. Most coding challenges will be individual, some may be in groups. Students are allowed to upload 10 submissions to the evaluation server before the submission deadline. If possible, we will provide an automatically updating leaderboard. Coding challenges will be graded according to performance on an evaluation metric (accuracy, precision, recall..). Students should keep their solutions to challenges private, even after the course is over.
Each module will end with a short in-class quiz. These quizzes will test basic knowledge of the techniques covered in each section, and probe the understanding gained in the coding challenges.
Class attendance + participation count for 10% of your final grade, and will be sampled randomly.
The course will include a semester-long group project. This project represents a significant portion of a student's grade, and will be broken up into graded checkpoints, including a final presentation.
We will make heavy use of python in this course, spend lots of time in jupyter notebooks, and frequently use numpy, matplotlib, scipy, sklearn, opencv, and tensorflow.
Familiarity with the key techniques of linear algebra, univariate calculus will be useful. We will hit the ground running with python and numpy, so a little experience here would also helpful.
We will draw from 3 texts in this course, each available online:
- Szeliski, Computer Vision: Algorithms and Applications
- Prince, Computer Vision: Models, Learning, and Inference
- Goodfellow, Deep Learning
Students are encouraged to discuss coding challenge strategies and techniques, but are not permitted to share code. Students should keep their solutions to challenges private, even after the course is over. Quizzes are taken individually in-class, no collaboration is permitted on quizzes. The Course project will be completed in groups - students are of course encouraged to collaborate within their teams - and final projects will be posted on public GitHub pages.
