Keras 卷积神经网络转换为 CoreML 模型的输入是多数组而不是图像?

Posted

技术标签:

【中文标题】Keras 卷积神经网络转换为 CoreML 模型的输入是多数组而不是图像?【英文标题】:Keras Convolutional Neural Network converted to CoreMLModel has an input of multiarray instead of image? 【发布时间】:2018-04-17 03:00:32 【问题描述】:
# Importing the Keras libraries and packages
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense
from keras.layers import Dropout

# Initialising the CNN
chars74k_classifier = Sequential()

# Adding the first convolutional layer
chars74k_classifier.add(Conv2D(32, (3, 3), activation = 'relu', input_shape = (64, 64, 3)))

# Adding the max pooling layer
chars74k_classifier.add(MaxPooling2D(pool_size = (2, 2)))

chars74k_classifier.add(Dropout(0.25))

# Adding the second convolutional layer
chars74k_classifier.add(Conv2D(32, (3, 3), activation='relu'))

# Adding a second max pooling layer
chars74k_classifier.add(MaxPooling2D(pool_size = (2, 2)))

# Adding the third convolutional layer
chars74k_classifier.add(Conv2D(64, (3, 3), activation='relu'))

# Adding a third max pooling layer
chars74k_classifier.add(MaxPooling2D(pool_size = (2, 2)))

chars74k_classifier.add(Dropout(0.50))

# Adding the fourth convolutional layer
chars74k_classifier.add(Conv2D(128, (3, 3), activation='relu'))

# Adding a fourth max pooling layer
chars74k_classifier.add(MaxPooling2D(pool_size = (2, 2)))

# Adding the flattening layer
chars74k_classifier.add(Flatten())

# Adding the fully connected layers (Normal ANN)
chars74k_classifier.add(Dense(activation = 'relu', units = 128))
chars74k_classifier.add(Dense(activation = 'relu', units = 128))
chars74k_classifier.add(Dense(activation = 'softmax', units = 26))

# Compiling the CNN
chars74k_classifier.compile(optimizer='Adadelta',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

这是我为我的 Keras 卷积神经网络编写的代码,在 keras 中使用 keras 2.0.6 和 tensorflow 1.1.0 进行训练时,它在测试集上的准确率高达 86%。当我将此模型导出到 CoreML 模型时,输入不是图像,而是多数组?由于网络的输入实际上是带颜色的 64x64 图像,我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

在您的 coremltools 转换脚本中,指定 input_image_names="input" 参数。

【讨论】:

以上是关于Keras 卷积神经网络转换为 CoreML 模型的输入是多数组而不是图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Turi Create 创建的 CoreML 模型转换为 Keras?

将 keras 模型转换为 coreml 时出错(“InputLayer”对象不可迭代)

Keras 模型到 Coreml 并使用 OpenCV

将训练好的 Keras 图像分类模型转换为 coreml 并集成到 iOS11

.h5 keras 模型到 coreml 的分类转换在 IOS 中不起作用

如何将使用 Mask Rcnn 在自定义对象检测上创建蒙版图像的 Keras 模型转换为 CoreML 模型以在 iOS 应用程序中使用?