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, hausdorf_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.6.tar.gz (5.3 kB view details)

Uploaded Source

Built Distribution

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

Uploaded Python 3

File details

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

File metadata

  • Download URL: torch_contour-1.0.6.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.6.tar.gz
Algorithm Hash digest
SHA256 ca81dbb66e60061135c24c784ee7b6f7a3112c7f07cc635cdaa6299e09adfaae
MD5 97beca31fa15e2a5b55dd7400b1bf1ac
BLAKE2b-256 bb8bf2420a6df18acff07dcc909be36ba0dc9709f983b901e2e9858041d00d2c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for torch_contour-1.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 d5784b26e22a346b22bf75ab92b6b5a903b444f7de9f7f781933229b2fdc9254
MD5 c7fae7e01357f5e7f2088967bdc9fb85
BLAKE2b-256 c7c86712ab2c0c12bd56a42e798302e7e6a581921966f5a019fc9507460eb5bd

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