【问题标题】:Add white noise on image batch data when training训练时在图像批处理数据上添加白噪声
【发布时间】:2019-07-04 17:22:51
【问题描述】:

我正在尝试一个降噪模型,目标是打印出每批的clean/add_noise/model_output

我正在使用 PyTorch DataLoader。每个图像都有shape = (256, 128),并且集合 batch_size = 10,因此每个批次的大小为(10, 256, 128)。我想打印出每批的第一个数据,即batch_data[0]

每张图片都有shape = (256, 128)

我写了一个添加噪音的函数如下:

def add_noise(data, bs, target_snr, noise_type):

    if noise_type == 'white':
        noise = acoustics.generator.white(bs*256*128).reshape(bs, 256, 128)

    if noise_type == 'pink':
        noise = acoustics.generator.pink(bs*256*128).reshape(bs, 256, 128)


    print ('data shape = ', data.shape)

    average = np.mean(data)
    std = np.std(noise)
    current_snr = average/std

    noise = noise * (current_snr/ target_snr)
    data = data + noise

    return data 

但是,它一直返回错误消息如下:

TypeError: mean() missing 3 required positional argument: "dim", "keepdim", "dtype"

我该如何处理?

【问题讨论】:

  • 我的猜测是 data 是 PyTorch tensor,但您使用的是 NumPy 的 np.mean()。尝试将np.mean(data) 替换为data.mean() 并与np.std() 相同

标签: python numpy deep-learning pytorch noise


【解决方案1】:

你的data 是什么形状的? type(data) 是什么?
您是否在 Numpy 函数中传递了 DataLoader 张量?

查看 Numpy 的 mean() 函数的 documentation,其中还包含一些示例。

该函数将 类数组 对象作为其输入(例如可以是 2d 矩阵),因此不会立即明确定义平均值。您是否需要计算矩阵中所有数据的行、列或所有数据的平均值?计算中使用的数据类型是什么?

在第一种情况下,您需要提供要展平数组的维度。在第二种情况下,它应该开箱即用,Numpy 为 “默认是计算扁平数组的平均值”,但由于您使用的是 PyTorch 的 DataLoader,它可以需要定义这些。

由于您的 average 似乎是一个数字,所以这样的东西应该可以工作

average = np.mean(data, axis=(0,1) keepdims=False)

【讨论】:

    【解决方案2】:

    作为原始帖子下的第一条评论。数据是 PyTorch 张量,而我用的是 Numpy 的方法。我尝试使用 torch.mean()torch.std() 并且它有效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      • 2020-06-14
      • 1970-01-01
      • 2019-12-24
      • 1970-01-01
      相关资源
      最近更新 更多