本人亲测十分好用,适合在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。
- 持续开发中...(也就晚上有时间... (╮(╯_╰)╭))
已测试的网络
- 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