Проблема: CoreMLTools reName_feature не обновляет имя функции в модели, только в спецификации модели!
Я создал последовательную модель Tensorflow для задачи классификации изображений. Первоначально после преобразования (согласно документации Apple):
# https://coremltools.readme.io/docs/tensorflow-2
mlmodel2 = ct.convert(model,
inputs=[ct.ImageType()],
input_names=['image'],
image_input_names='image')
создал модель MLModel с входом с именем conv2d
spec = mlmodel.get_spec()
#spec.description.input
ct.utils.rename_feature(spec, 'conv2d_3_input', 'image')
#rename change spec but does not push new spec into model
spec.description.input
input и MultiArray (Float33. 1x299x299x1) и выходом с именем Identity, который также был MultiArray из Float32 К счастью, документ Quickstart находится по адресу: https://coremltools.readme.io/docs/introductory-quickstart#download-the-model выяснено, что исправление для типа ввода требует добавления аргумента формы в ImageType:
# Define the input type as image,
# set pre-processing parameters to normalize the image
# to have its values in the interval [0,1]
image_input = ct.ImageType(shape=(1, 299, 299, 1,))
mlmodel3 = ct.convert(model,
inputs=[image_input],
input_names=['image'],
image_input_names='image')
Итак, теперь получившаяся MLModel имеет тип ввода Image (Grayscale 299 x 299) (отлично!), Но он по-прежнему называется conv2d
spec = mlmodel.get_spec()
#spec.description.input
ct.utils.rename_feature(spec, 'conv2d_3_input', 'image')
#rename change spec but does not push new spec into model
spec.description.input
input.
Для точек стиля я хочу переименовать входную функцию в изображение. Аргументы имени функции преобразования (см. Выше) не имели никакого эффекта. Затем я попытался напрямую изменить спецификацию модели:
spec = mlmodel.get_spec()
#spec.description.input
ct.utils.rename_feature(spec, 'conv2d_3_input', 'image')
#rename change spec but does not push new spec into model
spec.description.input
Это правильно меняет имя входа в спецификации:
[name: "image"
type {
imageType {
width: 299
height: 299
colorSpace: GRAYSCALE
}
}
]
Однако это, по-видимому, не вносит изменений в модель! Вот список для mlmodel:
input {
name: "conv2d_3_input"
type {
imageType {
width: 299
height: 299
colorSpace: GRAYSCALE
}
}
}
output {
name: "Identity"
shortDescription: "Most likely ....."
type {
multiArrayType {
dataType: FLOAT32
}
}
}
metadata {
shortDescription: "Converts image ........."
Как можно перенести изменение имени функции в настоящую ml-модель?