ROB 498 / 599 · Fall 2026 · Unit 0

Bridge modules

Everything this course assumes from classical computer vision and deep learning. This material is taught in class, across the first five lectures; these notes are the written reference that goes with them, the full derivations, the traps, and the self-checks the diagnostic is built from.

Taught L01 – L05, weeks 1–3 Both quizzes due Sun Sep 27 Weight 5%

00 · How these work

Read for the interface, not for the derivation

These modules are not a computer vision course in miniature. They cover the specific results this course uses, and each topic says plainly where it gets used, which lecture, which lab, which line of the starter code. If a classical result does not show up later, it is not here, however beautiful it is.

Every topic has the same four parts: the content, a Used by box tying it to something concrete in this course, a Trap box for the mistake people actually make, and two or three self-checks. The self-checks are the diagnostic's difficulty. If you can answer them without looking anything up, you are ready.

These notes were previously assigned as asynchronous modules. They are now lectured, and the notes are what you read alongside: self-contained, with the derivations worked at a pace a slide cannot manage. Where a lecture moves faster than you want, the corresponding topic below is the place to slow down.

Which lecture covers what

LectureTopics
L01 · Mon Aug 31A1, pinhole camera, intrinsics and extrinsics, the camera matrix, distortion, calibration as estimation
L02 · Wed Sep 2Rigid-body state on SE(3). Not a module topic, but the conventions fixed here are assumed by all of them
L03 · Wed Sep 9A2, rigid-body state on SO(3) and SE(3), epipolar geometry and the eight-point algorithm, which points can be matched
L04 · Mon Sep 14A4, A5, A6, then A3: features and matching, RANSAC, triangulation, structure from motion and bundle adjustment, visual SLAM, then stereo
L05 · Wed Sep 16The rest of A3, LiDAR and metric versus relative depth, then an introduction to neural networks: gradient descent and backpropagation, activations, softmax, training and validation, normalisation, and convolutional networks. Module B goes further than this lecture: reverse-mode cost and memory in B1, sparse convolution in B2, attention in B3, and training at scale in B4

If you have taken EECS 442, CMU 16-385, or an equivalent, read for the Used by and Trap boxes. They are the parts a general vision course would not have told you. If you have not, read the topic before or after its lecture rather than the night before the quiz. Module A carries Lab 1 almost entirely.

01 · What to skip

If you took EECS 442

Fall 2025 mapping. Where a topic is covered, the module is revision and you can go straight to the self-checks; where it is not, read it properly.

Bridge topicEECS 442 (F25)Read it?
A1 Camera model, calibrationLec 5, Image formationSkim. 442 does not cover distortion estimation or extrinsic calibration; A1's second half is new.
A2 Two-view geometryLec 6, Multi-view geometrySkim.
A3 Stereo and depth errorLec 6, Stereo visionRead the error analysis. 442 does not dwell on the Z² result, and depth sensing leans on it.
A4 Features and descriptorsLec 7, Lec 9, Correspondences, keypointsSkim.
A5 RANSACLec 7, Fitting geometric modelsSkim.
A6 Triangulation, PnP, BALec 7, Lec 8, Triangulation, SfM, visual SLAMRead the factor-graph framing. It is how the course poses SLAM.
B1 Autograd and backpropLec 13, OptimizationSkim.
B2 CNNsLec 14, Convolutional networksRead the sparse-convolution part. Dense 3D convolution is not viable at the resolutions Lab 1 uses.
B3 Attention and transformersLec 18, TransformerRead the permutation-equivariance part. It is why transformers took over point-cloud processing.
B4 Training practicalitiesLec 11–13, Sec 8, SGD, PyTorchSkim, then read the reproducibility part, the labs grade you on it.

Nothing in Module A or B requires 442. The mapping exists so that people who took it do not sit through material twice.

MODULE A ~2–3 hours from scratch

Geometric vision

How a 3D point becomes a pixel, and how to invert that when you have more than one view. Six topics, ending where this course begins: estimating many poses and many points jointly from noisy measurements.

A1

The pinhole camera and calibration

A camera maps a world point to a pixel by a rigid transform into the camera frame, a perspective divide, and an affine map into pixels:

x ~ K [R | t] X [ fx s cx ] K = [ 0 fy cy ] s (skew) is ~0 for any real camera [ 0 0 1 ]

Four intrinsic parameters that matter: focal lengths fx, fy in pixels and the principal point cx, cy. The principal point sits a few pixels off the image centre. It is usually within a few pixels of it, and assuming otherwise puts a small systematic bend in every reconstruction you build.

Real lenses are not pinholes. The standard correction is radial plus tangential, applied in normalised coordinates before K:

r² = x² + y² x_d = x(1 + k1 r² + k2 r⁴ + k3 r⁶) + [ 2 p1 x y + p2(r² + 2x²) ] y_d = y(1 + k1 r² + k2 r⁴ + k3 r⁶) + [ p1(r² + 2y²) + 2 p2 x y ]

Calibration estimates all of this from images of a known target. Zhang's method uses a planar checkerboard at several orientations: each view gives a homography between the board plane and the image, each homography constrains the image of the absolute conic, and enough of them determine K. Then everything is refined by minimising reprojection error over intrinsics, distortion, and the per-view board poses.

Used byLab 1 Part B1 estimates intrinsics and distortion from a checkerboard sequence and asks for the parameters with their uncertainties. Every later part assumes K is right; a bad calibration does not announce itself, it just puts your Part D mesh slightly through the wall.
TrapOne board orientation is not enough, however many images you take of it. A planar target seen fronto-parallel leaves focal length and depth trading off against each other. You need the board tilted, in several directions. If your covariance comes back near-singular in one direction, this is why.

ReadSzeliski §2.1.4 (projective camera), §11.1.4 (calibration). CMU 16-385 Camera models, both lectures.

Self-check
  1. A camera has fx = 600 px and images a 10 cm object at 3 m. How many pixels wide is it?
  2. You halve the image resolution by binning 2×2. What happens to fx, fy, cx, cy?
  3. Why does an RMS reprojection error of 3 px mean you should look for bad frames rather than accept the calibration?
A2

Two-view geometry

Given the same scene point in two images, the two rays must intersect. That single constraint is the whole of two-view geometry. In pixels it is the fundamental matrix; in calibrated normalised coordinates it is the essential matrix:

xᵀ F x' = 0 F is 3x3, rank 2, 7 DoF E = Kᵀ F K' E is 3x3, rank 2, 5 DoF E = [t]ₓ R translation is recovered only up to scale

The rank-2 condition is not decoration: it is what makes every point in one image map to a line in the other rather than a point. Estimating F without enforcing it gives epipolar lines that fail to meet at a common epipole.

Decomposing E by SVD gives four candidate (R, t) pairs: two rotations times two translation signs. Only one puts triangulated points in front of both cameras; that cheirality test is how you pick it. Triangulate a single point and check the sign of both depths.

Used byUnit 1's feed-forward reconstruction lecture, where DUSt3R and VGGT regress this relationship directly instead of estimating it. Knowing what they replaced is what lets you judge whether they replaced it well, and Lab 2 Part D2 measures exactly that.
Trapt comes out of E as a unit vector. A monocular pipeline has no metric scale, and this is where it goes missing: not in some later approximation. Lab 2 D2 asks what the recovered scale factor means for a robot that needs metres; the honest answer starts here.

ReadHartley & Zisserman ch. 9–11 is the reference; Szeliski §11.3 is faster. CMU 16-385 Two-view geometry. TUM Multiple View Geometry lectures 5–7 if you want it derived slowly on video.

Self-check
  1. Why does F have 7 degrees of freedom and not 8, given it is a 3×3 matrix defined up to scale?
  2. Both cameras translate purely along their optical axis. What do the epipolar lines look like?
  3. You decompose E and all four candidates put some points behind a camera. What went wrong?
A3

Stereo and the depth error that follows from it

Rectify two views so epipolar lines are corresponding image rows, and matching becomes a 1D search along a row. Disparity d, the horizontal shift of the match, gives depth directly:

Z = f B / d f in pixels, B the baseline in metres

Differentiate. This is the most consequential equation in Module A:

dZ/dd = −f B / d² = −Z² / (f B) so σ_Z ≈ (Z² / f B) · σ_d

Disparity error is roughly constant across the image. It is a matching problem, not a distance problem. Depth standard deviation therefore grows with the square of range, and depth variance with the fourth power. A stereo rig accurate to a centimetre at 1 m is accurate to about 25 cm at 5 m, with nothing changed but the distance.

The same shape holds, for different reasons, across the depth sensors in Unit 0: structured light degrades with range as the projected pattern spreads; time-of-flight is more nearly constant in range but fails on dark and specular surfaces; and every one of them is worse at grazing incidence.

Used byLab 1 Part D1 requires a TSDF weighting scheme that accounts for depth-dependent noise, and asks you to state the noise model you assumed. This is that model. Inverse-variance weighting from the derivation above is w ∝ 1/Z⁴; many published systems use w ∝ 1/Z² instead, which is a deliberate softening rather than the principled choice. Either is defensible, state which you used and why, and note that grazing incidence deserves a factor too.
TrapConfusing σ with σ² here is the single most common error in Lab 1 Part D. Standard deviation goes as Z²; variance goes as Z⁴. Write down which one your weight is the inverse of.

ReadSzeliski §12.1–12.4. CMU 16-385 Stereo. Nguyen et al., Modeling Kinect Sensor Noise (3DIMPVT 2012) for a measured axial-noise model of a real depth camera.

Self-check
  1. A rig has f = 700 px, B = 12 cm, and matches good to 0.25 px. What is σ_Z at 2 m? At 6 m?
  2. You double the baseline. What improves, and what gets worse?
  3. Why does a textureless white wall break stereo but not time-of-flight?
A4

Features, descriptors, and matching

Detection finds repeatable points. The Harris criterion looks at the structure tensor of local gradients: two large eigenvalues means a corner, one means an edge, none means flat, and a corner is exactly the case where a small shift in any direction changes the patch, which is what makes it locatable.

Description summarises the neighbourhood so it can be recognised from another viewpoint. SIFT builds a gradient-orientation histogram over a scale- and rotation-normalised patch; ORB pairs a FAST detector with a binary BRIEF descriptor compared by Hamming distance, which is far cheaper and is what you find inside real-time SLAM systems. Learned front-ends (SuperPoint, and the detector-free matchers that followed) now beat both on hard viewpoint change.

Matching is where the errors come from. Two standard filters: Lowe's ratio test, rejecting a match when the best and second-best distances are too close (≈ 0.8), and mutual nearest neighbour, keeping a pair only if each is the other's best. Both are cheap and both remove far more bad matches than they cost you good ones.

Used byLab 1 Part C finds correspondences between scans; the distance gate there is doing the same job the ratio test does here. Lab 3 Part B3 is the same problem again in 3D with appearance features attached, and once you have to match sets rather than pairs, greedy nearest-neighbour is no longer good enough and you solve an assignment problem instead.
TrapThe ratio test assumes the true match is unique. On a repetitive structure, a row of identical windows, a tiled floor, the second-best is a plausible competitor and the test throws away the correct match. Repetitive scenes need geometric verification, not a stricter threshold.

ReadSzeliski §7.1–7.2. CMU 16-385 Feature and corner detection and Feature descriptors and matching.

Self-check
  1. Why does a corner localise well while an edge does not, in terms of the structure tensor's eigenvalues?
  2. What does the ratio test do that a plain distance threshold cannot?
  3. Your matcher returns 2,000 matches of which 400 are correct. Which of the two filters above would you reach for first, and why?
A5

RANSAC and robust fitting

Least squares assumes every measurement is a measurement. Correspondence sets violate that badly: a wrong match is not a noisy measurement of the right answer, it is a measurement of something else entirely, and one of them can drag a fit arbitrarily far.

RANSAC handles this by hypothesis and verification: draw the minimum number of points that determine a model, fit, count how many of the rest agree, keep the best, refit on its consensus set. The iteration count follows from wanting to draw one all-inlier sample with probability p:

N = log(1 − p) / log(1 − wˢ) w = inlier fraction, s = minimal sample size p = 0.99, w = 0.5, s = 4 -> N ≈ 72 p = 0.99, w = 0.3, s = 4 -> N ≈ 566

Note how violently N depends on s and w. This is why minimal solvers matter: a 4-point solver is tractable where an 8-point one is not, at the same inlier rate.

The continuous cousin is a robust loss, Huber, Tukey, which down-weights large residuals instead of hard-classifying them. Robust losses need an initialisation good enough that inliers already dominate; RANSAC does not. In practice you use RANSAC to get there and a robust loss to refine.

Used byLab 1 Part B2 fits the calibration target plane in LiDAR returns with RANSAC. Part C2 uses a robust loss inside ICP and asks you to report its effect separately from the effect of the plane metric: two different improvements that get conflated every year.
TrapThe inlier threshold matters more than the iteration count and is almost always chosen by eye. Set it from your actual measurement noise: roughly 2–3σ of the residual you expect from a correct match. Too loose and the consensus set contains outliers; too tight and no hypothesis ever wins.

ReadSzeliski §8.1.4. CMU 16-385 Image homographies covers RANSAC in the setting it is usually first met.

Self-check
  1. Recompute N for p = 0.99, w = 0.5, s = 7. Why is the jump from s = 4 so large?
  2. Why refit on the consensus set instead of returning the minimal-sample model?
  3. When would you prefer a Huber loss over RANSAC outright?
A6

Triangulation, PnP, and bundle adjustment

Three estimation problems, distinguished by what is known and what is being solved for.

Triangulation, poses known, find the point. Two rays never quite meet under noise, so the linear (DLT) solution minimises an algebraic residual and the optimal one minimises reprojection error in both images. Always check cheirality: a triangulated point behind a camera is a sign the correspondence is wrong, not that the point is unusual.

PnP, points known, find the pose. Three correspondences give up to four solutions (P3P) and a fourth point disambiguates. Wrapped in RANSAC, this is how a system relocalises against an existing map.

Bundle adjustment, solve for everything at once, minimising total reprojection error over all poses and all points:

min Σ_ij ρ( || π(K, T_i, X_j) − x_ij ||² ) T,X

The problem is enormous and almost entirely sparse: pose i and point j interact only if j was seen in view i. Exploiting that structure, eliminating the points via the Schur complement and solving the much smaller pose system, is what makes it tractable at all.

The modern framing is a factor graph: variables are poses and landmarks, factors are measurements, and each factor carries a noise model. Marginalising the landmarks out leaves a pose graph, poses connected by relative-pose constraints. That is exactly the structure of Lab 1 Part E, and it is why the loop-closure covariance you supply there is not a formality: it sets how the correction is distributed around the loop.

Used byLab 1 Part E builds and optimises a pose graph in GTSAM. Unit 1's registration lecture puts this in the SLAM context. Note that GTSAM orders twists (ω, v) while this course uses (v, ω), the starter code says so twice because it is silent when you get it wrong.
TrapA pose graph with no prior has a free gauge: nothing fixes the global frame, and the solver will tell you the system is under-determined. Anchor the first pose. And one bad loop closure is worse than none. The optimiser will happily fold the map in half to satisfy it, producing an "after" picture worse than the "before".

ReadSzeliski §11.4. Dellaert & Kaess, Factor Graphs for Robot Perception §1–3, the reference for Unit 1, listed under Resources. CMU 16-822 covers the geometry end in depth.

Self-check
  1. Why is bundle adjustment sparse, and which matrix block does the Schur complement eliminate?
  2. What does marginalising landmarks out of a factor graph leave you with?
  3. You add a loop closure and the trajectory error gets worse. Give two explanations and say how you would tell them apart.
MODULE B ~2 hours from scratch

Deep learning

Four topics, chosen for what the labs actually require: a working mental model of autograd, enough about convolution to understand why the 3D version is sparse, enough about attention to understand why it took over point clouds, and the practical knowledge that separates a training run you can report from one you cannot.

B1

Autograd and backpropagation

A network is a composition of differentiable operations. Evaluating it builds a computation graph whose nodes are operations and whose edges carry intermediate values. Backpropagation is the chain rule applied to that graph in reverse topological order: seed ∂L/∂L = 1 at the loss and push gradients backward, each node turning the gradient of its output into the gradient of its inputs.

forward: x -> h1 -> h2 -> ... -> L (cache what the backward pass needs) backward: ∂L/∂L=1 -> ∂L/∂h_n -> ... -> ∂L/∂x, ∂L/∂θ

Why reverse mode? Cost scales with the number of outputs, not inputs. Forward mode costs one pass per input variable; reverse mode costs one forward and one backward pass regardless of how many parameters there are. With a scalar loss and ten million parameters, that difference is the entire field.

The price is memory: the backward pass needs values cached from the forward pass, so activation memory grows with depth and batch size. That is what gradient checkpointing trades back, recompute instead of store, and it is usually the first thing to reach for when Lab 2 runs out of GPU memory.

When a hand-written gradient is wrong, check it numerically before debugging anything else:

numeric = ( f(x + ε) − f(x − ε) ) / 2ε ε ~ 1e-5 relative error = |analytic − numeric| / max(|analytic|, |numeric|, 1e-8) < 1e-5 is healthy for float64
Used byEverything in Lab 2. Also worth knowing for Lab 1: the Gauss-Newton step inside ICP is the same machinery by hand, build a Jacobian, solve normal equations, iterate, which is why writing it once makes autograd stop feeling like magic.
TrapAn in-place operation on a tensor the backward pass still needs is the classic silent bug. PyTorch usually raises; when it does not, you get a wrong gradient rather than an error. If a model trains but plateaus somewhere implausible, gradient-check one layer before rethinking the architecture.

ReadOlah, Calculus on Computational Graphs, the clearest short treatment. Szeliski §5.3.5–5.3.6. PyTorch's autograd tutorial for the mechanics.

Self-check
  1. Why is reverse-mode preferred for a scalar loss and forward-mode for a scalar input?
  2. Your gradient check gives a relative error of 0.3 for one parameter and 1e-9 for the rest. What kind of bug is that?
  3. What exactly does gradient checkpointing trade away?
B2

Convolutional networks, and why 3D breaks them

A convolution slides a small learned kernel over the input, sharing weights across position. That weight sharing buys two things: far fewer parameters than a dense layer, and translation equivariance, shift the input, and the output shifts with it. For images, where a cat is a cat wherever it appears, that is exactly the right prior.

out = floor( (n + 2p − k) / s ) + 1 n input, k kernel, p pad, s stride

Receptive field grows linearly with depth at stride 1, and multiplicatively once you stride or dilate. Normalisation matters more than it looks: batch norm computes statistics across the batch, which breaks without warning when the batch is small or when examples have different numbers of elements, both of which are true for point clouds. Group and layer norm do not have that dependence, which is why you see them in 3D architectures.

Now make it 3D. A dense 3D convolution over a 10×10×3 m room at 1 cm is 3×10⁸ voxels, of which the observed surface occupies well under one percent. Nearly all the compute is spent multiplying zeros, and memory is worse.

Sparse convolution is the answer: store only occupied voxels in a hash table, and define the convolution to produce output only where there is input. MinkowskiNet is the standard implementation, and point transformers are the attention-based alternative. The speedup in practice is smaller than the occupancy ratio suggests, gather/scatter over a hash table has poor memory locality compared to a dense tensor, and that gap is a real cost, not an implementation defect.

Used byLab 2 Part B trains a sparse-convolution network or a point transformer for semantic segmentation, and Part B2 ablates voxel size, which is directly a question about the resolution/compute trade this section describes. Lab 1 Part D meets the same density problem without any learning in it.
TrapEvaluate segmentation at point level, not voxel level. Voxel-level mIoU at 10 cm looks much better than the method is, and the interesting finding in Lab 2 B2, which classes degrade fastest as resolution coarsens, disappears entirely if you evaluate in the same coarsened space you predicted in.

ReadSzeliski §5.4. Stanford CS231n's convolutional-networks notes are still the best introduction. Then Choy et al., 4D Spatio-Temporal ConvNets, which is on the Unit 1 reading list.

Self-check
  1. Input 64, kernel 3, stride 2, padding 1. What is the output size?
  2. Why does batch norm misbehave on point clouds in a way it does not on images?
  3. At 1% occupancy a sparse conv should be ~100× cheaper. Give two reasons the measured speedup is smaller.
B3

Attention and transformers

Attention lets every element look at every other element and decide what to take:

Attention(Q, K, V) = softmax( Q Kᵀ / √d_k ) V

Queries ask, keys advertise, values carry content. The √d_k is not cosmetic: without it the dot products grow with dimension, the softmax saturates, and gradients vanish. Multiple heads run this in parallel in different learned subspaces so one head can track geometry while another tracks appearance.

The property that matters for this course is that self-attention is permutation-equivariant. Reorder the inputs and the outputs reorder identically; nothing in the operation assumes a grid, a sequence, or any neighbourhood structure. A point cloud is an unordered set, so attention fits it natively where convolution has to be told what "adjacent" means. Positional information is then injected explicitly, and in 3D that means encoding coordinates, which is a modelling choice rather than a given.

The cost is O(n²d) in the number of elements. A room at useful resolution has far too many points for that, which is why practical point transformers restrict attention to neighbourhoods or serialise points along a space-filling curve to get locality back cheaply. Recognising that these are all workarounds for one quadratic is most of what you need to read the architectures in Units 1 and 4.

Used byVGGT in Unit 1 and Lab 2 Part D, it attends across views, which is how it recovers pose without being given any. Point transformers are the Lab 2 Part B alternative to sparse convolution. The VLA policies in Unit 4 are transformers throughout.
Trap"Attention is permutation-equivariant" is a statement about the operation, not about a trained model. Once you add positional encodings the model is no longer order-agnostic, which is the point, so an ablation that shuffles input order is testing your encoding, not the attention.

ReadVaswani et al., Attention Is All You Need, then The Annotated Transformer, which walks the paper line by line as runnable code. Dive into Deep Learning ch. 11 if you want it worked more slowly.

Self-check
  1. What breaks if you drop the √d_k scaling?
  2. Why is permutation equivariance an advantage for point clouds and a problem for language?
  3. Two ways to avoid the O(n²) cost on a large point cloud, and what each gives up.
B4

Training practicalities

Optimisers. SGD with momentum still generalises best on vision tasks given a tuned schedule; AdamW is more forgiving and is what you should reach for first on an unfamiliar problem. The "W" matters, decoupled weight decay behaves as regularisation should, whereas Adam's original L2 term interacts with the adaptive scaling in ways that make the decay coefficient mean something different at every parameter.

Learning rate is the hyperparameter worth your tuning time; nothing else is close. Warm up over the first few hundred steps, then decay, cosine is a reasonable default. If a run diverges in the first epoch, the learning rate is too high before it is anything else.

Reading a curve. Training loss falling while validation rises is overfitting: more augmentation, more regularisation, or early stopping. Both flat and high is underfitting or a learning rate far off. Loss spiking irregularly usually means the rate is too high or a few batches contain something pathological, and in 3D, "pathological" is often a scan with almost no points in it.

Reproducibility. Seed Python, NumPy, and Torch, and record the seed. Note that seeding gives you reproducibility, not determinism: several CUDA kernels are nondeterministic regardless, and forcing determinism costs speed. Report which one you had.

rob498.config.set_global_seed(0) # seeds python, numpy, torch, cuda m = RunManifest(run_name="seg", seed=0) # captures gpu, git commit, versions m.add_param("voxel_size_m", 0.05) print(m.conditions_line()) # -> the caption your table needs
Used byEvery lab, and graded. The course policy is that a number reported without its conditions, sequence, trial count, seed, hardware, is worth nothing, and rob498.report.Table will refuse to render a table whose conditions are unset. The starter code does the bookkeeping; you have to have run the thing.
TrapMeasure GPU memory and latency where they actually happen. torch.cuda.synchronize() before you stop the clock, or you are timing kernel launches rather than kernels and your numbers will be implausibly good. reset_peak_memory_stats before the region you care about, or peak memory reflects something earlier in the run.

ReadPyTorch's Learn the Basics for the mechanics. Dive into Deep Learning ch. 12 for optimisation. Michigan's ROB 498 DeepRob has a practical treatment aimed at robotics specifically.

Self-check
  1. Why does AdamW's decoupled decay behave differently from Adam with an L2 penalty?
  2. Training loss is flat from step 0 and validation never moves. Name three causes and the order you would check them.
  3. Why is a seeded run not necessarily a bit-identical run on a GPU?

02 · Diagnostic

What the diagnostic asks

Two Canvas quizzes, ten questions each, both due Sunday Sep 27. 5% of the course grade, 2.5% each.

Twenty questions in total, two per topic: at the difficulty of the self-checks above for Module A, and of the lecture's worked examples for neural networks. Short numeric answers, multiple choice, and a few multiple-select "which of these are true" items. Open notes, unlimited attempts, and no time limit beyond the deadline. Nothing on either quiz requires a derivation you have not been shown.

The split follows what has been lectured, not the module letters. Quiz 1 covers A1, A2, A4, A5 and A6, plus this course's pose conventions, all of it taught by the first half of the Sep 14 lecture. Quiz 2 covers A3, lectured in the second half of Sep 14 and at the start of Sep 16, which is why the depth questions are on the second quiz and not the first. It also covers the introduction to neural networks from Sep 16: gradient descent and backpropagation, activations and classification, training and generalisation, and convolutional layers. Attention (B3) was not lectured, so it is not on the quiz.

Unlimited attempts exist because the diagnostic is meant to tell you what to reread, not to sort you. If you score badly, the feedback names the topics; reread those and take it again. The only way to lose the 5% is to not take it.

Two things it deliberately checks, because they cause trouble later: whether you can state how depth error scales with range, and whether you can say what a pose actually maps to what under this course's conventions. Both appear in Lab 1 within a fortnight.

Staff

The question bank is written: twenty items, two per topic, with an answer key, a rationale per question, and a per-question “if you missed this, reread…” pointer that Canvas shows as general feedback. The authoring copy is here; the two Canvas QTI packages are generated from the same source, so the quizzes and this page cannot drift apart.

03 · Going deeper

If you want the full course

These modules are deliberately narrow. If a topic caught your interest, these are where to take it further, all free and all complete courses rather than isolated lectures.

ResourceWhat it isGood for
Szeliski, Computer Vision: Algorithms and ApplicationsThe standard text, free onlineEvery topic in Module A; the reference this course cites
CMU 16-385 Computer VisionUndergraduate course, full slide decksCamera models, two-view geometry, stereo, features, the clearest slides for Module A
CMU 16-822 Geometry-based Methods in VisionGraduate geometry courseModule A taken seriously: projective geometry, multi-view reconstruction
Hartley & Zisserman, Multiple View GeometryThe reference bookA2 and A6 in full rigour, when you need the actual theorem
TUM Multiple View GeometryCremers' lecture series, recordedTwo-view geometry derived slowly, on video
Stanford CS231AComputer vision from 3D reconstruction to recognitionThe bridge between Modules A and B, in one course
Stanford CS231nConvolutional networks for visual recognitionB1 and B2; the notes outlast the lectures
Dive into Deep LearningInteractive book with runnable codeAll of Module B, worked slowly with executable examples
The Annotated TransformerThe paper as runnable codeB3, if the equation did not land
Olah, Calculus on Computational GraphsShort essayB1, and the best half hour you can spend on backprop
Michigan ROB 498 DeepRobDeep learning for roboticsModule B aimed at robot problems rather than image classification
PyTorch, Learn the BasicsOfficial tutorialB4, if you have not written a training loop before