CSCI 476 and 576 - Computer Vision

Scott Wehrwein

Winter 2024

Course Overview

Syllabus and Course Website (you are here): https://facultyweb.cs.wwu.edu/~wehrwes/courses/csci476_24w

Instructor: Scott Wehrwein (scott.wehrwein@wwu.edu)

Class meetings (AH 018):
Office hours (CF 471):
Synopsis from the WWU Course Catalog

A broad introduction to the fundamentals and applications of computer vision. Topics include image processing, the geometry and physics of image formation, two-view geometry, and high-level problems such as object recognition.

Prerequisites:
Official Course Outcomes

On completion of CSCI 476, students will demonstrate:

On completion of CSCI 576, students will demonstrate:

Textbooks

As a reference for this course, we will use the Second Edition of Computer Vision: Algorithms and Applications, by Richard Szeliski (ISBN 3030343715). A PDF version of the book is available for free at http://szeliski.org/Book/.

Other Resources
Lecture Materials Repository

Lecture notebooks and associated resources will be kept up-to-date in this following public github repository: https://github.com/csci476-24w/476-lectures

Schedule

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 Problems Readings (Szeliski, 2nd ed.)
1/9 (1) Intro, overview
Image formation
Image transformations
Notes: 476, 576
P01 1, 2.2, 3.1
recreational spreadsheets (video)
1/11 Linear Filtering - Convolution
Notes: 476, 576
P02 3.2
1/16 (2) Gradients and edges
Spatial frequency
Upsampling and downsampling
Notes: 476, 576
P1 out P03 3.5, 7.2
1/18 ❄️❄️❄️❄️❄️ G1 (576 only) out
1/23 (3) Image pyramids
Project 1
Notes: 476, 576, slides
P04 3.5
1/25 Panorama stitching intro
Feature detection
Notes: 476, 576
P05 7.1
1/30 (4) Geometric transformations: linear and affine
Feature description - MOPS
Notes: 476, 576
P06
2/1 Feature matching
Basic image stitching pipeline
Notes: 476, 576
P07 2.1, 3.6.1
2/6 (5) Projective Transformations
Alignment: translation, affine
Notes: 476, 576, whiteboard
P08 3.6.1, 8.1
2/8 Alignment - projective
RANSAC
Notes: 476, 576, whiteboard
P2 out P09 8.1, 8.2
2/13 (6) (Inverse) Warping
Blending
Notebooks: 476, 576
Notes: warping, stitching
Spherical pano notes (not covered)
P10 8.4
2/15 Midterm Exam
2/20 (7) Pinhole camera model
Depth from disparity
Notebook
Scott’s messy/terse notes (sorry!)
Ian’s notes; John Paul’s notes (thanks!)
P11 2.1
2/22 Rectified Stereo; Stereo Matching
Intrinsics, Extrinsics, and the Camera Matrix
Notes: 476, 576, whiteboard
P12 12.1
2/27 (8) Plane sweep stereo
Projective Geometry
Notebooks: 476, 576
Source notes: whiteboard
Live notes: 476, 576
P3 out P13 12.1
2/29 The Fundamental matrix
Multi-view geometry: pose estimation and triangulation
Notebooks: 476, 576
Notes: Epipolar
Live notes: 476, 576
P14 6.1.1–6.1.3
3/5 (9) ML review: 0 to MLP
Neural Radiance Fields
Notesbooks: 476, 576
Live notes: 476, 576
P4 out P15 5.3, 14.6
3/7 Sick day: Self-Directed activity
ML review: MLP to CNN
Image recognition with CNNs
Notebook: html; see repo for ipynb
P16 5.4, 6.1, 6.2
3/12 (10) Modern CNNs and Applications
Contrastive Learning
Notebook, 476, 576
5.5
\(\pi\) “Modern” Computer Vision, continued:
Generative Adversarial Networks
Autoencoders, CLIP, Stable Diffusion
Ask Me Anything
Notes: 476, 576
Monday, 3/18 CSCI 576 Final Exam 1:00-3:00pm
Tuesday 3/19 CSCI 476 Final Exam 1:00-3:00pm

Assessment

Grade Breakdown

Grades will be calculated as a weighted average of scores on the following course components:

Programming assignments

There will be four main programming projects for CSCI 476 and 576, and a few (2 \(\pm\) 1) additional 576-only programming assignments.

Written homework assignments

Written homework problems will be introduced on each class day, with each week’s homework problems will be due for submission on Sunday night of the week they were assigned. These problems will range from the level of in-class comprehension exercises to more challenging take-home problems. Some class time will be provided to work on some problems, but you can expect to spend time outside of class completing the remaining problems and writing up your solutions.

This quarter I will be experimenting with a sort of “ungrading” approach to these homework assignments. In this case, this means that:

This policy frees me to set some policies that will, hopefully get out of everyone’s way and help you to focus on learning:

The thing to keep in mind is that the homework problems will be your best indication of what to expect on the midterm and final exams, so it’s in your interest to make sure you’re able to answer them well. Possible strategies for verifying your understanding include: re-doing the problems without access to notes, or explaining your answers to a classmate.

Logistics

Midterm Exam

The midterm exam will be taken in-class on Tuesday 2/13 Thursday 2/15, and will include material covered through the prior week (Thursday 2/8). The exam will be closed-notes, closed-book, and designed to be completed in about an hour.

Final Exam

The final exam will be taken during the officially scheduled final exam slot in our usual lecture classroom. Please see the official schedule here.

The final exam will be cumulative. If your final exam grade exceeds your midterm exam grade, then your midterm exam grade will be replaced by your final exam grade in the calculation of your final grade. In other words, the total exam contribution your final grade in the course will be \[ \begin{align*} \max(&\\ &0.2*\textrm{midterm} + 0.2*\textrm{final}, \\&0.4 * \textrm{final}\\ )& \end{align*} \] Please note that this calculation is not built into the Canvas gradebook.

Per the University Academic Policies, a student who fails to take a final examination without making prior arrangements acceptable to the instructor receives a failing grade for the course.

I do not release final exams or final exam grades. This means that at the end of the quarter, your score on Canvas will not reflect your final grade in the course. If you wish to see your final exam, you can review your final exam in-person in my office starting at the beginning of the following quarter by visiting my office hours or emailing me to make an appointment.

Logistics

Course Webpage / Syllabus

The Schedule section of this page will be updated as the quarter progresses with daily topics and links to lecture materials and assignments. I suggest bookmarking this page; if you forget the URL and need to find your way back here, you can use link on the Syllabus page in Canvas.

Canvas

We will use Canvas for announcements, grades, and submission of written homework. Programming and Homework Assignments will be linked from both the course webpage and the corresponding assignment on Canvas. Lecture materials and readings will be posted on the course webpage only.

Git and GitHub

This course assumes that you have basic familiarity with git. Programming assignments will be completed using git repositories hosted by GitHub and orchestrated by GitHub classroom. You will receive an invitation link to create a repository for each assignment, complete the assignment in a local copy of the repo, and submit by pushing your final changes to GitHub.

Feedback

I take student feedback seriously. I appreciate any feedback you’re willing to give, and I will do my best to act on constructive feedback when possible. I will solicit feedback formally partway through the course, but you are welcome to provide feedback at any time in my office hours, by email, or if you desire anonymity you can use this Google Form.

Discord

The course Discord server is a good way to interact with your classmates and ask questions. You can find the server invite link on the Syllabus page on Canvas. I try to check the q-and-a channel regularly and answer questions when possible, but I also hope that classmates will also be able to step in and answer questions before I get to them.

Discord is not the place to get help that requires viewing of code, nor is it the place for “official” course communication. A couple points of Discord etiquette that I will require for this class:

Course Policies

Professionalism

I am committed to maintaining an inclusive, supportive, and professional environment in all academic settings including lectures, labs, and course-related online spaces. Students are expected to live up to the ACM Code of Ethics and Professional Conduct. This is the ethical code adopted by nearly every software professional. Failing to follow the ACM Code of Ethics and Professional Conduct can negatively affect course grades up to and including a failing grade for the course.

Communication Guidelines

Announcements

I will make all course-related announcements either in class or on Canvas. In-class announcements will be posted at the beginning of the lecture notes on the Schedule table on the course webpage. It is your responsibility to make sure that you see Canvas announcements promptly and check the in-class announcements if you miss class. Canvas should be configured to send you an email notification by default, but if you are unsure, please come see me in office hours.

Email

Email is the best way to get in touch with me. I do my best to check email regularly and respond when I can, but I am not able to be instantly responsive all the time. If you have something time-sensitive, email is the medium that I am most likely to see first. You can use Canvas messages as an alternative; these simply go to my email.

Grace

The policies for this course have “grace” built in for most categories of assignments: you have slip days for assignments, homework assignments with unlimited resubmits, and the opportunity to override your midterm exam grade with your final exam grade.

If any of the above forms of “grace” apply to your situation, you do not need to contact me: the grace policies are applied automatically. If you have extenuating circumstances that have caused you to go beyond the allowed grace, please contact me by email or in person to explain your situation.

Canvas Submission Comments

I do not read Canvas submission comments, so please do not use them. If you have a message for me and/or the TAs, please use email instead.

See Me After Class

Many quick questions can be resolved in a timely fashion by talking to me after class instead of using email or waiting for office hours. I will be available in the 10 minutes following lecture, so please feel free to use this time.

Late Work

You have five “slip days” that you may use at your discretion to submit programming assignments. Slip days can be used for any regular assignment (P1-P4, G1) except G2. 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 five days late. Each 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. For assignments completed in groups, each group member must use a slip day to extend the deadline for the whole group.

After your slip days are exhausted, a penalty of 0.1 * total_assignment_points * floor(hours_late/24 + 1) - that is, 10% of the total points per day late, will be applied.

To use slip days or submit work late, you do not need to let me know ahead of time. 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.

Programming Guidelines

Your programs will be graded on correctness, clarity, and efficiency (in that order).

Correctness:

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.

Clarity:

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:

Efficiency:

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 unless this is specifically stated as a goal of the assignment; such tweaks are often at the expense of clarity, correctness, or both.

Academic Honesty

Collaboration Policy - Individual Assignments

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.

Collaboration Policy - Group Assignments

For pair programming assignments, the above policy applies to any collaborations with people outside your group. In addition, each partner must be able to independently explain all of the code that your team submits. Pair programming is the recommended way to ensure that this guideline is met, but it is not strictly required. If one team member writes code separately, I suggest having the other team member perform a thorough code review.

On The Use of AI Tools

AI tools such as ChatGPT and Github Copilot raise significant, new, and unanswered questions about their role in education, and indeed in the work your education is likely preparing you for. No one knows what this means for the future! This quarter, I am adopting a (perhaps radically) liberal policy towards the use of AI tools in completing coursework: you may use AI tools in any way to help you complete any work for this course with the exception of exams. The only condition is that you tell me about how you used AI tools. For written homeworks, you should include a note at the end describing how you used AI; for programming assignments, the corresponding Canvas survey will have a question asking you to describe your usage. Because I’m partly using this as a chance to learn how these tools can be useful, I expect a fair amount of detail in this reporting. Generic statements like “used ChatGPT to draft code for some methods” are insufficient. Instead, (in this example) tell me which methods you had it draft and what you had to do to each one to get to the final product.

Changes to the Syllabus

This syllabus is subject to change. Changes, if any, will be announced in class or online. Students will be held responsible for all changes.

University Policies

All University-wide policies apply to this course, including those outlined at http://syllabi.wwu.edu. These policies cover issues including:

Resources for Getting Help and Support

Help with Course Content

If you are stuck, struggling, or need help on any aspect of the course, you have several avenues for seeking help:

Other Resources

Faculty Community Ambassadors

The Computer Science department has Faculty community ambassadors. The role of these ambassadors is to hear concerns, feedback, or questions from students, faculty and staff, especially (but not limited to) those related to equity, inclusion and diversity issues. We hope that the Community Ambassadors can advise and also guide people to college, university or external resources.

Our current Faculty Community Ambassadors are Yasmine Elglaly and myself (Scott Wehrwein). You can find more information on Commnity Ambassadors and contact details for both at the following link: https://cs.wwu.edu/diversity-equity-inclusion.

University Resources

As a reminder, the following University resources are always available: