Skip to main content

Ensembling and kalman smoothing for pose estimation

Project description

EKS

GitHub PyPI PyPI Downloads

This repo contains code to run an Ensemble Kalman Smoother (EKS) for improving pose estimation outputs.

The EKS uses a Kalman smoother to ensemble and smooth pose estimation outputs as a post-processing step after multiple model predictions have been generated, resulting in a more robust output:

For more details see Biderman, Whiteway et al. 2024, Nature Methods.


Installation

We offer two methods for installing the eks package:

  • Method 1, github+conda: this is the preferred installation method and will give you access to example scripts and data
  • Method 2, pip: this option is intended for non-interactive environments, such as remote servers.

For both installation methods we recommend using conda to create a new environment in which this package and its dependencies will be installed:

conda create --name eks python=3.10

Activate the new environment:

conda activate eks

Make sure you are in the activated environment during the Lightning Pose installation.

Method 1: github+conda

First you'll have to install the git package in order to access the code on github. Follow the directions here for your specific OS. Then, in the command line, navigate to where you'd like to install the eks package and move into that directory:

git clone https://github.com/paninski-lab/eks
cd eks

To make the package modules visible to the python interpreter, locally run pip install from inside the main eks directory:

pip install -e .

If you wish to install the developer version of the package, run installation like this:

pip install -e ".[dev]"

For more information on individual modules and their usage, see Requirements.

Method 2: pip

You can also install the eks package using the Python Package Index (PyPI):

python3 -m pip install ensemble-kalman-smoother

Note that you will not have access to the example data or example scripts with the pip install option.

Example scripts

We provide several example datasets and fitting scripts to illustrate use of the package. See Command-Line Arguments for more information on arguments, including optional flags and defaults. We recommend starting with the first of four scripts outlined below, singlecam_example.py, following along with the Singlecam Overview if a deeper understanding of EKS is desired.

Single-camera datasets

The singlecam_example.py script demonstrates how to run the EKS code for standard single-camera setups. Any of the provided datasets are compatible with this script; below we'll use data/ibl-pupil as our example. To run the EKS on the example data, execute the following command from inside this repo:

python scripts/singlecam_example.py --input-dir ./data/ibl-pupil

The singlecam script is currently the most up-to-date script with the greatest number of feature implementations, including fast smoothing parameter auto-tuning using GPU-driven parallelization. Here is a detailed overview of the workflow.

Multi-camera datasets

The multicam_example.py script supports two modes for multi-camera setups, depending on whether camera calibration information is available. In both cases, pose predictions should be stored a separate csv file per camera.

Without calibration (linear EKS)

We provide example data in data/mirror-mouse-separate, containing two-view mouse video with cameras named top and bot. To run linear EKS on this data , execute the following command from inside this repo:

python scripts/multicam_example.py --input-dir ./data/mirror-mouse-separate --bodypart-list paw1LH paw2LF paw3RF paw4RH --camera-names top bot

With calibration (nonlinear EKS)

If camera calibration information is available, you can run a nonlinear version of EKS. Calibration data must be stored in .toml files using the Anipose format. We provide example data in data/fly, containing multi-view fly video with cameras named Cam-A, Cam-B, and Cam-C, along with a corresponding calibration.toml file. To run nonlinear EKS on this data, execute the following command from inside this repo:

python scripts/multicam_example.py --input-dir ./data/fly --bodypart-list L1A L1B --camera-names Cam-A Cam-B Cam-C --calibration ./data/fly/calibration.toml

Mirrored multi-camera datasets

The mirrored_multicam_example.py script demonstrates how to run the EKS code for multi-camera setups where the pose predictions for a given model are all stored in a single csv file. For example, if there is a body part names nose_tip and three cameras named top, bottom, and side, then the csv file should have columns named nose_tip_top, nose_tip_bottom, and nose_tip_side. We provide example data in the data/mirror-mouse directory inside this repo, for a two-view video of a mouse with cameras named top and bot. To run the EKS on the example data provided, execute the following command from inside this repo:

python scripts/mirrored_multicam_example.py --input-dir ./data/mirror-mouse --bodypart-list paw1LH paw2LF paw3RF paw4RH --camera-names top bot

IBL pupil dataset

The ibl_pupil_example.py script requires a input-dir which contains lightning-pose or DLC model predictions. To run this script on the example data provided, execute the following command from inside this repo:

python scripts/ibl_pupil_example.py --input-dir ./data/ibl-pupil

IBL paw dataset (multiple asynchronous views)

The ibl_paw_multiview_example.py script requires a input-dir which contains lightning-pose or DLC model predictions for the left and right camera views, as well as timestamp files to align the two cameras. To run this script on the example data provided, execute the following command from inside this repo:

python scripts/ibl_paw_multiview_example.py --input-dir ./data/ibl-paw

Authors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ensemble_kalman_smoother-4.5.0.tar.gz (40.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ensemble_kalman_smoother-4.5.0-py3-none-any.whl (45.1 kB view details)

Uploaded Python 3

File details

Details for the file ensemble_kalman_smoother-4.5.0.tar.gz.

File metadata

  • Download URL: ensemble_kalman_smoother-4.5.0.tar.gz
  • Upload date:
  • Size: 40.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.3.2 CPython/3.11.14 Linux/6.14.0-1017-azure

File hashes

Hashes for ensemble_kalman_smoother-4.5.0.tar.gz
Algorithm Hash digest
SHA256 65a3355d6eae1a5b291c326cc61201b984aabf18eff827eb5c85a2953afa7c8f
MD5 a04c387ee2dd3bfacf979f3be6455810
BLAKE2b-256 0a8b5bb98a3979914f91b795bd137774a6a3a81b334d9133c85fdc1622349863

See more details on using hashes here.

File details

Details for the file ensemble_kalman_smoother-4.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for ensemble_kalman_smoother-4.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3dbdba80a20f10ffc30909b92276aa0f55fc1015524d309b16f61d466423472d
MD5 61feda27b24aacfa4d9f0d6a79680ca2
BLAKE2b-256 4acaa3a4acc067deb0a8c7847af84771cdf75856920ff2ab5b7e83d9f3f7e633

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page