代码之家  ›  专栏  ›  技术社区  ›  Daniel Möller

使用Keras VGG模型的预期输入范围是多少?

  •  11
  • Daniel Möller  · 技术社区  · 7 年前

    我试着使用keras的预训练VGG 16。但我真的不确定输入范围应该是什么。

    快速回答,以下哪种颜色顺序?

    • RGB
    • BGR公司

    哪个范围?

    • 0到255?
    • 从-125到+130平衡?
    • 0到1?
    • -1比1?

    我注意到了 the file where the model is defined 导入输入预处理器:

    from .imagenet_utils import preprocess_input
    

    但该预处理器从未在文件的其余部分中使用。

    另外,当我检查 code for this preprocessor ,它有两种模式: caffe tf

    每种模式的工作方式不同。

    最后,我在互联网上找不到一致的文档。

    那么,最佳工作范围是什么?模型权重训练到什么范围?

    1 回复  |  直到 6 年前
        1
  •  14
  •   Yu-Yang    7 年前

    模型重量是从caffe移植的,所以它在 BGR format .

    Caffe使用BGR颜色通道方案读取图像文件。这是 由于imread的底层OpenCV实现。假设 RGB的错误是常见的。

    您可以找到原始caffe模型重量文件 on VGG website . 此链接也可以在Keras文档中找到。

    the original VGG paper ,第2.1节:

    从每个像素在训练集上计算。

    这句话实际上是什么 imagenet_utils.preprocess_input(mode='caffe')

    1. 从RGB转换为BGR:因为 keras.preprocessing.image.load_img() 以RGB格式加载图像,VGG16(以及从caffe移植的所有模型)需要此转换。
    2. 减去平均BGR值: (103.939, 116.779, 123.68) 从图像阵列中减去。

    预处理器不用于 vgg16.py . 它被导入到文件中,以便用户可以通过调用 keras.applications.vgg16.preprocess_input(rgb_img_array) ,而不关心模型权重的来源。的论点 preprocess_input() 始终是RGB格式的图像阵列。如果模型是用caffe训练的, 预处理输入() 将数组转换为BGR格式。

    预处理输入() 不打算从调用 imagenet_utils keras.applications.vgg16.preprocess_input() 图像将被转换为VGG16训练的合适格式和范围。类似地,如果您使用的是Inception V3,请调用 keras.applications.inception_v3.preprocess_input() 图像将被转换为初始V3训练的范围。