1

根据这个信息链接,TensorFlow Lite 现在支持使用 MobileNet-SSD v1 模型进行对象检测。此链接中有一个 Java 示例,但是如何在 C++ 中解析输出?我找不到任何关于此的文档。此代码显示了一个示例。

.......
(fill inputs)
.......

intepreter->Invoke();
const std::vector<int>& results = interpreter->outputs();
TfLiteTensor* outputLocations = interpreter->tensor(results[0]);
TfLiteTensor* outputClasses   = interpreter->tensor(results[1]);
float *data = tflite::GetTensorData<float>(outputClasses);
for(int i=0;i<NUM_RESULTS;i++)
{
   for(int j=1;j<NUM_CLASSES;j++)
   {
      float score = expit(data[i*NUM_CLASSES+j]); // ¿? This does not seem to be correct.
    }
}
4

1 回答 1

0

如果您需要计算 expit,则需要定义一个函数来执行此操作。在顶部添加:

#include <cmath>

接着

intepreter->Invoke();
const std::vector<int>& results = interpreter->outputs();
TfLiteTensor* outputLocations = interpreter->tensor(results[0]);
TfLiteTensor* outputClasses   = interpreter->tensor(results[1]);
float *data = tflite::GetTensorData<float>(outputClasses);
for(int i=0;i<NUM_RESULTS;i++)
{
   for(int j=1;j<NUM_CLASSES;j++)
   {
      auto expit = [](float x) {return 1.f/(1.f + std::exp(-x));};
      float score = expit(data[i*NUM_CLASSES+j]); // ¿? This does not seem to be correct.
    }
}
于 2018-07-27T20:38:00.267 回答