pytorch模型(pth,pkl)转ncnn(中介onnx)(附搭建ncnn教程)pytorch模型(pth,pkl)转ncnn(中介onnx)(附搭建ncnn教程)
⽂章⽬录
部署ncnn
pytorch转ncnn是要在电脑上部署好ncnn环境,下图为可部署ncnn的平台
在windows上部署ncnn(基于VS2019)
⼀.安装VS2019
⼆.安装cmake 3.16.5
2.添加环境变量(将解压后cmake-
3.16.5-win64-x64⽂件夹点开进⼊bin将该路径添加⾄环境变量)
三.安装protobuf-3.4.0
明星慈善夜
1.下载后解压
2.使⽤VS2019中X64的命令⾏(下图红框)
4.打开命令⾏后输⼊命令( 为你刚刚解压的protobuf-3.4.0⽂件夹的根⽬录)
> cd <protobuf-root-dir>
> mkdir build-vs2019
> cd build-vs2019
> cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -Dprotobuf_BUILD_TESTS=OFF -Dprotobuf _MSVC_STATIC_RUNTIME=OFF ../cmake
> nmake
> nmake install
5.成功后会产⽣build-vs2019⽂件夹以及该⽂件夹下的若⼲⽂件夹及⽂件
四.构建ncnn
2.git clone该项⽬,或者直接下载压缩包
3.打开VS2019的X64命令⾏(进⼊到ncnn根⽬录下)执⾏以下语句
注意:cmake -G…这条命令有三个需要换成之前安装protobuf-3.4.0的根⽬录
> cd <ncnn-root-dir>
> mkdir -p build-vs2019
> cd build-vs2019
> cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%cd%/install -DProtobuf_INCLUDE_DIR=<protobuf-root-d ir>/build-vs2019/install/include -DProtobuf_LIBRARIES=<protobuf-root-dir>/build-vs2019/install/lib/libprotobuf.lib -DProtobuf_PROTOC_EXECUTABLE=<pro tobuf-root-dir>/build-vs2019/install/ -DNCNN_VULKAN=OFF ..
> nmake
> nmake install
4.成功后会产⽣build-vs2019⽂件夹以及该⽂件夹下的若⼲⽂件夹及⽂件
五.安装opencv
2.下载opencv-
3.
4.2-vc14_vc1
<
3.下载后解压
4.配置环境变量(类⽐cmake)
在Ubuntu18.04上部署ncnn
⼀.将gcc、g++降级为4.8.5版本
sudo apt-get install gcc-4.8 g++4.8
cd /usr/bin
sudo rm g++ gcc
sudo ln -s gcc-4.8 gcc
樗sudo ln -s g++-4.8 g++
⼆.安装protobuf
2.下载protobuf后解压
3.执⾏以下命令
cd protobuf-2.6.1
./configure
make -j8
make check
sudo make install
sudo ldconfig
三.安装opencv
1.1安装cmake
sudo apt-get install cmake
1.2所需依赖
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libswscale-dev libtiff5-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install pkg-config
2.1下载opencv(建议
3.版本的)
2.2解压⽂件并进⼊⽂件夹
mkdir build
cd build
sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
sudo make -j8
乔绍恒>发展党员程序sudo make install
2.3配置环境
使⽤vim打开/etc/f,在⽂件中加⼀⾏/usr/local/lib(其中/user/loacal是opencv安装路径也就是makefile中指定的安装路径)
sudo gedit /etc/f
sudo ldconfig
⽤vim在bash.bashrc⽂件末尾加⼊:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
然后使⽤命令
source /etc/bash.bashrc
四.安装ncnn
跨年晚会哪个卫视最好
git clone github/Tencent/ncnn.git
cd ncnn
mkdir build && cd build
cmake ..
make
make install
pytorch模型转onnx(以TDnet为例)
pytorch转onnx主要是⽤pytorch⾥⾯⾃带的*port()*这个函数(这个函数⽬前在pytorch1.4版本存在)。
先看来⼀下port()的原型与部分参数
example_outputs=None, strip_doc_string=True, dynamic_axes=None, keep_initializers_as_inputs=None)
model:要转换的模型。
args:模型输⼊。
export_params : 如果指定为True或默认, 参数也会被导出. 如果你要导出⼀个没训练过的就设为 False.
verbose: 如果指定,我们将打印出⼀个导出轨迹的调试描述。
training : 训练模式导出模型。 ⽬前,ONNX 仅⾯向导出模型以进⾏推理,因此通常不需要将其设置为 True。
input_names : 按顺序分配名称到图中的输⼊节点。
output_names :按顺序分配名称到图中的输出节点。
opset_version :默认情况下,将模型导出到 onnx ⼦模块的 opset 版本。
样例:
import torch
from model import td4_psp18  ##引⼊⾃⼰的⽹络
##加载模型
model = td4_psp18.td4_psp18(nclass=19,path_num=4,model_path=".\\pretrained\\cityscapes\\td4-psp18.pkl")
model.eval()
input=torch.randn(1,3,769,1537)  ##⽹络输⼊
input_names=["input"]
投档线是什么output_names=["output"]
out_onnx='C:\\Users\\30229\\Desktop\\TDNet-master\\'
我这⾥设置opset_version=11是因为在转换模型的时候报错说opset_version=9不⽀持,需要换成opset_version=11。TDnet除了这个参数会报错之外还不⽀持AdaptiveAvgPool2d,可以将AdaptiveAvgPool2d转为AvgPool2d