我在复现ESRGAN相关程序时遇到了如下问题。 libpng 错误:读取错误
Traceback (most recent call last):
File "/sda/ZTL/B/codes/train.py", line 173, in <module>
main()
File "/sda/ZTL/B/codes/train.py", line 97, in main
for _, train_data in enumerate(train_loader):
File "/root/anaconda3/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 637, in __next__
return self._process_next_batch(batch)
File "/root/anaconda3/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 658, in _process_next_batch
raise batch.exc_type(batch.exc_msg)
AttributeError: Traceback (most recent call last):
File "/root/anaconda3/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 138, in _worker_loop
samples = collate_fn([dataset[i] for i in batch_indices])
File "/root/anaconda3/lib/python3.6/site-packages/torch/utils/data/dataloader.py", line 138, in <listcomp>
samples = collate_fn([dataset[i] for i in batch_indices])
File "/sda/ZTL/B/data/LRHR_dataset.py", line 51, in __getitem__
img_HR = util.read_img(self.HR_env, HR_path)
File "/sda/ZTL/B/data/util.py", line 79, in read_img
img = img.astype(np.float32) / 255.
AttributeError: 'NoneType' object has no attribute 'astype'
我试图找到发生错误的行的代码。
File "/sda/ZTL/B/data/util.py", line 79, in read_img
def read_img(env, path):
# read image by cv2 or from lmdb
# return: Numpy float32, HWC, BGR, [0,1]
if env is None: # img
img = cv2.imread(path, cv2.IMREAD_UNCHANGED)
else:
img = _read_lmdb_img(env, path)
img = img.astype(np.float32) / 255.
if img.ndim == 2:
img = np.expand_dims(img, axis=2)
# some images have 4 channels
if img.shape[2] > 3:
img = img[:, :, :3]
return img
File "/sda/ZTL/B/data/LRHR_dataset.py", line 51, in __getitem__
def __getitem__(self, index):
HR_path, LR_path = None, None
scale = self.opt['scale']
HR_size = self.opt['HR_size']
# get HR image
HR_path = self.paths_HR[index]
img_HR = util.read_img(self.HR_env, HR_path)
# modcrop in the validation / test phase
if self.opt['phase'] != 'train':
img_HR = util.modcrop(img_HR, scale)
# change color space if necessary
if self.opt['color']:
img_HR = util.channel_convert(img_HR.shape[2], self.opt['color'], [img_HR])[0]
# get LR image
if self.paths_LR:
LR_path = self.paths_LR[index]
img_LR = util.read_img(self.LR_env, LR_path)
else: # down-sampling on-the-fly
# randomly scale during training
if self.opt['phase'] == 'train':
random_scale = random.choice(self.random_scale_list)
H_s, W_s, _ = img_HR.shape
def _mod(n, random_scale, scale, thres):
rlt = int(n * random_scale)
rlt = (rlt // scale) * scale
return thres if rlt < thres else rlt
H_s = _mod(H_s, random_scale, scale, HR_size)
W_s = _mod(W_s, random_scale, scale, HR_size)
img_HR = cv2.resize(np.copy(img_HR), (W_s, H_s), interpolation=cv2.INTER_LINEAR)
# force to 3 channels
if img_HR.ndim == 2:
img_HR = cv2.cvtColor(img_HR, cv2.COLOR_GRAY2BGR)
H, W, _ = img_HR.shape
# using matlab imresize
img_LR = util.imresize_np(img_HR, 1 / scale, True)
if img_LR.ndim == 2:
img_LR = np.expand_dims(img_LR, axis=2)
if self.opt['phase'] == 'train':
# if the image size is too small
H, W, _ = img_HR.shape
if H < HR_size or W < HR_size:
img_HR = cv2.resize(
np.copy(img_HR), (HR_size, HR_size), interpolation=cv2.INTER_LINEAR)
# using matlab imresize
img_LR = util.imresize_np(img_HR, 1 / scale, True)
if img_LR.ndim == 2:
img_LR = np.expand_dims(img_LR, axis=2)
print(img_LR)
H, W, C = img_LR.shape
LR_size = HR_size // scale
# randomly crop
rnd_h = random.randint(0, max(0, H - LR_size))
rnd_w = random.randint(0, max(0, W - LR_size))
img_LR = img_LR[rnd_h:rnd_h + LR_size, rnd_w:rnd_w + LR_size, :]
rnd_h_HR, rnd_w_HR = int(rnd_h * scale), int(rnd_w * scale)
img_HR = img_HR[rnd_h_HR:rnd_h_HR + HR_size, rnd_w_HR:rnd_w_HR + HR_size, :]
# augmentation - flip, rotate
img_LR, img_HR = util.augment([img_LR, img_HR], self.opt['use_flip'], \
self.opt['use_rot'])
# change color space if necessary
if self.opt['color']:
img_LR = util.channel_convert(C, self.opt['color'], [img_LR])[0] # TODO during val no definetion
# BGR to RGB, HWC to CHW, numpy to tensor
if img_HR.shape[2] == 3:
img_HR = img_HR[:, :, [2, 1, 0]]
img_LR = img_LR[:, :, [2, 1, 0]]
img_HR = torch.from_numpy(np.ascontiguousarray(np.transpose(img_HR, (2, 0, 1)))).float()
img_LR = torch.from_numpy(np.ascontiguousarray(np.transpose(img_LR, (2, 0, 1)))).float()
if LR_path is None:
LR_path = HR_path
return {'LR': img_LR, 'HR': img_HR, 'LR_path': LR_path, 'HR_path': HR_path}
感觉读进去的图有问题。其中一个读入并且是无。我不知道如何处理这个问题。我正在使用 NVIDIA Tesla P100GPU 运行这个程序。
19-08-30 06:12:28.193 - 信息:l_g_pix:3.9939e-03 l_g_fea:2.3352e+00 l_g_gan:1.0448e-01 l_d_real:1.5721e-06 l_d_fake:1.6599e-05 D_real:e 7.0139 +00 D_fake:-1.3881e+01 19-08-30 06:14:34.038 - 信息:l_g_pix:2.9632e-03 l_g_fea:1.7633e+00 l_g_gan:7.9122e-02 l_d_real:5.6028e-06 l_d_fake:4.7490e-05 D_real:7.1848fakee :-8.6396e+00 19-08-30 06:16:38.986 - 信息:l_g_pix:3.6181e-03 l_g_fea:2.2983e+00 l_g_gan:3.5791e-02 l_d_real:3.3302e-03 l_d_fake:2.6311e-03 D_real:+0.61663fakee : 9.5084e+00 19-08-30 06:18:42.645 - 信息:l_g_pix:3.9908e-03 l_g_fea:2.1037e+00 l_g_gan:5.0026e-02 l_d_real:2.2486e-04 l_d_fake:7.5957e-04 D_real:+00 D_fakefake : -8.9531e+00 libpng 错误:读取错误 追溯(最近一次通话最后一次):
………………
最佳答案
1) check the image path is correct.
2) make sure that image is read as numpy ndarray e.g(using matplotlib, cv2), using PIL it reads image in another format so it becomes impossible to apply numpy array operations.
关于python-3.x - 属性错误 : 'NoneType' object has no attribute 'astype' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57273464/
相关文章:
python - 如何使用分类变量和数值变量绘制相关矩阵/热图
django - 自定义 Django Admin 用户密码修改表单
spring - 让 Spring RestTemplate 使用内存中的 pem 证书(不在磁盘上
javascript - 在 Angular 2+ 上重新渲染 FullCalendar
asp.net-core-2.0 - 如何在 .net 核心 web api 中将 Razor Vi
firebase - oobCodes 在 Firebase 中的生命周期
flutter - flutter 的 video_playeur 包问题