gpt4 book ai didi

c++ - 如何在 C++ 中提取 torch 模型的输出?

转载 作者:行者123 更新时间:2023-12-03 07:02:30 25 4
gpt4 key购买 nike

我已经训练有素的 keras 模型并使用 mmdnn 对其进行了转换.然后我尝试在 C++ 代码中使用它:

#include <iostream>

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

#include <torch.h>

int main()
{
cv::Mat image;
image= cv::imread("test_img.png", cv::IMREAD_GRAYSCALE); // Read the file

try
{
torch::jit::script::Module module;
module = torch::jit::load("my_model.pth");

torch::IntArrayRef input_dim = std::vector<int64_t>({ 1, 2, 256, 256});

cv::Mat input_img;
image.convertTo(input_img, CV_32FC3, 1 / 255.0);
torch::Tensor x = torch::from_blob(input_img.data, { 1, 2, 256, 256 }, torch::kFloat);
torch::NoGradGuard no_grad;

auto output = module.forward({ x });

float* data = static_cast<float*>(output.toTensor().data_ptr());

cv::Mat output_img = cv::Mat(256, 256, CV_32FC3, data);
cv::imwrite("output_img.png", output_img);
}
catch (std::exception &ex)
{
std::cout << "exception! " << ex.what() << std::endl;
}

return 0;
}

此代码抛出异常:

exception! isTensor() INTERNAL ASSERT FAILED at E:\20B\pytorch\pytorch\aten\src\ATen/core/ivalue_inl.h:112, please report a bug to PyTorch. Expected Tensor but got Tuple (toTensor at E:\20B\pytorch\pytorch\aten\src\ATen/core/ivalue_inl.h:112) (no backtrace available)

这是在 float* data = static_cast<float*>(output.toTensor().data_ptr()); 行中抛出的当函数 toTensor()被称为。如果我使用 toTuple()而不是 toTensor()那么结果没有函数 data_ptr() ,但我需要它来提取数据(并将其放入 opencv 图像中)。

如何从模型输出中提取图像?

最佳答案

在这种情况下,模型的答案是 2 个图像的元组。我们可以通过这样的方式提取它们:

torch::Tensor t0 = output.toTuple()->elements()[0].toTensor();
torch::Tensor t1 = output.toTuple()->elements()[1].toTensor();

变量 t0t1 包含带有模型输出的张量。

关于c++ - 如何在 C++ 中提取 torch 模型的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62158785/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com