[深度学习][转载]Msnhnet一款优秀轻量的用于推理pytorch模型的框架

时间:2024-10-27 20:08:34

本人亲测十分好用,适合在windows部署,众所周知在windows上用C++部署深度学习一般比较困难,尤其这个框架还支持C#,十分了得。

Msnhnet(V2.0 偏向于于机器人视觉发展)????

开源地址:/msnh2012/Msnhnet

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

    Ps: 目前本框架在持续开发中,由于是业余时间开发,更新速度不会很快。也欢迎有志之士一块维护本框架. 欢迎三连.

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

  windows linux mac
checked      
gpu      

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

  Intel i7 raspberry 3B raspberry 4B Jeston NX
checked        

特点

  • 由纯c++编写完成, 不依赖其它第三方计算库, 同时也支持OpenBlas库.
  • 支持目前主流的操作系统,Windows, linux(Ubuntu测试), mac os(未测试).
  • 支持目前主流的cpu芯片, Intel X86,AMD(未测试) 和ARM.
  • 支持x86结构avx2加速(持续优化中)。
  • 支持arm结构neon加速(持续优化中)。
  • 自带一套cv库,类似Opencv.
  • conv2d 3x3s1 3x3s2 winograd3x3s1支持(Arm)
  • GPU cuda支持. (测试过的显卡 GTX1080Ti, Jetson NX)
  • GPU cudnn支持. (测试过的显卡 GTX1080Ti, Jetson NX)
  • GPU fp16支持.(测试过的显卡 GTX1080Ti, Jetson NX)
  • ps. 请检查你的显卡是否支持fp16双倍加速.
  • 该框架自带一套类似netron的可视化工具, 可在编写Msnhnet文件时清晰掌握网络结构.
  • 支持keras转Msnhnet. (Keras 2 and tensorflow , 部分op)
  • 支持pytorch一键转msnhnet(目前只支持部分Op, 持续更新中)。
  • 支持c_api。
  • 支持C#语言,MsnhnetSharp。 
  • 支持msnhnet可视化,类似netron。 pic
  • 持续开发中...(也就晚上有时间... (╮(╯_╰)╭))

已测试的网络

  • lenet5
  • lenet5_bn
  • alexnet(torchvision)
  • vgg16(torchvision)
  • vgg16_bn(torchvision)
  • resnet18(torchvision)
  • resnet34(torchvision)
  • resnet50(torchvision)
  • resnet101(torchvision)
  • resnet152(torchvision)
  • darknet53(Pytorch_Darknet53)
  • googLenet(torchvision)
  • mobilenetv2(torchvision)
  • yolov3(u版yolov3)
  • yolov3_spp(u版yolov3)
  • yolov3_tiny(u版yolov3)
  • yolov4(u版yolov3)
  • fcns(pytorch-FCN-easiest-demo)
  • unet(bbuf keras)
  • deeplabv3(torchvision)
  • yolov5s????(U版yolov5,用于导出参数)
  • yolov5m????(U版yolov5,用于导出参数) ==============================================================
  • mobilenetv2_yolov3_lite (cudnn分组卷积对Gtx10系列的Pascal显卡支持不好,请使用GPU模式)
  • mobilenetv2_yolov3_nano (cudnn分组卷积对Gtx10系列的Pascal显卡支持不好,请使用GPU模式)
  • yoloface100k (cudnn分组卷积对Gtx10系列的Pascal显卡支持不好,请使用GPU模式)
  • yoloface500k (cudnn分组卷积对Gtx10系列的Pascal显卡支持不好,请使用GPU模式)
  • 感谢qiuqiu的mobilenet yolo系列: /dog-qiuqiu/MobileNetv2-YOLOV3 ==============================================================
  • pretrained models 链接:/s/1mBaJvGx7tp2ZsLKzT5ifOg 提取码:x53z
  • pretrained models 连接:Google Drive
  • 效果

Yolo测试

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

    net yolov3 yolov3_tiny yolov4
    time 380ms 50ms 432ms
  • ARM(Yolov3Tiny cpu)

    cpu raspberry 3B raspberry 4B Jeston NX
    with neon asm ? 0.432s ?

Yolo GPU 测试

  • Ubuntu16.04 GCC Cuda10.1 GTX1080Ti

    net yolov3 yolov3_tiny yolov4
    time 30ms 8ms 30ms
  • Jetson NX

    net yolov3 yolov3_tiny yolov4
    time 200ms 20ms 210ms

Yolo GPU cuDnn FP16 测试

  • Jetson NX
    net yolov3 yolov4
    time 115ms 120ms

Yolov5s GPU 测试

  • Ubuntu18.04 GCC Cuda10.1 GTX2080Ti
    net yolov5s yolov5s_fp16
    time 9.57ms 8.57ms

Mobilenet Yolo GPU cuDnn 测试

  • Jetson NX
    net yoloface100k yoloface500k mobilenetv2_yolov3_nano mobilenetv2_yolov3_lite
    time 7ms 20ms 20ms 30ms

DeepLabv3 GPU 测试

  • Ubuntu18.04 GCC Cuda10.1 GTX2080Ti
    net deeplabv3_resnet101 deeplabv3_resnet50
    time 22.51ms 16.46ms

依赖

  • OpenCV4 (可选.) /opencv/opencv
  • Qt5 (可选. 编译Msnhnet viewer时使用) /archive/qt/
  • opengl(可选. 编译 MsnhCV GUI 时用) .
  • glew(可选. 编译 MsnhCV GUI 时用) / .
  • glfw3(可选. 编译 MsnhCV GUI 时用) /.
  • Cuda10+, Cudnn7.0+. (可选)

视频教程(B站)

  • 如何在Linux上编译
  • 如何在winows上编译
  • Pytorch参数转msnhbin

如何编译

  • CMake要求: CMake 3.15+
  • 注意Viewer不能在GPU模式下编译

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

  • Windows平台编译(MSVC)

    • 1.使用CMake编译安装OpenCV4 (可选).
    • 2.在环境变量中添加"OpenCV_DIR", 并设置变量内容为每个库的CMake目录 (可选).
    • 3.下载安装Qt5 (可选).
    • 4.把Qt5的bin目录添加环境变量Path (可选).
    • 5.下载glew(win32). / (可选).
    • 6.下载glfw3(源码)./ (可选).
    • 7.解压glew,添加glew目录到系统环境变量"CMAKE_PREFIX_PATH" (可选).
    • 8.使用cmake编译glfw3, 添加glfw3的cmake文件夹路径到系统环境变量"GLFW_DIR" (可选).
    • 9.最后使用CMake GUI工具配置Msnhnet然后使用Visual Studio编译安装.
  • Linux(Ubuntu ) 注意: 构建NX的GPU版本取消勾选NEON OPENBLAS.

    sudo apt-get install build-essential
    sudo apt-get install qt5-default      #可选
    sudo apt-get install libqt5svg5-dev   #可选
    sudo apt-get install libopencv-dev    #可选
    sudo apt-get install libgl1-mesa-dev libglfw3-dev libglfw3 libglew-dev #可选
    
    
    #config 
    sudo echo /usr/local/lib > /etc//
    sudo ldconfig
    
    # build Msnhnet
    git clone /msnh2012/
    mkdir build 
    
    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.首先下载预训练模型并解压. :/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"为网络层的封装, 你可以双击该块查看详细内容.

各个封装的结构 ResBlock 

Res2Block 

AddBlock 

ConcatBlock 

如何转换模型

  • pytorch2msnhnet
  • ps.
  • 在转换之前,请务必检查下你的模型所用的算子被pytorch2Msnhnet支持。
  • 可能有些模型转换不成功。
  • 如果你的模型包含非常复杂的前处理和后处理,请先转backbone,再手动添加OP.
  • 对于u版yolov3和yolov4.参考这个视频。视频中的工具迁移至此.

关于训练

  • 使用pytorch版本的各个模型训练即可,训练完成后,按照上一步,构建Msnhnet即可.
  • 如yolov3/4. 使用U版: /ultralytics/yolov3

Enjoy it! :D

感谢

Msnhnet参考了以下框架:

  • DarkNet
  • NCNN
  • ACL

第三方库

  • stb_image
  • yaml-cpp
  • imGui
  • mpeg