在 TensorFlow 中更改预先训练的模型以期望通道优先

Change pre-trained model to expect channel first in TensorFlow

我有形状 (batch, channel, height, width) = (1, 3, 224, 224) 的图像需要输入到预训练的 TensorFlow 模型。但是,默认情况下,TensorFlow 期望其预训练模型输入的形状为 (1, 224, 224, 3)。

例如:

import tensorflow as tf
import keras2onnx as k2o
import onnx

model = tf.keras.applications.MobileNetV2()
onnx_model = k2o.convert_keras(model, model.name)
onnx.save_model(onnx_model, 'mobilenetv2.onnx')

然后在对模型进行推理时,我后来 运行 出现以下错误:

InvalidArgument: [ONNXRuntimeError] : 2 : INVALID_ARGUMENT : Got invalid dimensions for input: input_1 for the following indices
 index: 1 Got: 3 Expected: 224
 index: 3 Got: 224 Expected: 3
 Please fix either the inputs or the model.

如何保存预训练的 TensorFlow 模型以期望先有通道的图像?理解 ONNX 不是必需的,但建议用于上下文。

您可以通过转到 ~/.keras/keras.json 将 Keras 配置文件中的默认数据格式更改为通道优先,并将 "image_data_format": "channels_last" 的行更改为 "image_data_format": "channels_first".