天天看點

NVIDIA DALI從入門到放棄之二:入門示例

NVIDIA DALI從入門到放棄之一:概述

NVIDIA DALI從入門到放棄之二:入門示例

NVIDIA DALI從入門到放棄之三:Data Loading

NVIDIA DALI從入門到放棄之四:Multiple GPU

NVIDIA DALI從入門到放棄之五:Image Processing

NVIDIA DALI從入門到放棄之六:Geometric Transforms

NVIDIA DALI從入門到放棄之七:Sequence Processing

NVIDIA DALI從入門到放棄之八:PyTorch Plugin API

圖檔檔案目錄結構如下:

├── ants

│ ├── 10308379_1b6c72e180.jpg

│ ├── 11381045_b352a47d8c.jpg

├── bees

│ ├── 10870992_eebeeb3a12.jpg

│ ├── 144098310_a4176fd54d.jpg

└── img_list.txt

img_list.txt内容

from nvidia.dali.pipeline import Pipeline
import nvidia.dali.fn as fn
import nvidia.dali.ops as ops
import nvidia.dali.types as types
import numpy as np

import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt

image_dir = "/home/lmin/data/aDALI"
batch_size = 8


def show_images(image_batch):
    columns = 4
    rows = (batch_size + 1) // (columns)
    fig = plt.figure(figsize = (32,(32 // columns) * rows))
    gs = gridspec.GridSpec(rows, columns)
    for j in range(rows*columns):
        plt.subplot(gs[j])
        plt.axis("off")
        plt.imshow(image_batch.at(j))
    plt.show()


class SimplePipeline(Pipeline):
    def __init__(self, batch_size, num_threads, device_id):
        super(SimplePipeline, self).__init__(batch_size, num_threads, device_id, seed = 12)
        self.input = ops.FileReader(file_root = image_dir, random_shuffle=True, initial_fill=16)
        # instead of path to file directory file with pairs image_name image_label_value can be provided
        # self.input = ops.FileReader(file_root = image_dir, file_list = image_dir + '/file_list.txt')
        self.decode = ops.ImageDecoder(device = 'mixed', output_type = types.RGB)
        self.resizedCrop = ops.RandomResizedCrop(device="gpu", size=224, random_area=[0.08, 1.25])

    def define_graph(self):
        jpegs, labels = self.input()
        images = self.decode(jpegs)
        images = self.resizedCrop(images)
        return (images, labels)


pipe = SimplePipeline(batch_size, 1, 0)
pipe.build()

pipe_out = pipe.run()
print(pipe_out)

images, labels = pipe_out
show_images(images.as_cpu())      

繼續閱讀