问题
最近在跑GAN网络,生成一些图片,但是生成的图片不尽如人意,质量不高,太亮,而且太模糊,但是能够保证的是轮廓和细节是很好的,说明改进是有作用的。 生成的图片是上面这样的,问题在于太亮,而且不够清晰。
解决方法
1、考虑你的gan网络的输入是否正确 2、考虑你保存图片的时候,设置是否正确
而我的问题就在于保存图片的时候,设置的参数不正确导致的,这个问题困惑了我很久,现在解决了,记录一下。
save_image(denorm(fake_images), os.path.join(self.sample_dir,
'epoch-{}-step-{}.png'.format(epoch, step + 1)),
nrow=6, padding=0, normalize=False, range=[-1,1], scale_each=False, pad_value=0)
先说一下
save_image
函数。
def save_image(tensor, filename, nrow=8, padding=2,
normalize=False, range=None, scale_each=False, pad_value=0):
"""Save a given Tensor into an image file.
Args:
tensor (Tensor or list): Image to be saved. If given a mini-batch tensor,
saves the tensor as a grid of images by calling ``make_grid``.
**kwargs: Other arguments are documented in ``make_grid``.
"""
from PIL import Image
grid = make_grid(tensor, nrow=nrow, padding=padding, pad_value=pad_value,
normalize=normalize, range=range, scale_each=scale_each)
# Add 0.5 after unnormalizing to [0, 255] to round to nearest integer
ndarr = grid.mul_(255).add_(0.5).clamp_(0, 255).permute(1, 2, 0).to('cpu', torch.uint8).numpy()
im = Image.fromarray(ndarr)
im.save(filename)
参数意义:
- tensor:待保存的tensor数据。如果给以一个四维的mini-batch的tensor,将调用网格方法,然后再保存到本地。- filename:保存的名称- nrow:图片保存为几行- padding:图片之间的padding- normalize:是否标准化- range:min和max是数字,那么min,max用来规范化image- pad_value:填充像素值
而我的问题就在于这里的参数设置,你可以看到我的设置是range=[-1,1]
,这个参数的设置就会出现我的问题,导致图片太亮,不清晰。
因此,我就设置为默认值
None
,就解决了。