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 0.4.1).
  • 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.2.1-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.2.1.post1.tar.gz (18.9 kB view details)

Uploaded Source

Built Distributions

File details

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

File metadata

  • Download URL: nnutils_pytorch-0.2.1.post1.tar.gz
  • Upload date:
  • Size: 18.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/40.2.0 requests-toolbelt/0.8.0 tqdm/4.26.0 CPython/3.5.2

File hashes

Hashes for nnutils_pytorch-0.2.1.post1.tar.gz
Algorithm Hash digest
SHA256 797ab17cbe59d287588d2d33df3a45f14c93405525a77bbab146ce24603f961b
MD5 931a38ca7b3f599db21ac25738acb31c
BLAKE2b-256 2c0d9e5f2a8a1c2a72769c2cd3126f670509a4858d213936cffe158296117b2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nnutils_pytorch-0.2.1.post1-cp37-cp37m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 182a533691e9c7acc7e9a9bbbceaaf45dd5228a469dc1be67d62de285b0d9ffa
MD5 23ec2467d3267ad18ef37c2910660333
BLAKE2b-256 4ab5cdf3fb5acdec783f28886d2634356fcd33c9978de192cecb4bdbd93ae494

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nnutils_pytorch-0.2.1.post1-cp36-cp36m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 f6db73f1ec15eb783b6040687a65e8a9ca3aac1e0c2b394ac7805efd4d2b98ea
MD5 001c596bef5e3c334131bd82da84b080
BLAKE2b-256 bc06f70de95087586c02deeca08feece45e735bc3925197d402fe604baaa0478

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nnutils_pytorch-0.2.1.post1-cp35-cp35m-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 52a10949aee539170cb415a092a81e97f51cbc3661c8b547d245941460f52ba3
MD5 bc36d37de05892ae633b0d81e450a2c9
BLAKE2b-256 bffc03eb79604e16f6d5e7a90cf6d93edb8fad6e2ed18bcf73dbf40c196b4011

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for nnutils_pytorch-0.2.1.post1-cp27-cp27mu-manylinux1_x86_64.whl
Algorithm Hash digest
SHA256 8ae71696dc817134ba567fc33ddba3019ddc46910ea4f5b79e328c3b42dd2300
MD5 88d813675bc2be7d6db9fe8e98ee8c02
BLAKE2b-256 84d6b99470d2f1d538b628a4191e0e5bc65fded01de09942bcd88a5c2ff5e4da

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