NCNN的编译运行交叉编译
1.在Ubuntu上编译运行ncnn
1)编译ncnn x86 linux
// ubuntu安装依赖
sudo apt install build-essential git cmake libprotobuf-dev protobuf-compiler libomp-dev libvulkan-dev vulkan-tools libopencv-dev
// 下载ncnn以及三方库
git clone https://github.com/Tencent/ncnn.git
git submodule update --init
// 编译
cd ncnn
mkdir -p build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DNCNN_VULKAN=ON -DNCNN_BUILD_EXAMPLES=ON ..
make -j$(nproc)

// 安装到install文件夹
make install prefix=./install
检查一下install文件夹里是不是生成了bin,include和lib



2)测试ncnn x86 linux
上面我们编译的时候打开了-DNCNN_BUILD_EXAMPLES=ON,所以这里就用编译好的例子试一下,由于squeezenet提供了权重文件,所以直接测这个。

把权重文件复制到build/examples里

我们可以看一下squeezent.cpp里,ncnn需要加载.bin和.param模型文件,所以放到同一文件夹。

然后运行
cd build/examples
./squeezenet ../../images/256-ncnn.png

运行成功!
2. 模型转换
这里用pytorch onnx来举例子,简单的模型可以用ncnn编译好的bin来直接转换。
1)onnx

./onnx2ncnn a.onnx a.param a.bin
这边的param就是模型的结构描述文件,bin是模型的具体权重
如果不行尝试使用onnx-simplifier先处理一下模型
onnxsim a.onnx a_sim.onnx
然后再转换a_sim.onnx,这里不多赘述,自行尝试。
2)pnnx
如果我们直接从onnx转换到ncnn的模型经常会出现不兼容不能完全转换的情况,所以我们这边直接使用pnnx来进行模型转换。
PyTorch Neural Network eXchange
pnnx github
PyTorch Neural Network eXchange(PNNX) is an open standard for PyTorch model interoperability. PNNX provides an open model format for PyTorch. It defines computation graph as well as high level operators strictly matches PyTorch.
我们以efficientnet为例
链接: https://github.com/lukemelas/EfficientNet-PyTorch
import torch
from torchsummary import summary
from efficientnet_pytorch import EfficientNet
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 初始化模型
model = EfficientNet.from_pretrained('efficientnet-b0', advprop=True, num_classes=10)
model.to(device)
# 加载训练好的权重
params_dict = torch.load(r"best.pth")
# 如果训练的时候是多卡使用DataParallel来训的需要用.module.state_dict()得到权重dict
model.load_state_dict(params_dict.module.state_dict())
summary(model, (3, 416, 416))
# efficientnet训练时候用了memory efficient swish激活,导出的时候换成普通swich提高兼容性
model.set_swish(memory_efficient=False)
# model_pt = torch.save(model_pt)
model.eval()
dummy_in = torch.randn(1, 3, 416, 416, requires_grad=True).to(device)
# 导出torchscript权重
mod

最低0.47元/天 解锁文章
595

被折叠的 条评论
为什么被折叠?



