Skip to main content

Correlation layer for optical flow on Apple Silicon (MPS)

Project description

MPS Correlation

Correlation layer for optical flow on Apple Silicon (M1/M2/M3/M4).

Drop-in replacement for spatial-correlation-sampler and mmcv's correlation op.

Why?

Correlation layers are essential for optical flow estimation:

  • RAFT: State-of-the-art optical flow
  • PWC-Net: Efficient optical flow
  • FlowNet/FlowNet2: Classic deep optical flow

But existing implementations are CUDA-only. On Mac you get:

NotImplementedError: correlation not implemented for MPS

This package provides a native Metal implementation.

Installation

pip install mps-correlation

Or from source:

git clone https://github.com/mpsops/mps-correlation
cd mps-correlation
pip install -e .

Quick Start

Basic Usage

import torch
from mps_correlation import correlation

# Two feature maps from consecutive frames
fmap1 = torch.randn(1, 256, 64, 64, device='mps')
fmap2 = torch.randn(1, 256, 64, 64, device='mps')

# Compute correlation volume
corr = correlation(
    fmap1, fmap2,
    kernel_size=1,
    max_displacement=4,
    stride1=1,
    stride2=1,
    pad_size=4
)
# Output: (1, 81, 64, 64) - 81 = (2*4+1)^2 displacement channels

Correlation Module

from mps_correlation import Correlation

corr_layer = Correlation(
    kernel_size=1,
    max_displacement=4,
    stride1=1,
    stride2=1,
    pad_size=4
)

corr = corr_layer(fmap1, fmap2)

RAFT-style All-Pairs Correlation

from mps_correlation import CorrBlock

# Build correlation pyramid
corr_block = CorrBlock(fmap1, fmap2, num_levels=4, radius=4)

# Lookup at specific coordinates
coords = torch.zeros(1, 2, 64, 64, device='mps')  # (x, y) coordinates
corr_features = corr_block(coords)

API Reference

correlation(input1, input2, kernel_size, max_displacement, stride1, stride2, pad_size, is_multiply)

Parameter Type Description
input1 Tensor First feature map (N, C, H, W)
input2 Tensor Second feature map (N, C, H, W)
kernel_size int Size of correlation kernel (default: 1)
max_displacement int Maximum displacement to search (default: 4)
stride1 int Stride for input1 (default: 1)
stride2 int Stride for displacement (default: 1)
pad_size int Padding size (default: 4)
is_multiply bool Use multiplication (True) or subtraction (False)

CorrBlock

RAFT-style correlation block with pyramid and lookup.

How It Works

Correlation computes similarity between patches at different displacements:

For each position (x, y) in output:
    For each displacement (dx, dy) in [-max_disp, max_disp]:
        corr[x, y, dx, dy] = sum(fmap1[x, y, :] * fmap2[x+dx, y+dy, :])

This creates a 4D cost volume that optical flow networks use to estimate motion.

Compatibility

  • PyTorch: 2.0+
  • macOS: 12.0+ (Monterey)
  • Hardware: Apple Silicon (M1/M2/M3/M4)

Features

  • Full forward and backward pass (training supported)
  • fp32 and fp16 supported
  • Compatible with RAFT, PWC-Net, FlowNet architectures

Credits

License

MIT

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

mps_correlation-0.1.4.tar.gz (13.1 kB view details)

Uploaded Source

Built Distribution

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

mps_correlation-0.1.4-cp314-cp314-macosx_15_0_arm64.whl (87.4 kB view details)

Uploaded CPython 3.14macOS 15.0+ ARM64

File details

Details for the file mps_correlation-0.1.4.tar.gz.

File metadata

  • Download URL: mps_correlation-0.1.4.tar.gz
  • Upload date:
  • Size: 13.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for mps_correlation-0.1.4.tar.gz
Algorithm Hash digest
SHA256 dfd3ae98354bcae8fa6e67907d4e4283c08bfc903999c534042ff821151d87f8
MD5 73195da4974c97f6d6e465e04ce5d445
BLAKE2b-256 aa0eb8971ba5e001045534d665049b8ef69a54a3f12043ca646a0fe955a31e31

See more details on using hashes here.

File details

Details for the file mps_correlation-0.1.4-cp314-cp314-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for mps_correlation-0.1.4-cp314-cp314-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0cc6d389d87187b973c6e4901581187aa7532e400d6ff0a067ee31ecec7c7e21
MD5 5f0e24af89e48b8b9161a08a2f558e6a
BLAKE2b-256 54949d15b12ef9ef1d486dfae5016f1c121bc2af0a9d31e1b355c3e5fff06edd

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