将一张图像从批处理传递到 C++ 中的函数

passing one image from batch to function in c++

我正在尝试将此存储库中的代码从 2D 更改为 3D; https://github.com/sadeepj/crfasrnn_keras

但是,我的 C++ 非常生锈,我很难解决一个问题。 我正在尝试将 Tensor& 传递给此函数;

void ModifiedPermutohedral::compute(Tensor& out, const Tensor& in, int value_size, bool reverse, bool add) const

用这条线

ModifiedPermutohedral mp;
const Tensor& input_tensor = context->input(0);
Tensor* output_tensor = NULL;
OP_REQUIRES_OK(context, context->allocate_output(0, input_tensor.shape(), &output_tensor));
mp.compute(output_tensor->SubSlice(b), input_tensor.SubSlice(b), channels, backwards_);

其中 b 是我要传递给此计算函数的批处理索引。但是,它给了我一个错误

error: cannot bind non-const lvalue reference of type ‘tensorflow::Tensor&’ to an rvalue of type ‘tensorflow::Tensor’

我相信这是因为 output_tensor 是一个指针,但我应该如何传递它呢? SubSlice 函数 return 不应该是张量吗?我试过了

&(output_tensor->SubSlice(b))
*(output_tensor->SubSlice(b))

也是,但都会产生不同的错误。任何人都可以提供有关我应该如何通过这个的见解吗?谢谢!

虽然我不熟悉tensorflow C++,但我注意到在mp.compute(output_tensor->SubSlice(b), input_tensor.SubSlice(b), channels, backwards_);中,第一个参数是一个右值,不能用于赋值目的。我建议:

auto sliced_putput = output_tensor->SubSlice(b);
mp.compute(sliced_output, input_tensor.SubSlice(b), channels, backwards_);
//Assign sliced output to the output_tensor's appropriate dimensiton