Skip to main content

Differentiable contour to mask and contour to distance map implementation with PyTorch

Project description

torch_contour

Example of torch contour on a circle when varying the number of nodes

Example of output of contour to mask and contour to distance map on a polygon in the form of a circle when varying the number of nodes

Pytorch Layers

This library contains 2 pytorch non trainable layers for performing the differentiable operations of :

  1. contour to mask
  2. contour to distance map.

It can therefore be used to transform a polygon into a binary mask or distance map in a completely differentiable way. In particular, it can be used to transform the detection task into a segmentation task. The two layers have no learnable weight, so all it does is apply a function in a differentiable way.

Input (Float):

A polygon of size $B \times 2 \times N$ with:
$N$ the number of nodes
$B$ the batch size

Output (Float):

A mask or distance map of shape $B \times H \times H$ with :
$H$ the Heigh of the distance map or mask
$B$ the batch size

Important:

The polygon must have values between 0 and 1.

Example:

from torch_contour.torch_contour import Contour_to_distance_map, Contour_to_mask
import torch
import matplotlib.pyplot as plt

x = torch.tensor([[0.1,0.1],
                 [0.1,0.9],
                 [0.9,0.9],
                 [0.9,0.1]])[None]

Dmap = Contour_to_distance_map(200)
Mask = Contour_to_mask(200)

plt.imshow(Dmap(x).cpu().detach().numpy()[0,0])
plt.show()
plt.imshow(Mask(x).cpu().detach().numpy()[0,0])
plt.show()

Pytorch functions

This library also contains batch torch operations for performing:

  1. The area of a batch of polygons
  2. The perimeter of a batch of polygons
  3. The haussdorf distance between 2 sets of polygons
from torch_contour.torch_contour import area, perimeter, haussdorf_distance
import torch

polygons1 = torch.tensor([
   [[0, 0], [1, 0], [1, 1], [0, 1]],  # Square
   [[0, 0], [2, 0], [2, 1], [0, 1]]   # Rectangle
], dtype=torch.float32).permute(0, 2, 1)  # Permute to shape (B, 2, N)
polygons2 = torch.tensor([
   [[0, 0], [1, 0], [1, 1], [0, 1]],  # Another Square
   [[0, 0], [2, 0], [2, 2], [0, 2]]   # Another Rectangle
], dtype=torch.float32).permute(0, 2, 1)  # Permute to shape (B, 2, N)


area_ = area(polygons1)
perimeter_ = perimeter(polygons2)
hausdorff_dists = hausdorff_distance(polygons1, polygons2)

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

torch_contour-1.0.4.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

torch_contour-1.0.4-py3-none-any.whl (5.5 kB view details)

Uploaded Python 3

File details

Details for the file torch_contour-1.0.4.tar.gz.

File metadata

  • Download URL: torch_contour-1.0.4.tar.gz
  • Upload date:
  • Size: 5.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.8.10

File hashes

Hashes for torch_contour-1.0.4.tar.gz
Algorithm Hash digest
SHA256 e171249418aceded50e0d34420dc9fc84b3e6e8d7b75f24f698d1eb82bd90f40
MD5 ba71b65570519dacab32be1a93116e9e
BLAKE2b-256 c4b0a0977ed192c8c00fccebbe964a6380da095e6d3fa74784743e9f5e93efda

See more details on using hashes here.

File details

Details for the file torch_contour-1.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for torch_contour-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 5879f23e7e627023535588d910037f170e7ee522aa87827236f493f53c00f676
MD5 ebb90e95c09f5e6a4f5cad5438356adb
BLAKE2b-256 09e8ed39fa51a306e608e751026ec33d2ae8e6192b052571ecf11ecc73f1d0ed

See more details on using hashes here.

Supported by

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