Разработка обнаружения объекта Tensorflow в приложении IOS - nonmaxsuppressionV2
Я пытаюсь обнаружить объект, используя модель ssd_mobilenet_v1_coco. Мой собственный обученный файл модели.pb файл используется для обнаружения. После успешной сборки, нажмите кнопку "Выполнить", и я получил ошибку ниже.
"Not found: Op type not registered 'NonMaxSuppressionV2' in binary running on IPhone. Make sure the Op and Kernel are registered in the binary running in this process. "
Я могу выполнить и запустить приложение ios для уже обученного файла модели.pb по ссылке ниже. Пожалуйста, дайте решение, чтобы исправить вышеуказанные проблемы и запустить приложение IOS. https://github.com/JieHe96/iOS_Tensorflow_ObjectDetection_Example
1 ответ
Проблема именно в том, что говорит ошибка: операция NonMaxSuppressionV2 используется используемой моделью (файл.pb), но она не зарегистрирована в библиотеке tenorflow при компиляции для платформы iOS. Это связано с тем, что тензорный поток ограничивает множество операций (особенно тех, которые обычно требуются только для обучения) на платформах iOS/Android, так что размер скомпилированных библиотек меньше.
Чтобы устранить вышеуказанную проблему, вы можете сделать следующее: - Обновить файл присутствует, файл ops_to_register.h присутствует здесь.
Добавить "NonMaxSuppressionV2Op<CPUDevice>"
(Не забудьте добавить кому, если вы добавляете в середину массива) в kNecessaryOpKernelClasses
массив. Как это -
constexpr const char* kNecessaryOpKernelClasses[] = {
"BinaryOp< CPUDevice, functor::add<float>>",
"BinaryOp< CPUDevice, functor::add<int32>>",
"AddNOp< CPUDevice, float>",
"NonMaxSuppressionOp<CPUDevice>",
//Added NonMaxSuppressionV2Op
"NonMaxSuppressionV2Op<CPUDevice>",
...
//Other operations
...
};
А также isequal(op, "NonMaxSuppressionV2")
в constexpr inline bool ShouldRegisterOp(const char op[])
Как это -
constexpr inline bool ShouldRegisterOp(const char op[]) {
return false
|| isequal(op, "Add")
|| isequal(op, "NoOp")
|| isequal(op, "NonMaxSuppression")
//Added NonMaxSuppressionV2
|| isequal(op, "NonMaxSuppressionV2")
|| isequal(op, "Pack")
//other stuff
...
;
После внесения изменений в этот файл перезапустите все с нуля, как указано в разделе быстрого запуска readme-файла репозитория.
Если вы все еще проигрываете некоторые другие операции. Повторение той же процедуры для них тоже будет работать.
Надеюсь, что это помогло.