Resnet50 предварительная обработка изображений - PullRequest
1 голос
/ 20 июня 2019

Я использую https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3 для извлечения векторов объектов из изображений.Тем не менее, я немного сбит с толку, когда речь заходит о том, как предварительно обработать изображения перед их передачей через модуль.

На основании соответствующего объяснения Github сказано, что следующее должно бытьdone:

image_path = "path/to/the/jpg/image"
image_string = tf.read_file(image_path)
image = tf.image.decode_jpeg(image_string, channels=3)
image = tf.image.convert_image_dtype(image, tf.float32)

# All other transformations (during training), in my case:
image = tf.random_crop(image, [224, 224, 3])
image = tf.image.random_flip_left_right(image)

# During testing:
image = tf.image.resize_image_with_crop_or_pad(image, 224, 224)

Однако, используя вышеупомянутое преобразование, полученные результаты показывают, что что-то может быть не так.Кроме того, Resnet бумага говорит, что изображения должны быть предварительно обработаны с помощью:

Кадрирование 224 × 224 отбирается случайным образом из изображения или его горизонтального переворота, ссреднее значение вычитается ...

Что я не могу понять, что это значит.Может кто-нибудь направить меня в правильном направлении?

С нетерпением жду ваших ответов!

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Модули изображений в TensorFlow Hub ожидают значения пикселей в диапазоне [0,1], как показано в приведенном выше фрагменте кода.Это позволяет легко и безопасно переключаться между модулями.

Внутри модуля входные значения масштабируются до диапазона, для которого была обучена сеть.Модуль https://tfhub.dev/google/imagenet/resnet_v2_50/feature_vector/3 был опубликован с контрольной точки TF-Slim (см. Документацию), которая использует еще одно соглашение для нормализации входных данных, чем He & al.- но обо всем этом заботятся.

Чтобы демистифицировать язык в He & al .: он относится к средним значениям R, G и B, агрегированным по всем пикселям набора данных, которые они изучали, следуя старой мудрости, чтонормализация входных данных до нуля означает, что нейронные сети лучше обучаются.Однако более поздние работы по классификации изображений больше не уделяли этой степени внимания предварительной обработке, специфичной для набора данных.

0 голосов
/ 20 июня 2019

Цитата из упомянутой вами бумаги Resnet основана на следующем объяснении из Alexnet paper :

ImageNet состоит из изображений с переменным разрешением, в то время как нашей системе требуетсяпостоянная входная размерность.Поэтому мы снизили частоту дискретизации изображений до фиксированного разрешения 256 × 256.Учитывая прямоугольное изображение, мы сначала изменили масштаб изображения таким образом, чтобы его короткая сторона имела длину 256, а затем вырезали центральный патч 256 × 256 из полученного изображения.Мы не обрабатывали изображения каким-либо другим способом, за исключением вычитания средней активности из обучающего набора из каждого пикселя.

Таким образом, в документе Resnet аналогичный процесс состоит в получении224x224 пикселя часть изображения (или его горизонтально перевернутой версии), чтобы гарантировать, что сети даны изображения постоянного размера, а затем отцентрировать ее, вычтя среднее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...