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: 2.7, 3.5, 3.6 or 3.7 (tested with version 2.7, 3.5, 3.6 and 3.7).
  • PyTorch (tested with version 1.0.0).
  • C++11 compiler (tested with GCC 4.8.2, 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.3.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 4.9 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.3.1.post1.tar.gz (18.5 kB view details)

Uploaded Source

Built Distributions

File details

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

File metadata

  • Download URL: nnutils_pytorch-0.3.1.post1.tar.gz
  • Upload date:
  • Size: 18.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.21.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.30.0 CPython/3.6.8

File hashes

Hashes for nnutils_pytorch-0.3.1.post1.tar.gz
Algorithm Hash digest
SHA256 ced9877c3f64fa434a1f9dd457f1cad8aec276bd8a99a183bd6d185a05a720ff
MD5 cf60a80975e67d4e3955dad36d943979
BLAKE2b-256 597f5747a85075e756f6688e38c2a022dafbc7e1f35d51ed192eae60a4d10bb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nnutils_pytorch-0.3.1.post1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3c4527ca8370e421b90a9cb368e89fc86868cc7849b69616d0b7d94ea0c87eca
MD5 73397b8497bd696c3db4f3551ffca64c
BLAKE2b-256 4116910bda944019130afab95709c6feff198ee2e9a6bce2401dc81b67bdc707

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nnutils_pytorch-0.3.1.post1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 59e2b567c774639009893821eb8ab038585c38cbe4be75b7cc10058613f9978d
MD5 072ccf6b6bbd5c92cd7b173670b144ba
BLAKE2b-256 52e89447e1c039600325458b3d9202b9a10e1db5d924d64ee41066a3a283a9dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nnutils_pytorch-0.3.1.post1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 3eb4ae9ae6726b25fe2fcf7ca2e07c1f425f8124df7cfc2a7a476fa0105680a1
MD5 08e70a80f98f1821eea90d34bd25fdf4
BLAKE2b-256 f9db61aa8eb92f72325afd603f62cd6261a98953e7b99bdbf8d3e788c3677554

See more details on using hashes here.

File details

Details for the file nnutils_pytorch-0.3.1.post1-cp27-cp27mu-manylinux1_x86_64.whl.

File metadata

File hashes

Hashes for nnutils_pytorch-0.3.1.post1-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 fb3cae244fcd95d6b0a863dc8bd2c258495d19911e513e960293caa1b6570a89
MD5 11d618627130446271f7615ea15609cf
BLAKE2b-256 b7ca7b5997f392a266c17a0ad3c57fff67cf39a7f8d2f649b3882e8b277e14b3

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