Pytorch模型转TorchScript及部署

Pytorch模型转TorchScript

1.背景
通过cpp调用pytorch模型
2. 转换方法
Pytorch框架TorchScript模型转换方法
3. 部署

#include
#include 
#include  

int main()
{
	//定义使用cuda
	auto device = torch::Device(torch::kCUDA,0);
	//读取图片
	auto image = cv::imread("your path to\\flower.jpg");
	//缩放至指定大小
	cv::resize(image, image, cv::Size(224, 224));
	//转成张量
	auto input_tensor = torch::from_blob(image.data, { image.rows, image.cols, 3 }, torch::kByte).permute({ 2, 0, 1 }).unsqueeze(0).to(torch::kFloat32) / 225.0;
	//加载模型
	auto model = torch::jit::load("your path to\\resnet34.pt");
	model.to(device);
	model.eval();
	//前向传播
	auto output = model.forward({input_tensor.to(device)}).toTensor();
	output = torch::softmax(output, 1);
	std::cout << "模型预测结果为第" << torch::argmax(output) << "类,置信度为" << output.max() << std::endl;
	return 0;
}
————————————————
版权声明:本文为CSDN博主「AllentDan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/AllentDan/article/details/115313683
  1. 踩坑记录
    Pytorch C++部署 之 TorchScript 踩坑记录
    TorchScript使用的注意事项和常见错误
    自己的踩坑记录
    模型转换ok,cpp预测时报错 Error:double free or corruption (!prev)
    查到这个
    关于double free or corruption (!prev)错误
    检查了一下网络的forward()代码,发现该网络调用了一个方法来规范化输入的分辨率,将规范输入分辨率的代码直接放于forward()中,成功解除。(不知道是否是上述链接中的原因造成的,欢迎大家讨论)

你可能感兴趣的:(pytorch,深度学习)