This is preprocessing function of inception v3 in Keras. It is totally different from other models preprocessing.
def preprocess_input(x):
x /= 255.
x -= 0.5
x *= 2.
return x
1. Why there is no mean subtraction?
2. Why there is no RGB to BGR?
3. Mapping between [-1,1] is normal for this model?
and this is preprocessing function of VGG and ResNet in Keras:
def preprocess_input(x, data_format=None):
if data_format is None:
data_format = K.image_data_format()
assert data_format in {'channels_last', 'channels_first'}
if data_format == 'channels_first':
# 'RGB'->'BGR'
x = x[:, ::-1, :, :]
# Zero-center by mean pixel
x[:, 0, :, :] -= 103.939
x[:, 1, :, :] -= 116.779
x[:, 2, :, :] -= 123.68
else:
# 'RGB'->'BGR'
x = x[:, :, :, ::-1]
# Zero-center by mean pixel
x[:, :, :, 0] -= 103.939
x[:, :, :, 1] -= 116.779
x[:, :, :, 2] -= 123.68
return x
Also Caffe models use mean subtraction and RGB to BGR.
The Inception model has been trained using the preprocess function that you quoted. Therefore your images have to run through that function rather than the one for VGG/ResNet. Subtracting the mean is not required. See also this thread: https://github.com/fchollet/keras/issues/5416.
The original GoogleNet Paper refers to RGB images rather than BGR. VGG on the other hand was trained using Caffe, and Caffe uses OpenCV to load images which uses BGR by default.
Yes. See also this thread and Marcins answer: Should I substract imagenet pretrained inception_v3 model mean value at inception_v3.py keras?