0

在使用 resnet50 模型进行训练之前,我使用以下方法预处理了我的输入:

img = image.load_img(os.path.join(TRAIN, img), target_size=[224, 224])
img = image.img_to_array(img)
img = np.expand_dims(img, axis=0)
img = preprocess_input(img)

并保存一个 numpy 图像数组。我发现没有preprocess_input,数组的大小是1.5G,有preprocess_input,大小是7G。这是正常行为吗?还是我错过了什么?为什么Zero-center by mean pixel大幅增加输入大小?

这就是zero center by mean pixel在 keras 中定义的方式

x = x[..., ::-1] x[..., 0] -= 103.939 x[..., 1] -= 116.779 x[..., 2] -= 123.68

4

3 回答 3

3

这是因为像素值的类型为“uint8”,而现在它们的类型为“float”。所以现在你有一个图像,它是一个'float'数组,它大于'uint8'数组。

于 2018-11-06T14:15:59.983 回答
0

从 keras 实现中读取preprocess_input 图像通过减去数据集的图像均值进行归一化,该均值似乎是从 imagenet 获得的常数。这里的代码

def _preprocess_numpy_input(x, data_format, mode):
if mode == 'tf':
    x /= 127.5
    x -= 1.
    return x

if data_format == 'channels_first':
    if x.ndim == 3:
        # 'RGB'->'BGR'
        x = x[::-1, ...]
        # Zero-center by mean pixel
        x[0, :, :] -= 103.939
        x[1, :, :] -= 116.779
        x[2, :, :] -= 123.68
    else:
        x = x[:, ::-1, ...]
        x[:, 0, :, :] -= 103.939
        x[:, 1, :, :] -= 116.779
        x[:, 2, :, :] -= 123.68
else:
    # 'RGB'->'BGR'
    x = x[..., ::-1]
    # Zero-center by mean pixel
    x[..., 0] -= 103.939
    x[..., 1] -= 116.779
    x[..., 2] -= 123.68
return x

我不明白为什么使用这段代码会增加我的数据集的大小。

于 2018-05-10T13:28:34.257 回答
0

根据 TensorFlow文档, 参数是:浮点 numpy.array 或 tf.Tensor,具有 3 个颜色通道的 3D 或 4D,值在 [0, 255] 范围内。并且函数返回 Returns: Preprocessed numpy.array 或 float32 类型的 tf.Tensor。

我有一种感觉,整数使用不同的内存量。

于 2020-12-14T03:16:37.117 回答