2017-10-07 135 views
2

我正在嘗試使用來自keras的預訓練VGG 16。但我真的不確定輸入範圍應該是什麼。Keras VGG模型的預期輸入範圍是多少?

快速回答,這些顏色順序是哪個?

  • RGB
  • BGR

和範圍?

  • 0 to 255?
  • 平衡從約-125到約+130?
  • 0至1?
  • -1 to 1?

我注意到the file where the model is defined進口輸入預處理:

from .imagenet_utils import preprocess_input 

但這種預處理是從來沒有在文件的其餘部分使用。

此外,當我檢查code for this preprocessor時,它有兩種模式:caffetf(tensorflow)。

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

最後,我在互聯網上找不到一致的文檔。

那麼,工作的最佳範圍是什麼?模型重量訓練的範圍是多少?

回答

3

模型重量從caffe移植,所以它在BGR format

Caffe使用BGR顏色通道方案來讀取圖像文件。由於imread的基礎OpenCV實現,這是 。 RGB的假設 是一個常見的錯誤。

您可以找到原始caffe模型重量文件on VGG website。這個鏈接也可以在Keras文檔中找到。

我認爲第二個範圍是最接近的範圍。訓練期間沒有縮放,但作者已經減去了ILSVRC2014訓練集的平均值。正如the original VGG paper指出,第2.1節:

我們做的唯一預處理扣除平均RGB值, 計算訓練集,從每個像素。

這句話實際上是imagenet_utils.preprocess_input(mode='caffe')所做的。

  1. 轉換從RGB到BGR:因爲在RGB格式keras.preprocessing.image.load_img()加載圖像,需要這種轉換的VGG16(和朱古力移植所有型號)。
  2. 減去平均BGR值:從圖像陣列中減去(103.939, 116.779, 123.68)

預處理器未在vgg16.py中使用。它被導入到文件中,以便用戶可以通過調用keras.applications.vgg16.preprocess_input(rgb_img_array)來使用預處理功能,而不必關心模型權重的來源。 preprocess_input()的參數始終是RGB格式的圖像數組。如果模型是用caffe訓練的,preprocess_input()將把數組轉換成BGR格式。

請注意,功能preprocess_input()不打算從imagenet_utils模塊調用。如果您使用的是VGG16,請致電keras.applications.vgg16.preprocess_input(),圖像將被轉換爲VGG16訓練的合適格式和範圍。同樣,如果您使用的是Inception V3,請致電keras.applications.inception_v3.preprocess_input(),圖像將被轉換爲Inception V3的訓練範圍。