rk3588上编译c++版本的torch torchvision ncnn

一 编译torch

        我这是用torch==2.3.1,torchvision==0.18.1,注意torch和torchvision的版本要对应上。

        1. 克隆源码

git clone --recursive https://github.com/pytorch/pytorch.git 
cd pytorch
git checkout v2.3.1    #跳转到你指定的版本
git submodule sync
git submodule update --init --recursive

        2. 编译安装

                我这里是安装到/opt/libtorch下,没有GPU加速,编译选项按自己的需求进行修改。

cd pytorch
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/opt/libtorch -DCMAKE_CXX_STANDARD=17 -D CMAKE_CXX_STANDARD_REQUIRED=ON -D USE_CUDA=OFF -D USE_CUDNN=OFF -D USE_OPENCV=ON -D BUILD_CAFFE2_MOBILE=OFF -D BUILD_PYTHON=OFF -D BUILD_CAFFE2_OPS=OFF -D BUILD_TEST=OFF -D USE_TBB=OFF ..
make -j4
sudo make install

        3. 报错解决

                torch的编译是需要依赖python环境的,缺啥模块就安装啥模块,下面的两个模块是我碰到需要安装的

                pyyaml  typing_extensions

        4. 测试

                4.1 测试程序,example-torch.cpp

#include <torch/torch.h>
#include <iostream>
 
int main() {
    torch::Tensor tensor = torch::rand({2, 3}); 
    std::cout << tensor << std::endl; 
    return 0;
}     

               4.2 CMakeLists.txt

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
project(example-torch)

set(Torch_DIR /opt/libtorch/share/cmake/Torch/) 
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
 
add_executable(example-torch example-torch.cpp)
target_link_libraries(example-torch "${TORCH_LIBRARIES}")
set_property(TARGET example-torch PROPERTY CXX_STANDARD 17)

                     注意1. 查找Torch,需要设置Torch_DIR 或者 CMAKE_PREFIX_PATH,

set(Torch_DIR /opt/libtorch/share/cmake/Torch) 
set(CMAKE_PREFIX_PATH /opt/libtorch)

                      注意2. 需要添加set_property,不然会报错,#error C++17 or later compatible         ,compiler is required to use PyTorch.

set_property(TARGET example-torch PROPERTY CXX_STANDARD 17)

                4.3 测试结果如下,说明torch编译成功

注意:在这下载的是x86-64格式的

二 编译torchvision

        1. 获取源码

git clone --recursive https://github.com/pytorch/vision		// 下载跟torch对应的版本
cd vision
git checkout v0.18.1    #跳转到你指定的版本
git submodule sync
git submodule update --init --recursive

# 或者 去 https://github.com/pytorch/vision/releases/tag/v0.18.1 下载压缩包也可以

        2. 编译

                同级目录下创建目录torchvision,用来存放编译好的torchvision。

                编译选项按自己的需求进行修改。

                编译时会找libz库,我这装了opencv,里面有这个库,能找到,没有的就去装一个。

cd vision
mkdir build
cd build 
cmake -DCMAKE_PREFIX_PATH=/opt/libtorch -DCMAKE_INSTALL_PREFIX=/home/toybrick/torch/torchvision -DWITH_CUDA=OFF -DCMAKE_BUILD_TYPE=Release ..
make -j4
make install 

        3. 报错解决   

                报错:Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)
                        sudo apt-get install libjpeg-dev

                报错:Could NOT find JPEG (missing: JPEG_LIBRARY JPEG_INCLUDE_DIR)
                        sudo apt-get install libpng-dev

        4. 测试

                使用vision/examples/cpp/hello_world/这个例子进行测试

                4.1 运行trace_model.py,获取模型

                        python trace_model.py
                4.2 运行main.cpp

# 修改CMakeLists.txt
set(CMAKE_PREFIX_PATH "/opt/libtorch;/home/toybrick/torchvision/")    # 按实际路径进行修改
mkdir build
cd build 
cmake ..
make
mv hello-world ..
cd ..
./hello-world

                        运行结果没问题,说明安装成功。

三 编译ncnn

        1. 获取源码

git clone https://github.com/Tencent/ncnn.git

        2. 安装依赖

                按自己的实际情况安装依赖,protobuf最好单独编译,参考网上教程。

sudo apt install cmake protobuf-compiler libprotobuf-dev libopencv-dev protobuf build-essential git autoconf automake libtool curl make g++ unzip

        3.1 编译pnnx,也可以去https://github.com/pnnx/pnnx/releases直接下载pnnx的可执行文件

mkdir ncnn/tools/pnnx/build
cd ncnn/tools/pnnx/build
cmake -DCMAKE_INSTALL_PREFIX=install -DTorch_INSTALL_DIR=/opt/libtorch -DTorchVision_INSTALL_DIR=/home/toybrick/torchvision ..    # 按实际路径进行修改
cmake --build . --config Release -j 4
cmake --build . --config Release --target install

        3.2 编译ncnn

cd ncnn
mkdir -p build
cd build
// CMakeLists.txt文件中有用于控制构建的选项,根据不同的编译需求,可自定义打开或关闭对应功能,NCNN_BENCHMARK---是否打印每个算个耗时 NCNN_SHARED_LIB---动态库
cmake -DNCNN_BUILD_EXAMPLES=ON -DNCNN_SHARED_LIB=ON ..
make -j4
make install 

        4. 验证

                使用ncnn源码中examples的例子进行验证,编译完后,在build/install下就是ncnn的 库和头文件等,build/example下是所有例子的可执行程序。

cd ../examples
../build/examples/squeezenet IMAGE_PATH    // 选一张用于分类的图片

                结果正确即安装成功。

        5.使用

                其他项目中使用ncnn

//添加下面三行即可(按实际路径修改,下面只做为参考)
include_directories(/***/ncnn/include)
link_directories(/***/ncnn/lib)
target_link_libraries(*** -lncnn)

                模型转换

                        1. 使用install/bin下的工具进行转换,如

                                onnx2ncnn ***.onnx   // 即可生成ncnn的.bin和.param文件

                        2. 使用pnnx进行转换

                                把 libtorch/lib 目录下的 so 全部拷贝到 ncnn/tools/pnnx/build/install/bin 里面
                                cd 到 ncnn/tools/pnnx/build/install/bin 目录,运行 ./pnnx

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值