【问题标题】:Caffe, how to predict from a pretrained netCaffe,如何从预训练网络进行预测
【发布时间】:2016-02-19 07:14:16
【问题描述】:

我正在使用此代码来加载我的网络:

net = caffe.Classifier(MODEL_FILE, PRETRAINED,
                   mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1),
                   channel_swap=(2,1,0),
                   raw_scale=255,
                   image_dims=(256, 256))

我对三行有疑问。

1-mean=np.load(caffe_root + 'python/caffe/imagenet/ilsvrc_2012_mean.npy').mean(1).mean(1)

什么意思?我应该使用这个平均值还是另一个?如果是,我在哪里可以获得自定义平均值?我正在使用自定义数据集。

2-channel_swap=(2,1,0)

channel_swap 是什么意思?再说一遍,我应该使用这个值还是自定义值?

最后一个

3-raw_scale=255

什么是 raw_scale?我应该使用什么值?

我正在使用Cohn Kanade 数据集。所有图像均为 64x64 且为灰度。

【问题讨论】:

    标签: python deep-learning caffe conv-neural-network pycaffe


    【解决方案1】:

    channel_swap 是将RGB 反转为BGR,如果您使用参考图像网络模型,这显然是必要的,基于 [1] 中的评论。在您的情况下,图像是灰度的,因此您可能没有三个通道。您可能需要将其设置为 (0, 0, 0),但即使这样也可能无济于事(我不确定 channel_swap 的确切实现)。如果这没有帮助,最简单的解决方案可能是通过将每个像素分成三个具有相等值的值 (RGB) 来预处理数据。之后,您可能会完全放弃 channel_swap,因为您的频道具有相同的价值,并且交换它们是没有任何操作的。

    平均值是将从您的输入数据中减去以使其居中的值。 (请记住,神经网络需要数据具有零均值,而输入图像通常具有正均值,因此需要减法)。您减去的平均值应该与用于训练的平均值相同,因此使用与模型关联的文件中的平均值是正确的。但是,我不确定您是否应该致电.mean(1) ——您是否从某个示例中得到了这条线?如果是,那么这很可能是正确的做法。

    raw_scale 是输入数据的比例。该模型期望像素被归一化,因此如果您的输入数据的值介于 0 和 255 之间,那么将 raw_scale 设置为 255 是正确的。如果您的数据的值介于 0 和 1 之间,则应将 raw_scale 设置为 1。

    最后,根据我对[2]中评论的理解,您不需要提供image_dims

    [1]https://github.com/BVLC/caffe/blob/master/python/caffe/io.py#L204

    [2]https://github.com/BVLC/caffe/blob/master/python/caffe/classifier.py#L18

    【讨论】:

    • 谢谢,我在site 上得到了这个代码。我没有使用imaginet,我只是在谷歌上搜索'caffe predict from pretrained model'。因此,我必须将均值更改为 (0,0,0),而不是使用 channel_swap 和 raw_scale 为 1/126。因为 126 是我的数据集灰度平均值。我是对的?
    • 如果 126 是您的平均值,那么 raw_scale 是 255(raw_scale 是范围,而不是平均值)。对于平均值,您需要使用用于训练您使用的模型的数据集的平均值。您使用什么确切型号?对于channel_swap,在你的情况下你不需要它,这是正确的。
    • Ishamael,请您解释一下“您使用的确切型号是什么?”是什么意思。我不明白。 Caffe 和 convnet 对我来说真的很新。
    • MODEL_FILEPRETRAINED_FILE的值是多少?
    • 这是我的model_file
    【解决方案2】:

    我同意@Ishamael 在 channel_swap 上的 cmets 和意思。我只是想进一步澄清 raw_scale。假设使用caffe.io.load_image 加载图像,值始终在 0 到 1 [1] 的范围内。需要注意的是:

    虽然 Python 表示 [0, 1] 中的图像,但某些 Caffe 模型 CaffeNet 和 AlexNet 表示 [0, 255] 中的图像,因此 raw_scale 这些模型必须是 255。

    而且我认为在馈送到网络数据层之前检查输入图像值以选择适当的 raw_scale 是明智的。

    谢谢。

    [1]https://github.com/BVLC/caffe/blob/master/python/caffe/io.py#L224

    【讨论】:

      猜你喜欢
      • 2016-03-31
      • 2019-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 2018-10-16
      相关资源
      最近更新 更多