Skip to main content

Introduction

Oflibpytorch: a handy python optical flow library, based on PyTorch tensors, that enables the manipulation and combination of flow fields while keeping track of valid areas (see “Usage”) in the context of machine learning algorithms implemented in PyTorch. It is mostly code written from scratch, but also contains useful wrappers for specific functions from libraries such as PyTorch’s grid_sample, to integrate them with the custom flow field class introduced by oflibpytorch. Importantly, the main methods are differentiable with respect to their flow field tensor inputs, allowing for a seamless integration with machine learning algorithms. Features:

  • All main methods that return a float tensor are differentiable with respect to tensor inputs

  • A custom flow field class for both backward and forward (‘target’ / ‘source’ based) flow fields, handled as tensors with a batch dimension, allowing for efficient batch-wise processing that can be performed on GPU if desired

  • A number of class methods to create flow fields from lists of affine transforms, or a transformation matrix, as well as methods to resize the flow field, visualise it, warp images, or find necessary image padding, all while keeping track of valid flow field areas

  • A class method to process three different types of flow field combination operations

  • Utility functions including a PyTorch-based approximate interpolation to a grid from unstructured data as a replacement for the SciPy griddata method

Oflibpytorch is based on oflibnumpy (code on GitHub, documentation on ReadTheDocs) and is aimed at allowing the same operations to be performed with torch tensors instead of numpy arrays as far as currently feasible.

Usage & Documentation

A user’s guide as well as full documentation of the library is available at ReadTheDocs. Some quick examples:

import oflibpytorch as of

shape = (300, 400)
transform = [['rotation', 200, 150, -30]]

# Make a flow field and display it
flow = of.Flow.from_transforms(transform, shape)
flow.show()

# Alternative option without using the custom flow class
flow = of.from_transforms(transform, shape, 't')
of.show_flow(flow)
https://raw.githubusercontent.com/RViMLab/oflibpytorch/main/docs/_static/index_flow_1.png

Above: Visualisation of optical flow representing a rotation

# Combine sequentially with another flow field, display the result
flow_2 = of.Flow.from_transforms([['translation', 40, 0]], shape)
result = of.combine_flows(flow, flow_2, mode=3)
result.show(show_mask=True, show_mask_borders=True)

# Alternative option without using the custom flow class
flow_2 = of.from_transforms([['translation', 40, 0]], shape, 't')
result = of.combine_flows(flow, flow_2, mode=3, ref='t')
of.show_flow(result)  # Note: no way to show the valid flow area (see documentation)
https://raw.githubusercontent.com/RViMLab/oflibpytorch/main/docs/_static/index_result.png

Above: Visualisation of optical flow representing a rotation, translated to the right, using the custom flow class

result.show_arrows(show_mask=True, show_mask_borders=True)

# Alternative option without using the custom flow class
of.show_flow_arrows(result, 't')  # Note: again no way to show the valid flow area
https://raw.githubusercontent.com/RViMLab/oflibpytorch/main/docs/_static/index_result_arrows.png

Above: Visualisation of optical flow representing a rotation, translated to the right, using the custom flow class

Installation

In order for oflibpytorch to work, the python environment needs to contain a PyTorch installation. To enable GPU usage, the CUDA Toolkit is required as well. As it is difficult to guarantee an automatic installation via pip will use the correct versions and work on all operating systems, it is left to the user to install PyTorch and Cudatoolkit independently. The easiest route is a virtual conda environment and the recommended install command from the PyTorch website, configured for the user’s specific system. To install oflibpytorch itself, use the following command:

pip install oflibpytorch

Testing

Oflibpytorch contains a large number of tests to verify it is working as intended. Use the command line to navigate to oflibpytorch/test and run the following code:

python -m unittest discover .

The tests will take several minutes to run. Successful completion will be marked with OK.

Contribution & Support

License

Copyright (c) 2022 Claudio S. Ravasio, PhD student at University College London (UCL), research assistant at King’s College London (KCL), supervised by:

  • Dr Christos Bergeles, PI of the Robotics and Vision in Medicine (RViM) lab in the School of Biomedical Engineering & Imaging Sciences (BMEIS) at King’s College London (KCL)

  • Prof Lyndon Da Cruz, consultant ophthalmic surgeon, Moorfields Eye Hospital, London UK

This code is licensed under the MIT License.

If you use this code, please acknowledge us with the following citation:

@article{ravasio_oflib,
  title     = {oflibnumpy {\&} oflibpytorch: Optical Flow Handling and Manipulation in Python},
  author    = {Ravasio, Claudio S. and Da Cruz, Lyndon and Bergeles, Christos},
  journal   = {Journal of Open Research Software (JORS)},
  year      = {2021},
  volume    = {9},
  publisher = {Ubiquity Press, Ltd.},
  doi       = {10.5334/jors.380}
}

Metadata

Release files for oflibpytorch 2.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for oflibpytorch 2.1.1
File Size Uploaded Provenance Actions
oflibpytorch-2.1.1.tar.gz 73.6 kB Without provenance Details for oflibpytorch-2.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for oflibpytorch 2.1.1
File Interpreter ABI Platform Actions
oflibpytorch-2.1.1-py3-none-any.whl Python 3 none any Details for oflibpytorch-2.1.1-py3-none-any.whl

Total release size: 125.2 kB

Release files / oflibpytorch-2.1.1.tar.gz

Download URL oflibpytorch-2.1.1.tar.gz
Size 73.6 kB
Tags Source
SHA-256 checksum
How to use checksums
6cfb582df1181a5130d7f7d1aa9b3ed7bfad4accfed8ee486a02ea4e9c230bf9
BLAKE2b-256 checksum
How to use checksums
6a7c15612b4bcc0d90101385d12c128f94e7a7d6ecaa20fc4b014a7a715c5a02
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/0.0.0 pkginfo/1.7.0 requests/2.23.0 setuptools/52.0.0.post20210125 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.7.7

Release files / oflibpytorch-2.1.1-py3-none-any.whl

Download URL oflibpytorch-2.1.1-py3-none-any.whl
Size 51.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b8c127a5c83356bce1699b8e395955c680be943575bf1bf3fdcb7bbc7d32d4a4
BLAKE2b-256 checksum
How to use checksums
d2bf4d15a4951eb0c7187edb6dae9a20879464fe60cc1bfc66266a3302070b11
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/0.0.0 pkginfo/1.7.0 requests/2.23.0 setuptools/52.0.0.post20210125 requests-toolbelt/0.9.1 tqdm/4.44.1 CPython/3.7.7

Security for oflibpytorch 2.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page