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.5, 3.6 or 3.7 (tested with version 3.5, 3.6 and 3.7).
  • PyTorch >= 1.4.0 (tested with version 1.4.0).
  • C++11 compiler (tested with GCC 5.5.0, 6.4.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-0.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 5.0 or above and use it as the host compiler for NVCC. 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 Distribution

nnutils_pytorch-0.6.0.post1.tar.gz (18.6 kB view details)

Uploaded Source

Built Distributions

File details

Details for the file nnutils_pytorch-0.6.0.post1.tar.gz.

File metadata

  • Download URL: nnutils_pytorch-0.6.0.post1.tar.gz
  • Upload date:
  • Size: 18.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.23.0 setuptools/45.2.0 requests-toolbelt/0.9.1 tqdm/4.43.0 CPython/3.6.9

File hashes

Hashes for nnutils_pytorch-0.6.0.post1.tar.gz
Algorithm Hash digest
SHA256 c229b92e46fb94ca284fd8ac38bedf6f49878f9506f2765439b7410f5e2332fb
MD5 b37510119d38d0959a52f4eb7efb0aef
BLAKE2b-256 eaf44023c71881ea2d8e75a1fde0f3f2b80ad5600c98f8a748407491cd335008

See more details on using hashes here.

File details

Details for the file nnutils_pytorch-0.6.0.post1-cp37-cp37m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-0.6.0.post1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 a8780e0344f0e340c20e6f01df2ff2e09b70a04b71ff284e29c48e3ce1920905
MD5 830b31db808ed818fe9d8717274841bc
BLAKE2b-256 19e63e11cf3a97ecfad5d87a3890dde44b57ebe3a20ce7a336672a60604286e5

See more details on using hashes here.

File details

Details for the file nnutils_pytorch-0.6.0.post1-cp36-cp36m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-0.6.0.post1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e05cf733c2b59f35e48d8ee6d2c0caabc90e285299e279750f4a6ada0392e92c
MD5 2313ae126c6d6f59783265976ce47e95
BLAKE2b-256 0cdb9881320794c258810e259abcf42fc936e21509af83febbe5b87d6f3fbb6d

See more details on using hashes here.

File details

Details for the file nnutils_pytorch-0.6.0.post1-cp35-cp35m-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-0.6.0.post1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 e3c6f2161664ccb9d0a39f697d6009e23ff0db82eb0d82c209b1319bf1f4674a
MD5 3af32448b9addcee2b262d0ec837c74d
BLAKE2b-256 c351c5e1c4de17e27182e3b7c9794263b1c7c7e14e5efcc5bf07b3eea9322224

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