Daniel Sambold

Daniel Sambold

Marine Scientist · Environmental Steward · Computational Biologist

Nisene Marks State Park

Conservation & Trail Stewardship

Protecting old-growth redwoods and leading community conservation through science and stewardship

From the old-growth redwoods of Nisene Marks to the coastal wetlands of Elkhorn Slough, the Santa Cruz Mountains, and Big Sur: each landscape has reinforced that effective conservation requires both scientific rigor and grassroots engagement. Leading volunteers, clearing trails, removing invasive species, and restoring habitat across these organizations has shown me that stewardship is not a single act but a network of commitments.

Five Landscapes

Scroll to explore

Santa Cruz Mountains Trail Stewardship

Part of SCMTS's volunteer trail crews building and maintaining trails at Wilder Ranch State Park and Henry Cowell Redwoods State Park, contributing to new public trail access in the Santa Cruz Mountains.

  • Trail construction and maintenance on state park lands
  • Contributing to expanded public access and conservation corridor connectivity
  • Part of a 25+ year legacy of volunteer-led trail building in the region
Trail Construction State Parks Volunteer Crew
Community trail work at Nisene Marks

Trail Stewardship at Nisene Marks

As Trail Committee Chair for Advocates for Nisene Marks State Park, I lead conservation stewardship initiatives combining field leadership with geospatial technology to protect old-growth redwood ecosystems.

  • Organized trail maintenance days with 30+ volunteers addressing ecological hazards
  • Coordinated post-storm disaster assessment and cleanup operations
  • Created comprehensive GIS maps documenting hazards, erosion hotspots, and invasive species
  • Developed data-driven stewardship strategies for park management
GIS Mapping Volunteer Leadership Forest Ecology

Elkhorn Slough Trail Stewardship

Trail stewardship and habitat restoration at Elkhorn Slough National Estuarine Research Reserve, maintaining visitor access through coastal wetland environments while supporting the reserve's ecological mission.

  • Trail maintenance across the reserve's wetland and upland habitat network
  • Habitat restoration supporting one of California's last great coastal wetlands
  • Collaborating with reserve staff on stewardship alongside active research programs
Wetland Stewardship Habitat Restoration Trail Access
Coastal mountain landscape along the Big Sur coast

Big Sur Land Trust

Volunteer with the Stewardship Trails & Access Crew, maintaining roads, trails, and ecological integrity across Big Sur Land Trust's protected coastal and mountain landscapes.

  • Trail maintenance and restoration work supporting 20,000+ acres of protected land
  • Strengthened ecological resilience through hands-on habitat stewardship
  • Improved visitor access and experience on conservation properties
Trail Building Ecological Restoration Community Stewardship

Santa Lucia Conservancy

Conservation volunteer on the 20,000-acre Santa Lucia Preserve in Carmel, working alongside the Conservancy to maintain trails and support science-guided land management on permanently protected wildlands.

  • Trail maintenance across 10,360 acres of Conservancy-managed Wildlands
  • Invasive species removal and conservation grazing support
  • Biodiversity monitoring on wildlands the Conservancy has protected since 1995
Invasive Species Biodiversity Monitoring Land Stewardship

Research

  • What sharks do when no one is watching

  • Tracking animals without drift

  • Telemetry where there is none

  • Speeding up deep-sea data ingestion

  • Turning “zombie” urchins into a fishery

  • Which growth curves can be trusted

  • Mark-recapture without tagging

  • Surveying an unfamiliar coast

  • Getting to where the data is

Technology & Data Science

RelayStation RelayStation
Shark Scar Annotator Scar Annotator
Sambold_CV.docx
daniel@macbook — ~/research-projects
$ tree --interactive
~/research-projects/
├──
│   └──
FIELD INGEST MODELS OUTPUT ───── ────── ────── ────── ┌──────────────┐ ┌──────────────────┐ ┌───────────────┐ ┌──────────────┐ │ VHF relay │──▶│ detections │──▶│ │ │ Movebank │ │ stations │ │ (SQLite queue, │ │ anchor │──▶│ CF-1.8 NetCDF│ │ Galápagos+CA │ │ NB-IoT relay) │ │ PF + FFBS │ │ GeoJSON │ └──────────────┘ └──────────────────┘ │ track + behav│ └──────────────┘ └───────▲───────┘ ┌──────────────┐ ┌──────────────────┐ │ │ biologging │──▶│ accel + mag │───────────┘ │ tags │ │ records │ └──────────────┘ └──────────────────┘ ┌───────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │ YOLO pose │──▶│ morphometrics│ │ dorsal cams, │──▶│ SharkScar- │──▶│ 16 keypoints │ │ body conditn │ │ ROV + boat │ │ Annotator │ │ 0.96 box mAP50│ └──────────────┘ │ video │ │ 15-pt skeleton │ └───────────────┘ └──────────────┘ └────────┬─────────┘ ┌───────────────┐ ┌──────────────┐ │ │ PorpoiseID │──▶│ resightings, │ └────────────▶│ ArcFace re-ID │ │ catalogues │ └───────────────┘ └──────────────┘ ┌──────────────────────────────────────────────────────┐ │ FathomNet: the interchange layer under all of it. │ │ COCO compressed-RLE geometry, per-record licensing, │ │ export to COCO / YOLO / Pascal VOC. Labels made in │ │ one tool are readable by every other one. │ └──────────────────────────────────────────────────────┘

These are not ten separate projects. The relay stations and the biologging tags produce the raw records, the annotation platform turns imagery into labels, the pose and re-identification models consume those labels, anchor reconstructs where the animal actually went, and the FathomNet work is the interchange format that lets any of it be read by anyone else. Every piece exists because the piece upstream of it produced something the piece downstream could not yet use.

The through line is the same in all of it: measure the animal rather than count it, and report the number that survives an honest split.

Systems Thinking Interoperability Field to Model
├──
│   ├──
1st Place, NOAA Satellite Hack 2025
NOAA SatHack Summary

Real-time HAB monitoring combining NOAA VIIRS satellite data, buoy measurements, and ensemble ML. Built 3 custom REST APIs, dual dashboards for growers and public safety, and automated alert system.

  • Automated NOAA ERDDAP fetching, 3D spatiotemporal datacube
  • XGBoost + CNN-LSTM + Kernel SVM ensemble (86%+ accuracy)
  • Species-specific bioaccumulation timelines
  • Historical validation against 1998 & 2015 bloom events
Python/Flask XGBoost CNN-LSTM NOAA VIIRS
│   └──
├──
│   ├──
│   │   ├──
Click to load 3D model

Custom-built edge station: Raspberry Pi 5 + RTL-SDR Blog V4 + SIM7028 NB-IoT HAT. Each unit operates autonomously in the field for weeks, detecting VHF wildlife tags across the 151 MHz band.

Raspberry Pi 5 RTL-SDR SIM7028 VHF 151 MHz
│   │   ├──

927-line multi-channel FFT-based detection engine. Processes 256K IQ samples through adaptive baseline tracking, pattern validation with ghost filtering, and coefficient-of-variation analysis to distinguish true repeating tags (CV < 0.15) from noise.

  • Multi-channel FFT across 151.19–151.45 MHz (20 kHz channels)
  • Adaptive baseline with rolling deque for noise floor tracking
  • Pulse pattern validation: handles missed pulses via 2x–3x interval estimation
  • Tag locking at 90%+ confidence, which skips validation for confirmed detections
  • Bandwidth filtering rejects broadband noise (>15 kHz signal width)
NumPy FFT Scipy DSP Adaptive Thresholding
│   │   ├──
◁ ▷ ↻
🔒 xxx.xxx.x.xx:8080/dashboard

RelayStation Dashboard

Last update: 2:34:17 AM
Running
Active Tags
151.281 MHz LOCKED
Signal: +14.2 dB Confidence: 94% Interval: 1.024s Pulses: 847
151.340 MHz
Signal: +8.7 dB Confidence: 72% Interval: 1.012s Pulses: 213
Total Detections
1,247
Uptime
3d 14h 22m
System Health
CPU
42%
MEM
67%
DISK
52%
Recent Detections
151.281 MHz
+14.2 dB
3s ago
151.340 MHz
+8.7 dB
8s ago
151.281 MHz
+13.8 dB
12s ago
151.340 MHz
+7.9 dB
18s ago
151.281 MHz
+15.1 dB
24s ago

Dual dashboard architecture: local Flask station dashboard for real-time tag detection and system health, plus a centralized FastAPI server with 35+ REST endpoints, 8-table SQLite schema, HMAC auth, and Leaflet geographic mapping for multi-station fleet monitoring.

Flask FastAPI SQLite Leaflet REST API
│   │   ├──
┌─────────────┐ WiFi ┌──────────────┐ │ Pi Station │──────────────▶│ Central API │ │ (Edge) │ │ (FastAPI) │ │ │ NB-IoT │ │ │ RTL-SDR ─▶│──────────────▶│ Dashboard │ │ Detector │ (Failover) │ SQLite DB │ │ │ │ Leaflet Map │ └──────┬──────┘ └──────────────┘ │ ┌───▼───┐ │Offline│ ← SQLite queue │Queue │ (10K events max) └───────┘

Automatic WiFi-to-NB-IoT failover for network resilience. SQLite-backed offline queue buffers detections during connectivity gaps. Batched events use single-letter JSON keys to achieve ~650 bytes per cellular alert. Exponential backoff (2s→60s) with connection state machine tracking wifi/nbiot/offline states.

NB-IoT AT Commands PySerial State Machine
│   │   └──

Field-tested at Monterey Bay coastal sites. Yagi directional antenna achieves 1,700+ ft max range with 62% detection rate. Auto-calibration sweep optimizes SDR gain (15–45 dB) on boot. Watchdog daemon monitors system health every 60s with 3-strike escalation policy.

1,700 ft
Max Range
62%
Detection Rate
~30°
Beamwidth
~650 B
Per Alert
3–50+
Stations
Field Testing Yagi Antenna Auto-Calibration Watchdog
│   ├──
│   │   ├──

Shown: first-generation 5-keypoint model. Current pipeline uses the 16-keypoint schema described below.

YOLOv8-pose model trained on 16 anatomical keypoints: 9 Tier 1 body-axis landmarks (snout, eye, gill slits, pectoral base, dorsal base, caudal) and 7 Tier 2 fin tips, for white shark body condition assessment from underwater video. Extracts angle-tolerant morphometric ratios including total length, fork length, head-to-total ratio, and body condition index across 4 California research sites.

16-pt
Skeleton
4,850
Videos
0.96
Box mAP50
4
Sites
YOLOv8 Pose Estimation PyTorch Active Learning
│   │   ├──

Semi-supervised 8-stage pipeline: video cataloging → frame extraction → seed annotation → model training → active learning selection → human correction → pseudo-label amplification → refinement. Processes 4,850 videos (661 GB) spanning 2012–2026 across Año Nuevo, Aptos, Farallon Islands, and Point Reyes. Uncertainty + k-center diversity scoring selects the most informative frames for annotation, with pre-annotation from the current best model to accelerate human review.

Active Learning Semi-Supervised Google Colab AWS EC2
│   │   └──
Presenting research

Presented research at multiple conferences including the CSUMB Summer Symposium on ML-based dorsal fin morphometrics for white shark identification and health assessment.

Summer symposium talk
│   ├──
│   │   ├──

Automated harbor porpoise individual identification from dorsal fin photos. SAM 2 segments the body, protrusion geometry extracts the fin, MegaDescriptor-L-384, chosen over DINOv2-base and a two-backbone ensemble on this catalogue, embeds the crop through an ArcFace head, and cosine similarity ranks the 198-individual catalog.

93.0%
Rank-1, LOO
198
Individuals
2,153
Images
360/hr
Throughput
SAM 2 ArcFace MegaDescriptor PyTorch
│   │   ├──

Leave-one-out evaluation on individuals with ≥5 sightings yields 93.0% rank-1 and 98.3% rank-5 accuracy. Temporal split (train ≤2022, test 2023+) gives 30.5% rank-1, which reflects the real challenge of fin shape change over years. Gallery size experiments confirm more photos per individual directly improve re-ID accuracy.

CMC Curve Leave-One-Out Temporal Split
│   │   └──

Gradio web interface for field researchers to upload dorsal fin photos and receive ranked identity matches. Includes catalog browsing with individual sighting histories, Dropbox integration for photo ingestion, and batch processing. Deployed on an 8-node Raspberry Pi Kubernetes cluster processing 360 images/hour.

Gradio Dropbox API Kubernetes Raspberry Pi
│   ├──
│   │   ├──

Full-stack Flask annotation platform for shark scar and morphometric data. SAM2 AI segmentation for body and scar detection, 15-point keypoint skeleton with auto-generation (click snout + caudal, remaining 13 points placed automatically), and 12-zone body diagram with 11 scar types. Multi-annotator consensus scoring with weighted voting by experience, proficiency, and confidence tiers.

15-pt
Skeleton
12
Body Zones
11
Scar Types
5–7
Annotators
Flask SAM2 SQLite Google OAuth COCO JSON
│   │   ├──
12-zone shark body diagram for anatomical scar location

Interactive 12-zone SVG body diagram for precise anatomical scar placement. Each zone is clickable and color-coded. Scar annotations include type classification, confidence rating (1–5 stars), side (left/right/dorsal/ventral), and free-text notes. Auto-save triggers every 5 minutes with unsaved-changes browser guard.

SVG Interactive Auto-Save
│   │   └──

Export pipeline supporting COCO JSON, Google Forms CSV, Keypoint CSV (wide format), and Google Sheets (3-tab: Scars, Keypoints, Admin Flags) with auto-sync on every annotation save. Google Drive integration auto-resolves video IDs with 3-tier resolution (local → cached → Drive). Deployed at annotate.shark-id.org on AWS EC2 with Docker Compose and nginx reverse proxy.

Google Sheets API Google Drive API Docker AWS EC2 nginx
│   ├──
│   │   ├──

Sequential Monte Carlo particle filter with a forward-filter backward-sample smoother. Dead reckoning from accelerometer and magnetometer data drifts without bound; GPS and acoustic fixes enter as observations and the backward pass redistributes the correction across the whole track rather than snapping it at each fix. Bathymetry enters as a constraint, so a reconstructed track cannot cross land.

Particle Filter FFBS Bathymetry Constraint
│   │   ├──

A reconstructed track is only useful if it leaves the project. Readers and writers for CF-1.8 NetCDF, Movebank and GeoJSON, so a track can go into a national archive, a movement-ecology repository or a GIS without a bespoke converter. DeepLabCut and SLEAP keypoint exports come in the other direction as optical ground truth.

CF-1.8 NetCDF Movebank GeoJSON DeepLabCut SLEAP
│   │   └──

Splits are taken by animal, never by record. A random split puts the same individual on both sides, and a behavior classifier can then score well by recognising the animal rather than the behavior. Subject-level leave-one-out, with per-class precision, recall and F1 reported next to balanced accuracy and macro-F1 so a majority class cannot hide inside a single headline number.

Subject-level LOO Leakage Control Macro-F1
│   ├──
│   │   ├──

LlamaIndex RAG pipeline with LanceDB vector store for citation-aware Q&A across shark research papers. Every answer includes [Author et al., Year, p.X] citations traced to source documents. Supports PDF, DOCX, HTML, EPUB, and Markdown ingestion with Docling section-aware parsing and PyMuPDF fallback.

20
Categories
3
Species
6
LLM Backends
512-tok
Chunks
LlamaIndex LanceDB RAG Docling
│   │   └──

Automated literature discovery via OpenAlex API with Unpaywall PDF downloading. Pre-configured for 20 shark research domains, from morphometrics, telemetry, ecology, machine learning, genetics, behavior, conservation, through conservation, targeting white sharks, leopard sharks, and orcas. Gradio UI with 7 tabs for chat, upload, library management, summarization, and settings.

OpenAlex Unpaywall FastAPI Gradio
│   └──

Performed CFD analysis using OpenFOAM to model hydrodynamic drag around acoustic tags on shark dorsal fins. Iterative simulations refined tag geometry to minimize swimming resistance.

OpenFOAM CFD Hydrodynamics
├──
│   ├──

Ten SQL Server migrations with rollback scripts, restructuring annotations into an observation, localization and geometry hierarchy. Several contributors can now attach geometry to the same animal while license, observer and review state stay attached to each contribution rather than to the animal.

SQL Server Flyway Hibernate Envers Schema Design
│   ├──

The REST API could describe a bounding box and nothing else. Extending it to points and COCO compressed RLE segmentation meant the Java side had to speak the same codec Python tooling writes, so pycocotools' RLE implementation was ported and covered by 17 unit tests. Masks produced by SAM or any COCO tool round trip byte for byte, with no new dependency added to the server.

17
Unit Tests
3
Export Formats
Java 21 Quarkus COCO RLE JAX-RS
│   ├──

Converts existing bounding boxes into segmentation masks across the whole database, scaling from a SAM 2 pilot to a full corpus SAM 3 run. Sharded by image over a WAL mode SQLite manifest used as a lock free work queue: workers claim shards with BEGIN IMMEDIATE leases so a dead worker's shards are reclaimed automatically, commits are temp and rename so a crash never marks a half written shard complete, and one long lived worker per GPU keeps the model loaded once.

Nothing is accepted on faith. Each mask takes the best of three multimask candidates by predicted IoU, carries a stability score computed from mask logits, and lands in one of three tiers on dual thresholds. Rejects are routed to a sidecar with an explicit deferred count, so the accept rate cannot be inflated by quietly dropping the hard cases.

SAM 2 / SAM 3 Multi-GPU SQLite WAL Crash Recovery
│   ├──

The annotation editor shipped with a stub behind its SegmentationProvider seam that returned a disc where a mask should be. Filled with a loopback ONNX service running SlimSAM-77-uniform through ONNX Runtime and CoreML, so Smart Select returns the outline of the actual animal.

ONNX Runtime SlimSAM CoreML
│   └──

Answers what you actually get if you train on a proposed slice of an annotated survey corpus, from bounded SQL aggregates rather than a full export. Reports an exclusion waterfall attributing every dropped annotation to one named stage, per concept trainability thresholds and the untrainable long tail, train and test leakage counts under four candidate split keys, and unlabelled positive contamination.

Data Curation Leakage Analysis Positive-Unlabeled
├──
│   ├──

End-to-end pipeline for TECAN plate reader growth curve analysis on bacteria remediation strains. Automates the full workflow from raw data to publication-ready figures.

  • Parse: Read raw TECAN output, preprocess 96-well plate data
  • Process: Clean, normalize, blank-subtract, average triplicates
  • Analyze: Fit Gompertz growth models, classify curves (GOOD/BAD)
  • Haldane: Fit mechanistic substrate inhibition ODE to pesticide strains
  • Advanced Stats: GP truncation, Bayesian hierarchical models (NUTS/DEMetropolisZ), bootstrap CIs, WAIC/LOO model comparison
  • Plot & Validate: 480 synthetic curves + interactive manual audit tool
Python Bayesian Stats Gompertz PyMC
│   ├──
├──
    ├──
Arctos Robotic Arm

Multi-DOF robotic arm exploring kinematics, servo control, and mechanical design.

    ├──
Water Quality Sensor

Custom monitoring devices measuring pH, temperature, DO, and salinity in real-time.

    └──
Click to load 3D model

Research platform and learning opportunity for avionics. Custom-built FPV drone serving as a hands-on testbed for flight controller programming, PID tuning, ESC protocols, and radio telemetry systems.

└──
Languages Python, R, SQL, C/Arduino, JavaScript, Unix/Bash
ML / AI YOLO, XGBoost, CNN-LSTM, Computer Vision, scikit-learn
Web Flask, FastAPI, REST APIs, Streamlit, HTML/CSS/JS
Hardware Raspberry Pi, RTL-SDR, Arduino, IoT Sensors, NB-IoT
Data / DSP NumPy FFT, Satellite Data, Statistical Analysis, Visualization
Geospatial GIS, Movement Tracking, CAD, OpenFOAM CFD
DevOps Git, Linux, SSH, Systemd, Watchdog, Remote Deploy
daniel@macbook ~ $

Captain's Log

The story behind the science: eight chapters, one thread

"The frontier in marine science is not just about reaching new places, but about seeing what is already there in radically new ways."