前言:
自己的碎碎念,我已经找到了自己的方向了,深度学习方面神仙大战。除了深度学习是要有自己的其余东西啊,例如图像处理的知识,C++的能力一样很重要。自己因为专业原因可能更加偏向于向汽车领域的深度学习方面发展,或者机器人领域的视觉。在这些领域C++知识不可获取,趁着有时间先捣鼓下。
流程:
pytorch训练,产生模型,这里直接使用res16,这里我推荐初次使用的朋友先用谷歌的colab白嫖。
import torch
import torchvision
# An instance of your model.
model = torchvision.models.resnet18()
# An example input you would normally provide to your model's forward() method.
example = torch.rand(1, 3, 224, 224)
# Use torch.jit.trace to generate a torch.jit.ScriptModule via tracing.
traced_script_module = torch.jit.trace(model, example)
traced_script_module.save("1.pt")
这里实际上pytorch保存模型有两种方法,一种是trace,一种是script,根据[1]我的理解是有自己的逻辑的时候模块(类)需要使用script,使用trace无法跟踪。
有了模型,接下来就是C++的调用了。
首先需要下载libtorch(这里选取cpu版本),最好和你生成pt文件的pytorch版本相同[2]。
新建一个文件夹test。
在test,写前向传播C++的调用端口,名为loadmodule.cpp:
#include<iostream>
#include"torch/script.h"
#include"torch/torch.h"
using namespace std;
int main(int argc, const char* argv[]){
torch::jit::script::Module module;
try {
// Deserialize the ScriptModule from a file using torch::jit::load().
module = torch::jit::load(argv[1]);
}
catch (const c10::Error& e) {
std::cerr << "error loading the modeln";
return -1;
}
std::vector<torch::jit::IValue> inputs;
inputs.push_back(torch::ones({1, 3, 224, 224}));
// Execute the model and turn its output into a tensor.
at::Tensor output = module.forward(inputs).toTensor();
std::cout << output.slice(/*dim=*/1, /*start=*/0, /*end=*/5) << 'n';
}
使用cmake生成makefile,注意把CmakeLists.txt中的path替换掉
mkdir build
cd build
gedit CMakeLists.txt
//复制以下内容导CMakeLists
cmake_minimum_required(VERSION 3.5)
project(test_pytorch)
set(CMAKE_CXX_STANDARD 11)#c++11
set(Torch_DIR /home/a/下载/libtorch/share/cmake/Torch) #指定libTorch位置(应该是有更好的办法安装)
#include_directories(${OpenCV_INCLUDE_DIRS} /home/xxx/下载/libtorch/include /home/xxx/下载/libtorch/include/torch/csrc/api/include)
#find_package(OpenCV REQUIRED)
find_package(Torch REQUIRED) # 自动查找libTorch包
add_executable(loadmodule loadmodule.cpp)
target_link_libraries(loadmodule ${OpenCV_LIBS} ${TORCH_LIBRARIES}) # 加入libTorch的库文件路径
//camke内容终止
//终端执行
cmake --DCMAKE_PREFIX_PATH=/home/a/下载/libtorch ..
接着编译makefile
make
最后执行文件发现生效了
运行以下实验:
./loadmodule 1.pt
[1]
https://pytorch.org/tutorials/advanced/cpp_export.htmlpytorch.org[2]
PyTorchpytorch.org![b038442bee908df2dffaaa76c75c10ad.png](https://i-blog.csdnimg.cn/blog_migrate/a447a092cd774a77b3bed52c28fb1b49.png)