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())