深度学习模型一般都是用python(基于pytorch)进行训练的,下面就说一下如何用C++加载python训练的模型。
首先在python训练完模型后,得到.pth的训练模型。然后在生成C++所需的.pt文件时,调用torch.jit.trace()函数时,给模型提供一个正常的输入(需要与模型正常的输入格式相同),在本文中输入的是一张图片, 如下:
img = cv2.imread("test.jpg") #读入图像
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
inputs = img
inference(img, show_result=True, target_shape=(360, 360)) #模型测试函数
由于模型中对输入的图片进行了处理,所以在生成.pt文件时,也应该对图片进行处理:
inputs_resized = cv2.resize(inputs, (360, 360))
inputs_np = inputs_resized / 255.0 # 归一化到0~1
inputs_exp = np.expand_dims(inputs_np, axis=0)
inputs_transposed = inputs_exp.transpose((0, 3, 1, 2))
根据自己代码中怎么处理自行修改(话说一千个读者就有一千个哈姆雷特,自己对号修改就行了)。
修改完后,开始进行生成.pt操作,调用torch.jit.trace()函数。
traced_script_module = torch.jit.trace(model, torch.tensor(inputs_transposed).float())
model时自己声明的网络模型,torch.tensor(inputs_transposed).float()时模型的输入(与测试时的输入格式相同)
可以看看调用上边生成模型后,是否有输出(注意:如果