CARAFE content-aware upsampling for Apple Silicon (MPS)
Project description
MPS CARAFE
CARAFE (Content-Aware ReAssembly of FEatures) for Apple Silicon (M1/M2/M3/M4).
Drop-in replacement for mmcv's CARAFE op.
Why?
CARAFE is a learnable upsampling operator used in:
- Mask R-CNN: Instance segmentation
- FPN: Feature Pyramid Networks
- YOLACT: Real-time instance segmentation
But mmcv's implementation is CUDA-only. On Mac you get:
NotImplementedError: carafe not implemented for MPS
This package provides a native Metal implementation.
Installation
pip install mps-carafe
Or from source:
git clone https://github.com/mpsops/mps-carafe
cd mps-carafe
pip install -e .
Quick Start
Basic CARAFE Operation
import torch
from mps_carafe import carafe
# Input features (N, C, H, W)
features = torch.randn(1, 64, 32, 32, device='mps')
# Reassembly masks (N, group_size * k^2, H*scale, W*scale)
kernel_size = 5
group_size = 1
scale_factor = 2
masks = torch.softmax(
torch.randn(1, group_size * kernel_size**2, 64, 64, device='mps'),
dim=1
)
# Upsample with CARAFE
output = carafe(features, masks, kernel_size, group_size, scale_factor)
# Output: (1, 64, 64, 64)
CARAFE Module
from mps_carafe import CARAFE
carafe_layer = CARAFE(kernel_size=5, group_size=1, scale_factor=2)
output = carafe_layer(features, masks)
CARAFEPack (with mask predictor)
from mps_carafe import CARAFEPack
# Complete upsampling block with built-in mask predictor
upsample = CARAFEPack(
channels=64,
kernel_size=5,
group_size=1,
scale_factor=2
).to('mps')
output = upsample(features) # No need to provide masks
API Reference
carafe(features, masks, kernel_size, group_size, scale_factor)
| Parameter | Type | Description |
|---|---|---|
features |
Tensor | Input features (N, C, H, W) |
masks |
Tensor | Reassembly kernels (N, group_size * k^2, Hscale, Wscale) |
kernel_size |
int | Size of reassembly kernel (typically 5) |
group_size |
int | Number of channel groups (typically 1) |
scale_factor |
int | Upsampling factor (typically 2) |
CARAFEPack
Complete CARAFE block with mask prediction convolutions.
How It Works
CARAFE upsamples by:
- For each output pixel, identify the corresponding input neighborhood
- Use learned reassembly kernels (masks) to weight input pixels
- Sum the weighted inputs to produce the output
Unlike bilinear upsampling which uses fixed weights, CARAFE learns content-aware weights that adapt to the image content.
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 mmcv CARAFE API
Credits
- CARAFE Paper - Original research
- mmcv - Reference implementation
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_carafe-0.1.0.tar.gz
(9.4 kB
view details)
File details
Details for the file mps_carafe-0.1.0.tar.gz.
File metadata
- Download URL: mps_carafe-0.1.0.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1c3a1f4bb61000ce86a0e1260102b02027007fcfe7d8cee9f705944f7c79ed7c
|
|
| MD5 |
1f4a3fba322f7e9d2431ba3bb65ef173
|
|
| BLAKE2b-256 |
515c4a7fd88f0e55eaccbdb45780ea655c350d3657b74e6f7d6281ac4f6d82fb
|