My Teaching Philosophy#


CSE Graduate Teaching Award, 2025

I received the CSE Graduate Teaching Award at the University at Buffalo for CSE 4/573: Computer Vision and Image Processing (Summer 2025, 71 students): the first course at UB to include a semester-long module on diffusion models.

I teach from intuition and curiosity rather than memorization. Abstract ideas should be made tangible: seen, manipulated, and run. Every lecture I build follows the same arc: concept, then derivation, then implementation. Students never meet an equation without also meeting the code that makes it behave.

Core Principles#

  1. Build intuition first, then formalise. A student who can picture the mechanism will remember the derivation; the reverse is rarely true.

  2. Connect equations to behaviour through code. Every major algorithm in my course is implemented from first principles, in the browser, during the lecture.

  3. Remove friction. No environment setup, no installs, no dependency errors. If experimenting is hard, students will not experiment.

  4. Teach frontier models. Students deserve early exposure to what the field is actually doing now, with the mathematics intact.

  5. Design for retention. Spaced-repetition flashcards and low-stakes quizzes are built into the material, not bolted on.

The Course Platform I Built#

I built the CSE 4/573 course website as a complete interactive learning environment, not a slide repository. Everything below runs in a browser with no local setup.

Live code, in the lecture

Executable cells powered by Thebe, so algorithms are implemented and modified live during class. Students edit and re-run the same cells afterwards.

Animated slides

Every deck written from scratch in Reveal.JS and self-hosted, so animations carry the derivation step by step instead of revealing a finished equation.

3D visualisations

Interactive Plotly figures for stereo geometry, epipolar constraints and depth: the topics where a static diagram fails hardest.

Retention built in

Spaced-repetition flashcards via JupyterCards and auto-graded practice quizzes, embedded in the same pages as the material.

The site is built with Jupyter Book and TeachBooks, with lecture recordings and a capstone project track alongside the notes.

What the Course Covers#

Classical foundations: image formation and the pinhole camera, camera calibration, pixel-domain and Fourier-domain processing, feature detection.

Geometry: stereo vision, depth estimation and epipolar geometry.

Learning-based vision: convolutional networks for classification, segmentation and detection.

Generative vision: a full module on VAEs, GANs and diffusion models, with intuitive derivations paired with from-scratch Python implementations, ending in a capstone project on controllable synthesis or multimodal vision-language systems.

Tools throughout: OpenCV, PyTorch and TensorFlow.

Course Design#

Designing the generative module meant building it from the ground up: UB had no existing diffusion-models material. Assignments scaffold from foundational generative modelling to more open-ended exploration, and the capstone asks students to integrate generative methods into an application of their choosing. The intent is that students finish with portfolio-ready work, not just a grade.

I was fortunate to have Dr. Ifeoma Nwogu and Dr. Vishnu Lokhande as mentors on course design and content, and Dr. Shruti Agarwal of Adobe Research as a guest lecturer.

Student Feedback#

Courses#