IOS应用程序中的Tensorflow对象检测开发 - nonmaxsuppressionV2

问题描述 投票:1回答:1

我正在尝试使用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. "

我可以在下面的链接中执行并启动已经训练过的.pb模型文件的ios app。请提供解决方案来解决上述问题并启动ios应用程序。 https://github.com/JieHe96/iOS_Tensorflow_ObjectDetection_Example

ios tensorflow object-detection non-maximum-suppression
1个回答
0
投票

问题正是错误所说的 - 操作NonMaxSuppressionV2正由您正在使用的模型(.pb文件)使用,但在为iOS平台编译时未向tensorflow库注册。这是因为张量流限制了iOS / Android平台上的大量操作[特别是通常仅用于训练的操作],因此编译库的大小更小。

要解决上述问题,您可以执行以下操作 - 更新文件存在的ops_to_register.h文件存在here

添加"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
     ...
  ;

修改此文件后,如repo的自述文件的快速入门部分所述,从头开始重新运行所有内容。

如果你还在失去一些其他的操作。对他们重复相同的程序也会奏效。

希望有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.