[服务器推理加速工作-6.19~7.1]

1. Torch C++

 1.1 Windows运行

注意libtorch和PyTorch的版本要一致,下载对应版本的方法:

GPU版:cu90表示cuda9,1.0.1表示版本号

https://download.pytorch.org/libtorch/cu90/libtorch-win-shared-with-deps-1.0.1.zip

在下载解压以后,利用CMake-gui生成VS2017工程,CMAKE_BUILD_TYPE要选Release才能正常运行

[服务器推理加速工作-6.19~7.1]_第1张图片

 1.2 Linux运行

和Windows的步骤基本一样,但要注意opencv和gcc版本的问题,libtorch在gcc5以下会遇到std::bad_alloc问题,建议使用GCC5以上,如果遇到imread未定义引用问题,最好用对应版本的gcc编译新的opencv,并在CMakeLists.txt中指定opencv路径

编译如果遇到-ldebug,-loptimized无法找到问题,需要加入第20行

CMakeLists.txt:

[服务器推理加速工作-6.19~7.1]_第2张图片

 1.3 Tensor接口,打印输出结果

// 将opencv Mat类型转换成tensor,使用from_blob接口,而不是
// auto img_tensor = torch::CPU(torch::kFloat32).tensorFromBlob(img_float.data, { 1, 
// input_image_size, input_image_size, 3 });
auto img_tensor = torch::from_blob(resizeimg.data, {32, 128, 3 }, torch::kUInt8);    

auto out_tensor = module->forward({ img_tensor }).toTensor();

std::cout << out_tensor.slice(0, 0, out_tensor.size(0)) << std::endl;


//另一种得到输出元素的写法
    for (int i = 0;i<128;i++)
    {
        // 转化成Float
        feature1[i] = output_1[0][i].item().toFloat();
        feature2[i] = output_2[0][i].item().toFloat();
    }

 1.4 注意事项

运行cmake时要指定libtorch的路径,为了测试单线程效果需要使用export OMP_NUM_THREADS=1

cmake -D CMAKE_PREFIX_PATH=/data/home/ryankang/Workspace/pytorch/libtorch_1.0.1/libtorch/share/cmake/Torch ..

2.caffe转PyTorch

主要是实现了CRNN类型的网络由caffe转成pytorch,需要自己写参数转换脚本。需要注意的是

A.batchNorm层有三个参数blob,blob[0]/blob[2] blob[1]/blob[2]才是真正的mean和var

B.PyTorch的bn层是caffe的bn+scale

C.caffe中LSTM计算门的顺序和pytorch不一样,需要重组参数的layout

 

你可能感兴趣的:(工作笔记)