1

I am using tensorflow slim to load pre-trained models like vgg and resnet-50. So for vgg , tf-slim provides a way to load RGB mean values like:

from preprocessing.vgg_preprocessing import (_mean_image_subtraction,
                                            _R_MEAN, _G_MEAN, _B_MEAN)

I couldn't find anything similar for resnets. Is it not implemented yet? Also I do know that some libraries like py-torch provide global mean values for every model. Is that the case with tf-slim too?

HIMANSHU RAI
  • 305
  • 1
  • 4
  • 13

4 Answers4

1

Actually despite preprocessing_factory says that restnetv2 uses vgg_preprocessing it isn't. The correct preprocessing for resnetv2 is inception_preprocessing as noted in this github issue https://github.com/tensorflow/models/issues/2217

vozman
  • 1,198
  • 1
  • 14
  • 19
0

The previous answer is actually not completely correct. Have a look at https://github.com/tensorflow/models/blob/master/research/slim/preprocessing/preprocessing_factory.py

You can see that both Resnet-V1 and ResNet-V2 use VGG preprocessing

 preprocessing_fn_map = {
  'cifarnet': cifarnet_preprocessing,
  'inception': inception_preprocessing,
  'inception_v1': inception_preprocessing,
  'inception_v2': inception_preprocessing,
  'inception_v3': inception_preprocessing,
  'inception_v4': inception_preprocessing,
  'inception_resnet_v2': inception_preprocessing,
  'lenet': lenet_preprocessing,
  'mobilenet_v1': inception_preprocessing,
  'mobilenet_v2': inception_preprocessing,
  'mobilenet_v2_035': inception_preprocessing,
  'mobilenet_v2_140': inception_preprocessing,
  'nasnet_mobile': inception_preprocessing,
  'nasnet_large': inception_preprocessing,
  'pnasnet_mobile': inception_preprocessing,
  'pnasnet_large': inception_preprocessing,
  'resnet_v1_50': vgg_preprocessing,
  'resnet_v1_101': vgg_preprocessing,
  'resnet_v1_152': vgg_preprocessing,
  'resnet_v1_200': vgg_preprocessing,
  'resnet_v2_50': vgg_preprocessing,
  'resnet_v2_101': vgg_preprocessing,
  'resnet_v2_152': vgg_preprocessing,
  'resnet_v2_200': vgg_preprocessing,
  'vgg': vgg_preprocessing,
  'vgg_a': vgg_preprocessing,
  'vgg_16': vgg_preprocessing,
  'vgg_19': vgg_preprocessing,

}

NicoJ
  • 98
  • 8
0

I have tested the Slim checkpoints of both Resnet_v1_50 and Resnet_v2_50 on ImageNet validation dataset, and the result is that Resnet_v1_50 uses VGG preprocessing, while Resnet_v2_50 uses Inception preprocessing.

The Github issue has also indicated misleading information in the source code.

Minh Nguyen
  • 755
  • 5
  • 11
-1

In Tensorflow Slim resnet-v1 uses vgg_preprocessing. Resnet-v2 uses inception preprocessing by default, which uses a lot of color, hue, and saturation augmentation. This makes mean subtraction less relevant.

Ryan Jay
  • 838
  • 8
  • 9