Каков ожидаемый диапазон ввода для работы с моделями Keras VGG?

Пытаюсь использовать предобученный VGG 16 от keras. Но я действительно не уверен, каким должен быть диапазон ввода.

Быстрый ответ, какой из этих цветов?

  • RGB
  • BGR

А какой диапазон?

  • 0 to 255?
  • сбалансирован от примерно -125 до примерно +130?
  • 0 to 1?
  • -1 to 1?

Я заметил, что файл, в котором определена модель, импортирует препроцессор ввода:

from .imagenet_utils import preprocess_input

Но этот препроцессор никогда не используется в остальной части файла.

Кроме того, когда я проверяю код для этого препроцессора, он имеет два режима: caffe и tf (тензорный поток).

Каждый режим работает по-своему.

Наконец, я не могу найти последовательную документацию в Интернете.

Итак, какой диапазон лучше всего подходит для работы? Какому диапазону обучены веса модели?


person Daniel Möller    schedule 07.10.2017    source источник


Ответы (1)


Вес модели был перенесен из caffe, поэтому он имеет формат BGR < / а>.

Caffe использует схему цветовых каналов BGR для чтения файлов изображений. Это связано с лежащей в основе OpenCV реализацией imread. Предположение о RGB - распространенная ошибка.

Вы можете найти исходные файлы веса модели кафе на веб-сайте VGG. Эту ссылку также можно найти в документации Keras.

Думаю, второй диапазон был бы самым близким. Во время обучения масштабирования нет, но авторы вычли среднее значение обучающего набора ILSVRC2014. Как указано в исходном документе VGG, раздел 2.1:

Единственная предварительная обработка, которую мы выполняем, - это вычитание среднего значения RGB, вычисленного на обучающем наборе, из каждого пикселя.

Это предложение на самом деле то, что делает 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, preprocess_input() преобразует массив в формат BGR.

Обратите внимание, что функция preprocess_input() не предназначена для вызова из модуля imagenet_utils. Если вы используете VGG16, вызовите keras.applications.vgg16.preprocess_input(), и изображения будут преобразованы в подходящий формат и диапазон, в котором VGG16 был обучен. Точно так же, если вы используете Inception V3, вызовите keras.applications.inception_v3.preprocess_input(), и изображения будут преобразованы в диапазон, в котором был обучен Inception V3.

person Yu-Yang    schedule 07.10.2017