Разработка обнаружения объекта 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-файла репозитория.

Если вы все еще проигрываете некоторые другие операции. Повторение той же процедуры для них тоже будет работать.

Надеюсь, что это помогло.

Другие вопросы по тегам