问题描述
我需要在预处理中为图像添加一层归一化。
它需要是模型的附加层(而不是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)