2017-10-07 4 views
2

J'essaie d'utiliser un VGG 16 pré-entraîné de keras. Mais je ne sais pas vraiment quelle devrait être la plage d'entrée.Quelle est la plage d'entrée attendue pour travailler avec les modèles Keras VGG?

Réponse rapide, lequel de ces ordres de couleur?

  • RGB
  • BGR

Et quelle plage?

  • 0 à 255?
  • équilibré d'environ -125 à environ +130?
  • 0 à 1?
  • -1 à 1?

Je remarque the file where the model is defined importe un préprocesseur d'entrée:

from .imagenet_utils import preprocess_input 

Mais ce préprocesseur est jamais utilisé dans le reste du fichier.

Aussi, quand je vérifie le code for this preprocessor, il a deux modes: caffe et tf (tensorflow).

Chaque mode fonctionne différemment.

Enfin, je ne trouve pas de documentation cohérente sur Internet.

Alors, quelle est la meilleure gamme pour travailler? À quelle distance les poids du modèle sont-ils formés?

Répondre

3

Les poids du modèle ont été portés à partir de caffe, donc c'est dans BGR format. Caffe utilise un schéma de canal de couleur BGR pour lire les fichiers d'image. C'est en raison de l'implémentation OpenCV sous-jacente d'imread. L'hypothèse de RGB est une erreur commune.

Vous pouvez trouver les fichiers de poids originaux du modèle caffe on VGG website. Ce lien peut également être trouvé sur la documentation de Keras.

Je pense que la deuxième plage serait la plus proche. Il n'y a pas de mise à l'échelle pendant l'entraînement, mais les auteurs ont soustrait la valeur moyenne de l'ensemble d'apprentissage ILSVRC2014. Comme indiqué dans the original VGG paper, section 2.1:

Le seul pré-traitement que nous faisons est la valeur moyenne soustrait RVB, calculée sur l'ensemble de la formation, de chaque pixel. Cette phrase est en réalité ce que fait imagenet_utils.preprocess_input(mode='caffe').

  1. Convertir de RVB à BGR: car keras.preprocessing.image.load_img() images charges au format RVB, cette conversion est nécessaire pour VGG16 (et tous les modèles de caffe portés).Soustraire les valeurs BGR moyennes: (103.939, 116.779, 123.68) est soustraite du tableau d'images.

Le préprocesseur n'est pas utilisé dans vgg16.py. Il est importé dans le fichier afin que les utilisateurs puissent utiliser la fonction de pré-traitement en appelant le keras.applications.vgg16.preprocess_input(rgb_img_array), sans se soucier de l'origine des poids du modèle. L'argument pour preprocess_input() est toujours un tableau d'image au format RVB. Si le modèle a été entraîné avec caffe, preprocess_input() convertira le tableau en format BGR.

Notez que la fonction preprocess_input() n'est pas destinée à être appelée à partir du module imagenet_utils. Si vous utilisez VGG16, appelez le keras.applications.vgg16.preprocess_input() et les images seront converties dans un format et une gamme appropriés sur lesquels VGG16 a été formé. De même, si vous utilisez Inception V3, appelez keras.applications.inception_v3.preprocess_input() et les images seront converties dans la plage sur laquelle Inception V3 a été formé.