У меня есть список изображений, который включает в себя ['1.jpg',......,'1000.jpg']
.
Мне нужен первый загрузчик данных для загрузки списка изображений по порядку.
В какой-то момент мне нужен второй загрузчик данных для загрузки списка изображений reverse , который до сих пор содержит часть изображений, например, ['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
В основной функции я буду выполнять 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)