NVIDIA DALI
0.17.0 -e61c304
Version select:
  • Documentation home

User Guide

  • Installation
    • DALI and NGC
    • Installing prebuilt DALI packages
      • Prerequisites
      • Installation
        • Pre-built packages in Watson Machine Learing Community Edition
        • Nightly and weekly release channels
  • Compiling DALI from source
    • Compiling DALI from source (using Docker builder) - recommended
      • Prerequisites
      • Building Python wheel and (optionally) Docker image
    • Compiling DALI from source (bare metal)
      • Prerequisites
      • Get the DALI source
      • Make the build directory
      • Compile DALI
      • Building DALI without LMDB support:
      • Building DALI with LMDB support:
      • Building DALI using Clang (experimental):
      • Install Python bindings
    • Cross-compiling DALI C++ API for aarch64 Linux (Docker)
      • Build the aarch64 Linux Build Container
      • Compile
    • Cross-compiling DALI C++ API for aarch64 QNX (Docker)
      • Setup
      • Build the aarch64 Build Container
      • Compile
  • Getting started
    • Overview
    • Optimal configuration
    • Pipeline
      • Defining the pipeline
      • Building the pipeline
      • Running the pipeline
    • Adding augmentations
      • Random shuffle
      • Augmentations
      • Tensors as arguments and Random Number Generation
    • GPU acceleration
      • Copying tensors to GPU
        • Important notice
      • Hybrid decoding
  • Tutorials
    • Data Loading
      • Data loading: LMDB database
        • Overview
        • Caffe LMDB format
        • Caffe 2 LMDB format
      • Data loading: MXNet recordIO
        • Overview
        • Creating index
        • Defining and running the pipeline
      • Data loading: TensorFlow TFRecord
        • Overview
        • Creating index
        • Defining and running the pipeline
      • ExternalSource operator
        • Defining the iterator
        • Defining the pipeline
        • Using the pipeline
      • COCO Reader
      • Simple Video pipeline reading from multiple files
        • Goal
        • Setting up
        • Running the pipeline
        • Visualizing the results
      • Video pipeline reading labelled videos from a directory
        • Goal
        • Setting up
        • Running the pipeline
        • Visualizing the results
      • Simple Sequence pipeline reading from multiple files
    • Serialization
      • Overview
      • Serialization
    • COCO Reader with augmentations
    • Augmentation Gallery
    • WarpAffine
      • Introduction
        • Warp operators
        • Affine transform
      • Usage example
      • Example output
    • 3D Transforms
      • Warp operators
        • Affine transform
        • 3D Rotation
      • Usage example
      • Example output
    • Color Space Conversion
      • Defining the pipeline
      • Building and running the pipeline
      • Visualizing the results
    • Image Decoder examples (CPU)
      • Common code
      • Image Decoder (CPU)
      • Image Decoder (CPU) with random cropping window size and anchor
      • Image Decoder with fixed cropping window size and external anchor
      • Image Decoder (CPU) with external window size and anchor
    • Image Decoder (Hybrid)
      • Image Decoder (Hybrid) with random cropping window size and anchor
      • Image Decoder (Hybrid) with fixed cropping window size and external anchor
      • Image Decoder (Hybrid) with external window size and anchor
    • Multiple GPU support
      • Overview
      • Run pipeline on selected GPU
      • Sharding
    • Example VideoReader usage: Video Super-Resolution
      • Dataloaders
      • Data loader performance
      • Requirements
      • FlowNet2-SD implementation and pre-trained model
      • Data
      • Training
      • Results on Myanmar validation set
      • Reference
    • Optical Flow example
      • Using Dali
        • Define the Pipeline.
        • Build and run DALI Pipeline.
        • Visualize results
    • Create a custom operator
      • Operator definition
      • CPU operator implementation
      • GPU operator implementation
      • Building the plugin
      • Importing the plugin
    • Python Operator
      • Defining an operator implementation
      • Example pipeline
      • Running the pipeline and visualizing results
    • DALI expressions and arithmetic operations
      • DALI expressions and arithmetic operators
        • Supported operators
        • Operating on tensors
        • Constant and scalar operands
        • Constants
        • Scalars
      • DALI binary arithmetic operators - type promotions
        • Prepare the test pipeline
        • Defining the data
        • Defining the pipeline
        • Using the Pipeline
      • Custom augmentations with arithmetic operations
        • Blending images
    • Audio processing with DALI
      • Audio spectrogram
        • Background
        • Reference implementation
        • Calculating the spectrogram using DALI
        • Mel spectrogram
  • Framework integration
    • MXNet
      • Gluon example with DALI
        • Overview
        • Sample
      • ExternalSource operator
        • Defining the iterator
        • Defining the pipeline
        • Using the pipeline
      • MXNet with DALI - ResNet 50 example
        • Overview
        • ResNet 50 pipeline
        • Training with MXNet
      • Using MXNet DALI plugin: using various readers
        • Overview
      • MXNet Plugin API reference
    • PyTorch
      • Using DALI in PyTorch
        • Overview
      • ExternalSource operator
        • Defining the iterator
        • Defining the pipeline
        • Using the pipeline
      • Using PyTorch DALI plugin: using various readers
        • Overview
      • ImageNet training in PyTorch
        • Requirements
        • Training
        • Usage
      • Single Shot MultiBox Detector training in PyTorch
        • Requirements
        • Usage
      • PyTorch Plugin API reference
    • TensorFlow
      • ResNet-N with TensorFlow and DALI
        • Requirements
      • Using Tensorflow DALI plugin: DALI and tf.data
        • Overview
        • Keras
        • Estimators
        • Custom models and training loops
      • Using Tensorflow DALI plugin: DALI tf.data.Dataset with multiple GPUs
        • Overview
      • Using Tensorflow DALI plugin with sparse tensors
        • Overview
        • Defining the data loading pipeline
        • Using DALI TensorFlow plugin
        • Using the tensors in a simple Tensorflow graph
      • Using Tensorflow DALI plugin: simple example
        • Overview
        • Defining the data loading pipeline
        • Using DALI TensorFlow plugin
        • Using the tensors in a simple Tensorflow graph
      • Using Tensorflow DALI plugin: using various readers
        • Overview
      • TensorFlow Plugin API reference
    • PaddlePaddle
      • Using DALI in PaddlePaddle
        • Overview
      • ExternalSource operator
        • Defining the iterator
        • Defining the pipeline
        • Using the pipeline
      • Using Paddle DALI plugin: using various readers
        • Overview
      • ResNet training in PaddlePaddle
        • Training
        • Usage
      • Single Shot MultiBox Detector training in PaddlePaddle
        • Requirements
        • Usage
      • Temporal Shift Module inference in PaddlePaddle
        • Requirements
        • Usage
      • PaddlePaddle Plugin API reference
  • Python API
    • Pipeline
    • Tensor
    • TensorList
    • Enums
  • Supported operations
  • Advanced topics
    • DALI internal data format
    • Thread affinity
    • Memory consumption
    • Operator buffer presizing
    • Prefetching queue depth
    • Running DALI pipeline
    • C++ API
NVIDIA DALI
  • Docs »
  • Tutorials »
  • Augmentation Gallery
  • View page source

Augmentation GalleryΒΆ

This example showcases different augmentations possible with DALI.

[1]:
from __future__ import division
from nvidia.dali.pipeline import Pipeline
import nvidia.dali.ops as ops
import nvidia.dali.types as types
import numpy as np
from timeit import default_timer as timer
import numpy as np
import matplotlib.pyplot as plt
import math
import os.path

test_data_root = os.environ['DALI_EXTRA_PATH']
db_folder = os.path.join(test_data_root, 'db', 'lmdb')

class HybridPipe(Pipeline):
    def __init__(self, batch_size, num_threads, device_id, pipelined = True, exec_async = True):
        super(HybridPipe, self).__init__(batch_size, num_threads, device_id, seed = 12, exec_pipelined=pipelined, exec_async=exec_async)
        self.input = ops.CaffeReader(path = db_folder, random_shuffle = True)
        self.decode = ops.ImageDecoder(device = "mixed", output_type = types.RGB)
        self.augmentations = {}
        # input is sampled randomly for output pixel's neighbourhood
        self.augmentations["jitter"] = ops.Jitter(device = "gpu")
        # transforms sampling coordinates to produce wavy patterns
        self.augmentations["water"] = ops.Water(device = "gpu")
        # applies fisheye distortion
        self.augmentations["shpere"] = ops.Sphere(device = "gpu")
        # rotates the image, enlarging the canvas
        self.augmentations["rotate"] = ops.Rotate(device = "gpu", angle = 30, interp_type = types.INTERP_LINEAR, fill_value = 0)
        # applies affine transform
        self.augmentations["warpaffine"] = ops.WarpAffine(device = "gpu", matrix = [1.0, 0.8, 0.0, 0.0, 1.2, 0.0],
                                                 interp_type = types.INTERP_LINEAR)
        # manipulates brightness and contrast of the image
        self.augmentations["brightness_contrast"] = ops.BrightnessContrast(device = "gpu", brightness = 0.5, contrast = 1.5)
        # twists colors of the image
        self.augmentations["hsv"] = ops.Hsv(device = "gpu", hue = 45., saturation = 0.2)
        # places the image on a larger canvas
        self.augmentations["paste"] = ops.Paste(device = "gpu", ratio = 2., fill_value = (55, 155, 155),
                                            paste_x = .1, paste_y = .7)
        # param resizes the image so that the shorter edge is exactly 400px long
        self.augmentations["resize"] = ops.Resize(device = "gpu", resize_shorter = 480)
        # param flips the image
        self.augmentations["flip"] = ops.Flip(device = "gpu", vertical = 1, horizontal = 0)
        self.iter = 0

    def define_graph(self):
        self.jpegs, self.labels = self.input()
        images = self.decode(self.jpegs)
        n = len(self.augmentations)
        outputs = [images for _ in range(n+1)]
        aug_list = list(self.augmentations.values())
        # outputs[0] is the original cropped image
        for i in range(n):
            outputs[i+1] = aug_list[i](outputs[i+1])
        return [self.labels] + outputs

    def iter_setup(self):
        pass
[2]:
batch_size = 32

pipe = HybridPipe(batch_size=batch_size, num_threads=2, device_id = 0)
pipe.build()
[3]:
pipe_out = pipe.run()
[4]:
n = 5
from synsets import imagenet_synsets
import matplotlib.gridspec as gridspec
len_outputs = len(pipe_out) - 1
augmentations = ["original"] + list(pipe.augmentations.keys())
fig = plt.figure(figsize = (16,16))
plt.suptitle(imagenet_synsets[pipe_out[0].at(n)[0]], fontsize=16)
columns = 4
rows = int(math.ceil(len_outputs / columns))
gs = gridspec.GridSpec(rows, columns)
for i in range(len_outputs):
    plt.subplot(gs[i])
    plt.axis("off")
    plt.title(augmentations[i])
    pipe_out_cpu = pipe_out[1 + i].as_cpu()
    img_chw = pipe_out_cpu.at(n)
    plt.imshow((img_chw)/255.0)
../_images/examples_augmentation_gallery_4_0.png
Next Previous

© Copyright 2018-2019, NVIDIA Corporation

Built with Sphinx using a theme provided by Read the Docs.