#swift #machine-learning #tf.keras #coreml #handwriting-recognition
#swift #машинное обучение #tf.keras #coreml #распознавание рукописного ввода
Вопрос:
Я преобразовал свою mlmodel из tf.keras. Цель состоит в том, чтобы распознать рукописный текст на изображении, когда я запускаю его с помощью этого кода:
func performCoreMLImageRecognition(_ image: UIImage) {
let model = try! HTRModel()
// process input image
let scale = image.scaledImage(200)
let sized = scale?.resize(size: CGSize(width: 200, height: 50))
let gray = sized?.rgb2GrayScale()
guard let pixelBuffer = sized?.pixelBufferGray(width: 200, height: 50) else { fatalError("Cannot convert image to pixelBufferGray")}
UIImageWriteToSavedPhotosAlbum(gray! ,
self,
#selector(self.didFinishSavingImage(_:didFinishSavingWithError:contextInfo:)),
nil)
let mlArray = try! MLMultiArray(shape: [1, 1], dataType: MLMultiArrayDataType.float32)
let htrinput = HTRInput(image: pixelBuffer, label: mlArray)
if let prediction = try? model.prediction(input: htrinput) {
print(prediction)
}
}
Я получаю следующую ошибку:
[espresso] [Espresso::handle_ex_plan] exception=Espresso exception: "Invalid argument": generic_reshape_kernel: Invalid bottom shape (64 12 1 1 1) for reshape to (768 50 -1 1 1) status=-6
2021-01-21 20:23:50.712585 0900 Guided Camera[7575:1794819] [coreml] Error computing NN outputs -6
2021-01-21 20:23:50.712611 0900 Guided Camera[7575:1794819]
[coreml] Failure in -executePlan:error:.
Вот конфигурация модели
Модель работала отлично. Где я ошибаюсь в этом. Я не очень хорошо разбираюсь в swift и нуждаюсь в помощи.
Что означает эта ошибка и как мне устранить эту ошибку?
Ответ №1:
Иногда во время преобразования из Keras (или любого другого) в Core ML конвертер не понимает, как обрабатывать определенные операции, что приводит к модели, которая не работает.
В вашем случае есть слой, который выводит тензор с формой (64, 12, 1, 1, 1) в то время как существует слой изменения формы, который ожидает чего-то, что может быть изменено на (768, 50, -1, 1, 1).
Вам нужно будет выяснить, какой слой изменяет форму, а затем изучить основную модель ML, почему она получает входной тензор неправильного размера. То, что в Keras все работает нормально, не означает, что преобразование в Core ML было безупречным.
Вы можете изучить основную модель ML с помощью Netron, средства просмотра моделей с открытым исходным кодом.
(Обратите внимание, что 64×12 = 768, поэтому проблема, по-видимому, связана с 50 в этом тензоре.)
Комментарии:
1. Спасибо! Похоже, ошибка возникает при масштабировании. Исправлено путем добавления соответствующего масштабирования при преобразовании модели