我有一个图像列表,其中包括['1.jpg',......,'1000.jpg']
。
我需要第一个数据加载器按顺序加载图像列表。
有时,我需要第二个数据加载器来加载反向图像列表,该列表包含到目前为止的部分图像,例如['55.jpg',...,'1.jpg'], or ['999.jpg', ..., '1.jpg']
但是,当我在代码中使用这两个数据加载器时,我的程序有时会静音。 GPU内存并不是内存不足,但是 Volatile GPU-Util始终为零,这似乎是发生了锁定。
代码如下:
# main function, first dataloader, ['1.jpg', ..., '1000.jpg']
seq_dt = SequenceLoader(ori_image_list)
seq_loader = DataLoader(seq_dt, batch_size=1, shuffle=False, sampler=None, num_workers=1, pin_memory=True)
for current_image_idx, img in enumerate(seq_laoder):
if my_condition:
flag = my_function(current_image_idx, ori_image_list)
我将在函数中生成第二个数据加载器
def my_function(current_image_idx, ori_image_list):
backward_image_list = ori_image_list[:current_image_idx]
backward_image_list.reverse()
seq_dt = SequenceLoader(backward_image_list)
seq_loader = DataLoader(seq_dt, batch_size=1, shuffle=False, sampler=None,
num_workers=1, pin_memory=True)
for image_idx, img in enumerate(seq_loader):
...
...
my_variable = ...
...
if my_variable<my_threshold:
return my_flag
return False
在main函数中,有时我会执行my_function
。
有时, my_function
程序无法返回到主要功能。
如果我将第二个数据加载器中的num_workers
参数更改为0,则不会发生任何故障,但是速度很慢。
这是SequenceLoader
import os
import numpy as np
import cv2
import torch
import torchvision
from torch.utils.data import Dataset, DataLoader
from torchvision.transforms import ToTensor
class SequenceLoader(Dataset):
''' A dataset for loading images from a sequence '''
def __init__(self, image_list):
self.image_list = image_list
def __getitem__(self, idx):
# load images in PIL format
# img = Image.open()
img = cv2.imread(self.image_list[idx], cv2.IMREAD_COLOR).astype(np.float32)
img_tensor = torch.from_numpy(img.transpose((2, 0, 1)))
return img_tensor
def __len__(self):
return len(self.image_list)