以前我是由tensorflow C++得到图像分类结果,即得到不同类别的概率,如tensorflow c++ API预测多张图片batch inference_元气少女缘结神的博客-优快云博客 所示,这种方法用在很多地方都没问题,并与python下结果一致,包括小数点后四五位仍旧保持概率一致。
以前对于图像分类的应用中,就是按下面这样从预测后的tensor得到概率:
auto tmap = probabilities.tensor<float, 2>();
但是tensorflow C++中对于图像分割/目标检测这种应用,需要从tensor中输出处理结果即二维图像,以图像分割为例,需要输出经过分割后的图像数据矩阵而非一个概率。这方面资料太少,无法像上面那样写,否则是得不到真正正确的分割后的图像,即使得到了也是错误的或者与python下分割图像不一致。
摸索很久终于搞定,现在与python下图像分割结果已经一致。如下图所示:左边是python输出的分割图像,右边是tensorflow C++输出的分割图像。
可以看到TF C++图像分割结果与python下TF图像分割结果一致。
整体代码放在 https://download.youkuaiyun.com/download/wd1603926823/87517527 这个链接中,大家按需查看。我用的是自己编译的tensorflow gpu c++库 ubuntu下tensorflow 2.0/2.5 c++动态库编译gpu版本_元气少女缘结神的博客-优快云博客_tensorflow2.0 ubuntu 后面测试过用tensorflow cpu c++库也一样 opencv4.1无法加载python-cnn模型,编译第三方库libtensorflow_cc.so巨坑_元气少女缘结神的博客-优快云博客
无论是CPU库还是GPU库 2.0~2.5都可以,主要是按链接 https://download.youkuaiyun.com/download/wd1603926823/86954185 中的代码写就行了。看性能,以前我用的是TF-CPU,绝对是达不到下图的性能的,所以尽量用TF-GPU,别用TF-CPU: