Detailed schedule
Each day runs 9:00–12:00 and 13:30–16:30. Lectures are ~60 min; labs are ~2 h with the instructor circulating. Labs continue into the evening if you want — TAs are available until 18:00.
Before Day 1:
- Watch Sara Beery's intro lecture (~70 min on YouTube) — it frames everything we do in the CV lectures.
- Skim the 12 PDF/PPT slide decks on the Lecture Slides page (hosted as a GitHub release). These are Sara Beery's slides from her CV short course, used here with attribution — please don't redistribute.
- Install Python 3.11+, VS Code,
git, Claude Code, and download the Oregon Critters sample (instructions on the Python tutorial page).
Day 1 · Foundations
9:00
Morning
Morning
Lecture Intro to AI in ecology.
Where deep learning has and has not changed wildlife biology; the camera-trap and bioacoustic
data deluge; what pretrained models can and cannot do; ethical considerations (location
privacy of endangered species, data ownership with tribal partners). Uses
material from Lecture 0 (Intro and Logistics) and Lecture 0 (Intro to CV).
10:15
Lab 1 Python crash course (20 pts).
Jupyter, NumPy, pandas, matplotlib, walking a directory of camera-trap images, reading
EXIF timestamps.
13:30
Afternoon
Afternoon
Lecture PyTorch and the deep-learning workflow.
Tensors, autograd, loss functions, optimizers; what really happens during training; CPU vs
GPU; the difference between "training", "fine-tuning", and "inference". Draws from
Lecture 1 (IDEs, git, remote workflow) and Lecture 3 (Best practices for ML codebases).
14:45
Lab 2 PyTorch tutorial (20 pts).
Train a tiny CNN to distinguish daytime vs nighttime camera-trap images. End-to-end:
DataLoader → model → loss → optimizer → epoch loop → evaluation.
Day 2 · Camera traps I — Detection
9:00
Lecture Object detection for camera traps.
Two-stage vs one-stage detectors, anchors, NMS; MegaDetector (animal/person/vehicle);
YOLO family from v3 → v8; Darknet vs Ultralytics. Background reading from
Lecture 4 (Working with open-source CV codebases) and
Lecture 5 (Evaluation metrics).
10:15
Lab 3 Detection on Oregon Critters (20 pts).
Run MegaDetector and pretrained YOLOv8 on ~2,000 Oregon Critters images; produce a
precision-recall curve; reason about confidence thresholds.
13:30
Lecture Training and fine-tuning detectors.
Anchors, augmentation, class imbalance, learning-rate schedules. When fine-tuning beats
starting from scratch (almost always). From Lecture 2 (Data visualization, splitting, avoiding data poisoning) and Lecture 7 (Improving results).
14:45
Lab 4 Train a custom YOLO detector (20 pts).
Fine-tune YOLOv8 on a 4-class Oregon Critters subset (deer, black bear, cougar, coyote).
Inspect training curves, mAP@0.5, and per-class confusion.
Day 3 · Camera traps II + Bioacoustics intro
9:00
Lecture Image classification on detected crops.
The "detect then classify" pipeline; transfer learning with ResNet/EfficientNet; class
imbalance; the trap of evaluating on within-site holdouts. Material from
Lecture 6 (Probing model performance).
10:15
Lab 5 Species classifier (20 pts).
Crop animals from your Day-2 detections; fine-tune a ResNet-50; report site-stratified
accuracy and a confusion matrix.
13:30
Lecture Intro to bioacoustic monitoring.
Why spectrograms (STFT, mel scale); ARUs and recording schedules; what counts as a "labeled
spectrogram"; soundscape vs focal recording; ethical issues around recording in protected
areas.
14:45
Lab 6 BirdNET inference (20 pts).
Run BirdNET on a 24 h dawn-chorus recording from a Pacific NW site; build a species
accumulation curve; calibrate confidence thresholds against a hand-labeled subset.
Day 4 · Bioacoustics + Claude Code
9:00
Lecture PNW-Cnet and custom acoustic classifiers.
Why PNW-Cnet was built (spotted owl monitoring), its 4-second spectrogram inputs, its
51-class output; when you should train your own classifier instead. Material on efficient
models from Lecture 10.
10:15
Lab 7 PNW-Cnet + small custom CNN (20 pts).
Run PNW-Cnet on a forest soundscape. Train a small CNN to detect a non-PNW-Cnet target
(e.g., barred-owl pair duet) from labeled spectrograms.
13:30
Lecture Claude Code for research.
Installing on macOS and Windows; the terminal CLI vs the desktop app; plan mode; what an
MCP server is and why you might add one (e.g., for R); how Claude Code differs from
ChatGPT and from GitHub Copilot. Includes a live demo of the same task done four ways.
14:45
Lab 8 Claude Code pipeline (20 pts).
Use Claude Code to write a script that ingests camera-trap CSVs, runs MegaDetector, and
produces a tidy detection table. You will be graded on the quality of your prompts
and the correctness of the output, not on writing the code yourself.
18:30
Evening
Evening
Lab 11 GUI workflows: Shiny PNW-Cnet + Njobvu-AI (20 pts).
~3-h optional evening lab (graded if attempted). Install and use Zack Ruff's
Shiny PNW-Cnet
as a GUI alternative to the
pycnet CLI; install
Njobvu-AI and
use it to collaboratively label and train on a small image set.
Reading: Appel et al. 2025, Ecological Applications
(doi:10.1002/eap.70096).
Light dinner provided.
Day 5 · Statistical & mechanistic modeling
9:00
Lecture Parameter recovery as a tool for trust.
Why every statistical pipeline you build should be tested on simulated data first. Worked
examples: single-season occupancy, N-mixture, Cormack-Jolly-Seber, simple logistic SDM.
10:15
Lab 9 Parameter recovery simulation (20 pts).
With Claude Code: simulate occupancy data with known parameters, fit an
unmarked::occu model 500 times, and show empirically that the estimator is
unbiased.
13:30
Lecture When assumptions break, and how to report it.
Closure violations in occupancy; heterogeneity in N-mixture; ghost individuals in CJS;
misclassified detections from a CV classifier propagating into occupancy. Reading the
consequences honestly. Material from Lecture 11 (What do I do with my imperfect model?).
14:45
Lab 10 Robust analysis & report (20 pts).
Break one assumption of your Lab-9 model on purpose; quantify the resulting bias; write a
one-page methods + results section that an editor would accept. Final-project pitches
due at end of day.
After the course
- Day +3: 1-paragraph final-project proposal due.
- Day +14: Final project (code + report) due by 23:59.
- Day +21: Grades returned.