Winter 2024
Syllabus and Course Website (you are here): https://facultyweb.cs.wwu.edu/~wehrwes/courses/csci476_24w
Instructor: Scott Wehrwein (scott.wehrwein@wwu.edu)
Monday 2-3
Wednesday 10-11
Friday 12-1
and by appointment
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.
For CSCI 476: DATA 471 or instructor permission
For CSCI 576: DATA 571 or instructor permission
Details on how to seek instructor permission can be found here.
On completion of CSCI 476, students will demonstrate:
On completion of CSCI 576, students will demonstrate:
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/.
Lecture notebooks and associated resources will be kept up-to-date in this following public github repository: https://github.com/csci476-24w/476-lectures
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 |
Grades will be calculated as a weighted average of scores on the following course components:
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 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.
The problems for each lecture will be posted in the Schedule table by the start of each class.
Please typset your answers and submit to Canvas in PDF format by Sunday night of the week they are assigned.
Since these are “ungraded”, the individual Canvas assignments will be scored out of 0; I will assign a 0/0 and provide feedback to any submissions.
If you wish to submit late or resubmit, please submit via Canvas then send me an email to let me know that you’ve done so. I will give timely feedback on late and re-submissions on a best-effort basis.
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.
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.
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.
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.
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.
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.
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:
Your server nickname in our Discord server must be your first (or preferred) and last name (you may also include pronouns if you like). I will warn and then kick any server members whose nicknames do not follow this policy. To set your server nickname, click the server name in the top left, then Edit Server Profile, then set your nickname in the Server Nickname field. Your avatar image must also be appropriate for a professional setting.
I do not accept direct messages on Discord; please use email instead.
Unless you are raising a time-sensitive issue that affects multiple students (e.g., the link to the lab handout for today’s lab is broken), please do not @mention me on Discord.
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.
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 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.
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.
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.
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.
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.
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 unless this is specifically stated as a goal of the assignment; 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, 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.
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.
This syllabus is subject to change. Changes, if any, will be announced in class or online. Students will be held responsible for all changes.
All University-wide policies apply to this course, including those outlined at http://syllabi.wwu.edu. These policies cover issues including:
If you are stuck, struggling, or need help on any aspect of the course, you have several avenues for seeking help:
q-and-a
channel on the Discord
server.monospaced font
, rather than as a
screenshot.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.
As a reminder, the following University resources are always available: