Skip to main content

PyTorch bindings of the nnutils library

Project description

nnutils-pytorch

Build Status

PyTorch bindings of different neural network-related utilities implemented for CPUs and GPUs (CUDA).

So far, most of the utils are related to my need of working with images of different sizes grouped into batches with padding.

Included functions

Adaptive pooling

Adaptive pooling layers included in several packages like Torch or PyTorch assume that all images in the batch have the same size. This implementation takes into account the size of each individual image within the batch (before padding) to apply the adaptive pooling.

Currently implemented: Average and maximum adaptive pooling.

import torch
from nnutils_pytorch import adaptive_avgpool_2d, adaptive_maxpool_2d

# Two random images, with three channels, 10 pixels height, 12 pixels width
x = torch.rand(2, 3, 10, 12)
# Matrix (N x 2) containing the height and width of each image.
xs = torch.tensor([[10, 6], [6, 12], dtype=torch.int64)

# Pool images to a fixed size, taking into account the original size of each
# image before padding.
#
# Output tensor has shape (2, 3, 3, 5)
y1 = adaptive_avgpool_2d(batch_input=x, output_sizes=(3, 5), batch_sizes=xs)

# Pool a single dimension of the images, taking into account the original
# size of each image before padding. The None dimension is not pooled.
#
# Output tensor has shape (2, 3, 5, 12)
y2 = adaptive_maxpool_2d(x, (5, None), xs)

Important: The implementation assumes that the images are aligned to the top-left corner.

Masking images by size

If you are grouping images of different sizes into batches padded with zeros, you may need to mask the output/input tensors after/before some layers. This layer is very handy (and efficient) in these cases.

import torch
from nnutils_pytorch import mask_image_from_size

# Two random images, with three channels, 10 pixels height, 12 pixels width
x = torch.rand(2, 3, 10, 12)
# Matrix (N x 2) containing the height and width of each image.
xs = torch.tensor([[10, 6], [6, 12], dtype=torch.int64)

# Note: mask_image_from_size is differentiable w.r.t. x
y = mask_image_from_size(x, xs, mask_value=0)  # mask_value is optional.

Important: The implementation assumes that the images are aligned to the top-left corner.

Requirements

  • Python: 3.6, 3.7 or 3.8 (tested with version 3.6, 3.7 and 3.8).
  • PyTorch >= 1.6.0 (tested with version 1.6.0).
  • C++14 compiler (tested with GCC 7.5.0).
  • For GPU support: CUDA Toolkit.

Installation

The installation process should be pretty straightforward assuming that you have correctly installed the required libraries and tools.

The setup process compiles the package from source, and will compile with CUDA support if this is available for PyTorch.

From Pypi (recommended)

pip install nnutils-pytorch

You may find the package already compiled for different Python, CUDA and CPU configurations in: http://www.jpuigcerver.net/projects/nnutils-pytorch/whl/

For instance, if you want to install the CPU-only version for Python 3.7:

pip install http://www.jpuigcerver.net/projects/nnutils-pytorch/whl/cpu/nnutils_pytorch-1.6.0-cp37-cp37m-linux_x86_64.whl

From GitHub

git clone https://github.com/jpuigcerver/nnutils.git
cd nnutils/pytorch
python setup.py build
python setup.py install

AVX512 related issues

Some compiling problems may arise when using CUDA and newer host compilers with AVX512 instructions. Please, install GCC 7.5 or above and use it as the host compiler for NVCC 10.2. You can simply set the CC and CXX environment variables before the build/install commands:

CC=gcc-4.9 CXX=g++-4.9 pip install nnutils-pytorch

or (if you are using the GitHub source code):

CC=gcc-4.9 CXX=g++-4.9 python setup.py build

Testing

You can test the library once installed using unittest. In particular, run the following commands:

python -m unittest nnutils_pytorch.adaptive_avgpool_2d_test
python -m unittest nnutils_pytorch.adaptive_maxgpool_2d_test
python -m unittest nnutils_pytorch.mask_image_from_size_test

All tests should pass (CUDA tests are only executed if supported).

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

File details

Details for the file nnutils_pytorch-1.13.0-cp311-cp311-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-1.13.0-cp311-cp311-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 63fadd8de28cde41451c527ecfd1972a01a2efe6df77f32b70c587eb47ae9fa2
MD5 e2396afee8cae7bf9cce7436363cfdbd
BLAKE2b-256 a5fb317ea8a7ab02256b640a1976eda3f1ca50f44d6cd41a69c397426cdb342c

See more details on using hashes here.

File details

Details for the file nnutils_pytorch-1.13.0-cp310-cp310-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-1.13.0-cp310-cp310-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 204f2be1cff6192dbec680fca14ce9f4a8301f30dbd9c65c517f7d9505cc0502
MD5 f51895f603f9a5637ebb19a3e279aa3b
BLAKE2b-256 a8c495a8c6e221ac8dfe0835a71edb300bbd870c2faef5e5558ccbe9b1dcc87d

See more details on using hashes here.

File details

Details for the file nnutils_pytorch-1.13.0-cp39-cp39-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-1.13.0-cp39-cp39-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 2ae5d8389b2b3b964ba3868763036c7989348811f1c19ca0d8f9ba26f537832f
MD5 afb692ef7cc88dcc5b8d5fe868aba031
BLAKE2b-256 40abed3fd54cb1a67f4c84c5f7c4b645e4a02840d927fd78de087a342ffd9223

See more details on using hashes here.

File details

Details for the file nnutils_pytorch-1.13.0-cp38-cp38-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-1.13.0-cp38-cp38-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 925234f1416ae7a5de914fc6563615c99822098f298e0d069d78e930f38e87b2
MD5 112f601313ef837db36e29120478a5e6
BLAKE2b-256 6fb9f6e82436b516262ee2891c2cb6ade894e805ad59d70102c40451449c1f41

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