#这是我定义的类,用于数据处理
class Images(paddle.io.Dataset):
def __init__(self, ds_dir_name, normalize=100, classify=False):
self.df = pd.read_csv(ds_dir_name, header=None, encoding="ISO-8859-1")
#计算体重平均值
self.mean = pd.read_csv(ds_dir_name, header=None, encoding="ISO-8859-1").iloc[:, 5].mean()
#计算均方差
self.std = pd.read_csv(ds_dir_name, header=None, encoding="ISO-8859-1").iloc[:, 5].std()
self.to_tensor1 = transforms.ToTensor()
self.to_tensor = transforms.Compose([transforms.Resize((128, 128)), transforms.ToTensor()])
self.norm = normalize
self.classify = classify
def __len__(self):
return len(self.df)
def __getitem__(self, index):
image_name = '/home/aistudio/work/data/REDDIT_WEIGHT_DATASET//' + self.df.iloc[index,6]
mask_name = '/home/aistudio/work/data/Mask//' + self.df.iloc[idx,6]
joint_name = '/home/aistudio/work/data/Reddit-Joints//' + self.df.iloc[index,6].replace('jpg', 'npy')
img_name = self.df.iloc[index,6].split('.')[0]
if self.classify:
weight = int(np.round(self.df.iloc[idx, 5]))
if weight < 41:
weight = 0
elif weight >= 167:
weight = 15
else:
weight = int((weight - 41) / 9) + 1
else:
weight = InputSpec.from_numpy(np.array([float(self.df.iloc[idx, 5]) / self.norm])).dtype('float32')
#image_name = InputSpec.from_numpy(image_name)
# Reading Image
X = Image.open(image_name).convert('RGB')
#X = cv2.cvtColor(cv2.imread(image_name), cv2.COLOR_BGR2RGB).astype('float32')
#X = self.to_tensor(X)
X = np.array(X)
# Reading Mask
y_mask = (cv2.imread(mask_name, 0) > 100).astype('float32')
y_mask = Categorical(y_mask, 2)
#y_mask = self.to_tensor1(y_mask)
y_mask = np.array(y_mask)
# Reading Joint
y_heatmap = np.load(joint_name).astype('int64') # np.zeros((128,128)) # For Heatmaps
#y_heatmap = np.array(y_heatmap)
return image_name, X, y_mask, y_heatmap, weight
#这是我的测试语句
dataset = Images('/home/aistudio/data/Train.csv',normalize = 100,classify = True)
train_data = paddle.io.DataLoader(dataset, batch_size=5, shuffle=True, num_workers=0, drop_last=True)
image_name,X,y_mask,y_heatmap,weight = next(train_data())
#报错信息
2021-04-28 09:08:21,858 - ERROR - DataLoader reader thread raised an exception!
Traceback (most recent call last):
File "test.py", line 11, in
image_name,X,y_mask,y_heatmap,weight = next(train_data())
File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/paddle/fluid/dataloader/dataloader_iter.py", line 779, in __next__
data = self._reader.read_next_var_list()
SystemError: (Fatal) Blocking queue is killed because the data reader raises an exception.
[Hint: Expected killed_ != true, but received killed_:1 == true:1.] (at /paddle/paddle/fluid/operators/reader/blocking_queue.h:158)
num_workers 改小些试试
原来已经是0了,那就把__getitem__()里的语句一行行注释调试吧
这个函数里的错误只报 raises an exception,得自己定位
解决了吗