使用c++部署Pytorch---Msnhnet(1)

Msnhnet (以git为准,csdn不再同步更新)

一款轻量的用于推理pytorch模型的框架,该框架受darknet启发.

在这里插入图片描述

Ps: 目前本框架在持续开发中. 也欢迎有志之士一块维护本框架. 欢迎Star.

git地址:https://github.com/msnh2012/Msnhnet

目前测试过的操作系统 (你可以自己测试下mac os)

windowslinuxmac os
checked
x
gpu
x
x
x

目前测试过的CPU (其它U出现BUG可以在issue提出)

Intel i7树莓派4BJeston NX(cpu)
checked

特点

  • 由纯c++编写完成, 不依赖其它第三方计算库, 同时也支持OpenBlas库.
  • 该框架自带一套类似netron的可视化工具, 可在编写Msnhnet文件时清晰掌握网络结构.
  • 支持目前主流的操作系统,Windows, linux(Ubuntu测试), mac os(未测试).
  • 支持目前主流的cpu芯片, Intel X86,AMD(未测试) 和ARM.
  • 支持keras转Msnhnet. (Keras 2 and tensorflow 1.x)
  • GPU cuda支持. (测试过的显卡 GTX1080Ti, Jetson NX)
  • GPU cudnn支持. (测试过的显卡 GTX1080Ti, Jetson NX)
  • GPU fp16支持.(测试过的显卡 GTX1080Ti, Jetson NX)
  • ps. 请检查你的显卡是否支持fp16双倍加速.
  • 持续开发中…(也就晚上有时间… (╮(╯_╰)╭))

Yolo测试

  • Win10 MSVC 2017 I7-10700F (Linux平台大约比Win快10~20%,当然不是所有网络)

    nettime
    yolov3465ms
    yolov3_tiny75ms
    yolov4600ms
  • Win10 MSVC 2017 I7-10700F

    netyolov3yolov3_tinyyolov4
    time465ms75ms600ms
  • ARM(Yolov3Tiny cpu)

    cpuraspberry 3Braspberry 4BJeston NX
    without NNPack6s2.5s1.2s
    with NNPack2.5s1.1s0.6s

Yolo GPU 测试

  • Ubuntu16.04 GCC Cuda10.1 GTX1080Ti

    netyolov3yolov3_tinyyolov4
    time30ms8ms30ms
  • Jetson NX

    netyolov3yolov3_tinyyolov4
    time280ms30ms210ms

Yolo GPU cuDnn FP16 测试

  • Jetson NX
    netyolov3yolov4
    time140ms120ms

其他已测试的网络(欢迎测试新的模型)

  • lenet5
  • lenet5_bn
  • alexnet
  • vgg16
  • vgg16_bn
  • resnet18
  • resnet34
  • resnet50
  • resnet101
  • resnet152
  • darknet53
  • googLenet
  • mobilenetv2
  • yolov3
  • yolov3_spp
  • yolov3_tiny
  • yolov4
  • fcns
  • unet
  • 预训练模型下载
    百度云盘 提取码:nzgm

依赖

如何编译

  • CMake要求: CMake 3.10+

  • 编译选项

  • 注意Viewer不能在GPU模式下编译
    在这里插入图片描述

  • ps. 你可以在CMakeLists.txt:43设置最大OMP占用线程, 默认是OMP使用所有CPU线程.(需取消勾选OMP_MAX_THREAD)

  • Windows平台编译(MSVC)

    • 1.使用CMake编译安装OpenCV4和Yaml-cpp.
    • 2.在环境变量中添加"OpenCV_DIR"和"yaml-cpp_DIR"变量, 并设置变量内容为每个库的CMake目录.
    • 3.下载安装Qt5.
    • 4.把Qt5的bin目录添加环境变量Path.
    • 5.最后使用CMake GUI工具配置Msnhnet然后使用Visual Studio编译安装.
  • Linux(Ubuntu )
    注意: 构建NX的GPU版本取消勾选NNPACK NEON OMP OPENBLAS .

    sudo apt-get install qt5-default      #optional
    sudo apt-get install libqt5svg5-dev   #optional
    sudo apt-get install libopencv-dev
    
    # build yaml-cpp
    git clone https://github.com/jbeder/yaml-cpp.git
    cd yaml-cpp
    mdir build 
    cd build 
    cmake .. -DYAML_BUILD_SHARED_LIBS=True -DYAML_CPP_BUILD_TESTS=False
    make -j4
    sudo make install 
    
    #config 
    sudo echo /usr/local/lib > /etc/ld.so.conf.d/usrlib.conf
    sudo ldconfig
    
    # build Msnhnet
    git clone https://github.com/msnh2012/Msnhnet.git
    
    cd Msnhnet/build
    cmake -DCMAKE_BUILD_TYPE=Release ..  
    make -j4
    sudo make install
    
    vim ~/.bashrc # Last line add: export PATH=/usr/local/bin:$PATH
    sudo ldconfig
    

测试

  • 1.首先下载预训练模型并解压. eg.D:/models.
  • 2.打开终端或CMD, cd到安装目录. eg. D:/Msnhnet/bin
  • 3.测试 yolov3
    yolov3 D:/models
  • 4.测试 yolov3tiny_video
    yolov3tiny_video D:/models
  • 5.测试 classify
    classify D:/models
    在这里插入图片描述

使用MsnhnetViewer查看网络结构

  • 1.打开终端或CMD, cd到安装目录 eg. D:/Msnhnet/bin
  • 2.运行 “MsnhnetViewer”在这里插入图片描述
  • Ps. "ResBlock Res2Block AddBlock ConcatBlock"为网络层的封装, 你可以双击该块查看详细内容.

各个封装的结构
在这里插入图片描述
Res2Block
在这里插入图片描述
AddBlock
在这里插入图片描述
ConcatBlock
在这里插入图片描述
如何转换模型

  • 1.使用Pytorch加载你的模型, 并输出网络结构.
import torchvision.models as models
import torch
from torchsummary import summary 

md = models.resnet18(pretrained = True)
md.to("cpu")
md.eval()

print(md, file = open("net.txt", "a"))

summary(md, (3, 224, 224),device='cpu')
  • 2.根据网络结构, 编写Msnhnet文件, 跟darknet和caffe类似.
  • 3.导出msnhBin (具体细节请查看"pytorch2msnhbin/pytorch2msnhbin.py")
val = []
dd = 0
for name in md.state_dict():
        if "num_batches_tracked" not in name:
                c = md.state_dict()[name].data.flatten().numpy().tolist()
                dd = dd + len(c)
                print(name, ":", len(c))
                val.extend(c)

with open("alexnet.msnhbin","wb") as f:
    for i in val :
        f.write(pack('f',i))

关于训练

加群交流
在这里插入图片描述

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值