根据此信息链接,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.
}
}
如果需要计算 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.
}
}