官方文档:https://docs.nvidia.com/deeplearning/dali/user-guide/docs/installation.html
一、安装
TIPS: 我的版本是CUDA 11.4,我安装的是11.0版本的,没啥影响
1.cuda10.2
pip install --extra-index-url https://developer.download.nvidia.com/compute/redist --upgrade nvidia-dali-cuda102
2.cuda 11.0
pip install --extra-index-url https://developer.download.nvidia.com/compute/redist --upgrade nvidia-dali-cuda110
二、Pipeline
1.基本使用
Pipeline是DALI模块处理数据的核心概念,定义在nvidia.dali.Pipeline
(from nvidia.dali.pipeline import Pipeline)中
from nvidia.dali import pipeline_def
import nvidia.dali.fn as fn
import nvidia.dali.types as types
#随便找些图,给images下建几个文件夹,在文件夹下图片就行了
image_dir = "data/images"
max_batch_size = 8
@pipeline_def
def simple_pipeline():
jpegs, labels = fn.readers.file(file_root=image_dir,random_shuffle=True)
#device的'mixed'指使用GPU和CPU混合解码,这对于大分辨率的JPEG图像非常有效,也可以只使用CPU解码
images = fn.decoders.image(jpegs, device='mixed').gpu()
return images, labels
pipe = simple_pipeline(batch_size=max_batch_size, num_threads=1, device_id=0)
pipe.build()
#运行,得到一个batch的结果
pipe_out = pipe.run()
images, labels = pipe_out
上面最后一步,我们得到了图片和对应的标签,接下来将images保存成文件。labels的值通过print(np.array(labels.as_tensor()))
获取
import matplotlib.gridspec as gridspec
import matplotlib.pyplot as plt
def show_images(image_batch):
columns = 4
rows = (max_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.savefig("dummy_name.png")
show_images(images.as_cpu())
打开dummy_name.png
文件即可看到图片。
2.增强功能
随机图片旋转,空白处补1,(更多的参数阅读官方文档)
@pipeline_def
def simple_pipeline():
jpegs, labels = fn.readers.file(file_root=image_dir,random_shuffle=True)
images = fn.decoders.image(jpegs, device='mixed').gpu()
angle = fn.random.uniform(range=(-10.0, 10.0))
rotated_images = fn.rotate(images, angle=angle, fill_value=1)
return rotated_images, labels
3. 提示
DALI模块不支持在管道内将数据从GPU移动到CPU中。
三、实现
通过继承Pipeline
类并重写define_graph
方法
以后补