Keras - 通过每个通道的不同均值和标准进行归一化

问题描述

我需要在预处理中为图像添加一层归一化。

它需要是模型的附加层(而不是python中的单独代码),因为我后来将keras模型转换为mlmodel。

这就是我的意思:

在python中(来自here):

parser.add_argument('--std',type=list,default=[0.229,0.224,0.225],help='the std used to normalize your images')
parser.add_argument('--mean',default=[0.485,0.456,0.406],help='the mean used to normalize your images')
        
normalize = transforms.normalize(std=args.std,mean=args.mean)
        
transformation = transforms.Compose([transforms.ToTensor()])
        
            
man_normalize = transformation(man_resize)

在安卓中:

@Override
  | protected void addPixelValue(int pixelValue) {
  | imgData.putFloat((((pixelValue >> 16) & 0xFF)/255f - IMAGE_MEAN[0]) / IMAGE_STD[0]);
  | imgData.putFloat((((pixelValue >> 8) & 0xFF)/255f - IMAGE_MEAN[1]) / IMAGE_STD[1]);
  | imgData.putFloat(((pixelValue & 0xFF)/255f - IMAGE_MEAN[2]) / IMAGE_STD[2]);
  | }

我想到了 Lambda 层,但我不确定如何在每个通道上高效地做到这一点。

谢谢

解决方法

Lambda 层的解决方案:

base_model = load_model(keras_model_p)

MEAN = [0.485,0.456,0.406]
STD = [0.229,0.224,0.225]
preprocess_layer = tf.keras.layers.Lambda(
    lambda x: (x - MEAN) / STD
)
model = Sequential()
model.add(tf.keras.Input(shape=(256,192,3))
model.add(preprocess_layer)
model.add(base_model)