Fall 2020
I’ve chosen to use Discord to conduct class for two reasons: (1) to have a persistent online hub for the course that will hopefully help to build a sense of community within the class, and (2) to enable lower-friction transitions between lecture and group work. This is my first quarter teaching on Discord, so there will be hiccups, but I’m hoping that it will be a better experience than Zoom.
Lectures will be delivered synchronously via our class Discord server at the scheduled time: MTWF 11:00am–11:50am. I will make an effort to include as many opportunities for group work and interaction as possible. Although you should attend the synchronous lectures if at all possible, there will be no penalty for missing lecture, and recordings of lectures (not including time spent breaking out into groups) will be made available promptly.
Lectures will be recorded for members of the class to watch if you missed lecture, or to review if you’d like to see the content again. The recording will capture my audio, webcam, and screen share only - it will not include video or audio of other participants. I will do my best to repeat questions, but the recordings may be missing context from the voice and chat channels.
Office hours will be held via Zoom. For security, the link is only posted on the Syllabus page of Canvas.
Scott’s office hours are as follows:
Josh Myers-Dean is the grader for this course and will also hold an office hour:
The midterm and final exams will be open-book/open-note take-home exams.
The ongoing challenges associated with the current state of the world are affecting all of us in complex and varied ways. Although I have done my best to design this course to allow for flexibility, I understand that individual students may have circumstances that make it difficult to fully participate in this course.
If you contact me and ask, I will always make reasonable accommodations for late assignments and labs, missed classes, etc. Exceptions include:
The key thing to keep in mind, especially with respect to the programming assignments, is that the deadlines are primarily there for you: to make sure you stay on top of the material enough to get everything done by the end of the course.
The flip side of all this is that if you don’t talk to me, I can’t help you. I am making an effort to be transparent about accommodations because I don’t want them denied to those who are too shy to ask, or don’t ask because they assume I won’t be flexible.
A broad introduction to the fundamentals and applications of computer vision. Topics include basic image processing, the geometry and physics of image formation, multi-view scene reconstruction, segmentation, and detection and recognition of objects.
Note: the actual outcomes for this course may be a pared-down subset of these due to the remote instruction modality. My aim will be to emphasize quality over quantity of topics.
On completion of CSCI 497P, students will demonstrate:
On completion of CSCI 597P, students will additionally demonstrate:
Here’s a tentative schedule that will be updated to reflect reality as the quarter progresses. Lecture materials, assignments, and other materials will also be posted here.
Date (Week) | Topics | Assignments | Readings |
---|---|---|---|
9/23 (0) | What is computer vision? Logistics slides |
Ch 1 | |
9/25 | Overview and images problems, slides |
on the recreational use of spreadsheets (video) | |
9/28 (1) | Filtering 1 colab playground, slides |
3.1-3.3 | |
9/29 | Filtering 2 problems, slides |
hw1 out | 3.1-3.3 |
9/30 | Gradients and edges problems, slides |
4.2 | |
10/2 | Spatial Frequency and Resampling Numpy numpy playground, slides |
P1 - Filters out | 3.4, 3.5.2 numpy quickstart cs231n numpy |
10/5 (2) | Downsampling; Image Pyramids slides, numpy playground |
3.5.3 | |
10/6 | Upsampling slides, numpy playground |
hw1 due | |
10/7 | Feature detection slides |
4.1.1 | |
10/9 | Harris corners slides; demo code |
4.1.2 | |
10/12 (3) | Feature descriptors slides |
hw2 out | 4.1.3 |
10/13 | Feature Matching; Transformations 1 - Linear slides, problems |
2.1.1–2.1.2 | |
10/14 | Transformations 2 - Affine slides, problems, demo |
P1 code due (artifact due 10/15) |
2.1.1–2.1.2 |
10/16 | Projective transformations forward and inverse warping slides |
3.6 | |
10/19 (4) | Homogeneous Intuition Alignment: Translation slides |
6.1.1–6.1.3 | |
10/20 | Alignment: Affine, Homography slides |
P2 - Pano out | |
10/21 | RANSAC slides |
hw2 due hw3 out |
|
10/23 | Planar Panoramas slides, notes |
||
10/26 (5) | Pinhole Cameras and Projection slides |
||
10/27 | Spherical Panoramas slides, notes |
||
10/28 | Spherical Panoramas 2 Intrinsics, Extrinsics slides |
hw3 due | 2.1.5-6, 6.3 |
10/30 | Depth from Disparity Stereo Reconstruction: Matching, Metrics slides |
||
11/2 (6) | Stereo: Metrics, Rectification slides, notes, live notes |
P2 - Pano due midterm out |
|
11/3 | Plane Sweep Stereo slides, notes |
midterm due |
7.2 |
11/4 | Projective geometry 1 notes, live notes |
P3 - Stereo out | |
11/6 | Projective geometry 2, Fundamental Matrix slides, notes, song |
hw4 out | |
11/9 (7) | SfM and MVS Intro to Recognition sfm slides, recognition slides |
231n: Classification/ | |
11/10 | ML Basics KNN slides, mnist nn, demo |
231n: Linear Classifiers | |
11/11 | No class: Veterans Day | ||
11/13 | Linear Classifiers slides, L28.mp4 |
hw4 due |
231n: Linear Classifiers |
11/16 (8) | Optimization and SGD Neural Networks slides, L29.mp4, demo |
231n: Optimization 1, 2 Neural networks 1 |
|
11/17 | Activation Functions Gradient Descent in Practice Convolutional Neural Networks slides, videos, torch demo |
P3 - Stereo due P4 - CNNs out |
231n: Neural networks 1, 2, 3 CNNs |
11/18 | CNNs: regularization; interpretation; training slides |
hw5 out |
|
11/20 | CNNs: tricks and training slides |
||
11/23 (9) | CNNs: architectures slides |
||
11/24 | No class | ||
11/25 | No class | ||
11/27 | No class | ||
11/30 (10) | CNNs: other problems slides |
P4 - CNNs due hw5 due |
|
12/1 | Generative Models, Deep Dream, Style Transfer | ||
12/2 | (Fast) Bilateral Filter | ||
12/4 | AMA | ||
Final Exam: Takehome Released: 8am Tuesday, 12/8 Due: 10pm Wednesday, 12/9 |
As a reference for this course, we will use the latest preprint of the Second Edition of Computer Vision: Algorithms and Applications, by Richard Szeliski. The author is currently finalizing a draft of the second edition, and a PDF preprint of the latest draft is available for free at http://szeliski.org/Book/.
See the following message from the Faculty Community Ambassador, Moushumi Sharmin:
As we navigate this unnatural environment, it is creating a lot of stress and anxiety for many of us. If you want to share your views/concerns/comments related to EID issues, the climate of the department, or just need a space to talk about things that you need someone else to listen to, please feel free to join me in the Community Hours.
This hour is for Students, Faculty, and Staff. The conversations that will happen in the room will be strictly confidential and one-on-one (unless it is previously agreed that a group of individuals want to join at the same time).
Time: Thursdays at 10am (or by appointment)
Zoom link: https://wwu-edu.zoom.us/j/161683671?pwd=anhINUdwRUc1cmdPaTJqSXJMRFl0dz09
The University’s Fall 2020 interim grading policy applies. For official details, please see the Fall Guide. In contrast to Spring 2020, both undergraduate and graduate have the option to opt-in for P/NP grading. Also unlike Spring 2020, you must make this choice via the registrar by the end of the 7th week of classes.
One important caveat to the official grading policy applies to the undergraduate section of this course:
Grades will be calculated as a weighted average of scores on the following course components:
Programming assignments will include extensions beyond the base project; some of these add-ons will be required for students in CSCI597P, while they can be completed for extra credit by students in CSCI497P.
It is expected that everyone will promote a friendly, supportive, and respectful environment in the classroom, labs, and project groups. Everyone’s participation will be equally welcomed and valued.
One reason I am keeping lectures synchronous is to help us all maintain a routine, which is extra important when much of the structure in our lives has been upended by circumstances such as a global pandemic. The synchronous lectures will include exercises and group work that will make your learning experience significantly more interactive and, in my experience, more effective.
However, I am aware of the possiblity that you may have extra constraints imposed by family, work, technology access, or any number of other circumstances. For this reason, lecture recordings will be available and attendance will not be tracked. Participating asynchronously puts more responsibility on you as a student to make sure you’re truly absorbing the material, so if you are able to attend the lectures synchronously, I strongly encourage you to do so.
You have five “slip days” that you may use at your discretion to submit programming assignments or homework assignments late. Slip days apply only to programming assignments and homework assignments, and can not be applied to any other deadline (e.g., exams). You may use slip days one at a time or together - for example, you might submit each of five assignments one day late, or submit one assignment three days late and another two days late. A slip day moves the deadline by exactly 24 hours from the original deadline; if you go beyond this, you will need to use a second slip day, if available. If there is a separate artifact deadline, a slip day moves both deadlines back by 24 hours.
After your slip days are exhausted, a penalty of 10% * floor(hours_late/24 + 1) - that is, 10% per day late.
To use slip days or submit work late, you do not need to let me know ahead of time. For homeworks, simply submit to Canvas when you are ready, and I will apply slip days according to the submission time, noting the number of slip days used in your feedback. For programming assignments, you will complete your submission by pushing code to Github and filling out a Canvas survey. The submission time of the survey must be after your final push to Github and will be used as the time of submission.
Your programs will be graded on correctness, clarity, and efficiency (in that order).
A correct program is one that always produces the correct output for a given input. Also, a correct program does not produce unintended side-effects. The most effective way to ensure that your program is correct is to test, test, test. Test each component as you introduce it; once you are confident that a component works you can use it in other routines. Try to break your program in testing, and if you succeed, locate the bug and fix it. The better you test your program, the more likely it is to be correct - the more likely it is to be correct, the more likely you’ll earn a good score. Most of your grade will depend on the correctness of your code.
The easier it is to read and maintain your code, the easier it is to locate and remove bugs. Your program should be well organized, appropriately commented, and easy to maintain. To have a well-organized program, design your program thoughtfully and modularly. Think before you code: hacking away blindly leads to ugly, difficult-to-read code. If you do hack away, producing a functional but ugly wall of code, try to clean it up a bit. Make sure that your cleaning does not introduce new bugs.
As for comments, please follow these simple guidelines proposed by Emeritus Professor Osborne:
Your programs should be asymptotically efficient, e.g. checking graph reflexivity should be O(n), insertion into a balanced tree should be O(log n), etc. Do not optimize your code beyond the asymptotic level, as such tweaks are often at the expense of clarity, correctness, or both.
Individual programming assignments are to be completed independently. Students are welcome to discuss assignments with each other on a conceptual level, but each student should be writing their code independently and without direct help from fellow students. Sharing your code with others or looking at someone else’s code is an explicit violation of this collaboration policy. To make sure you are collaborating appropriately, follow these two rules:
Automated tools will be used to check your code for plagiarism at the push of a button. They are not fooled by tricks such as changing variable naming and whitespace: in fact, hiding plagiarism is harder than doing the assignment.
For pair programming assignments, the above policy applies to any collaborations with people outside your group. In addition, the following pair programming best practices must be followed:
Please review the University policies outlined at http://syllabi.wwu.edu regarding: