本人親測十分好用,適合在windows部署,眾所周知在windows上用C++部署深度學習一般比較困難,尤其這個框架還支持C#,十分了得,
Msnhnet(V2.0 偏向于于機器人視覺發展)🔥
開源地址:https://github.com/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 1.x, 部分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系列: https://github.com/dog-qiuqiu/MobileNetv2-YOLOV3 ==============================================================
- pretrained models 鏈接:https://pan.baidu.com/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 (可選.) https://github.com/opencv/opencv
- Qt5 (可選. 編譯Msnhnet viewer時使用) http://download.qt.io/archive/qt/
- opengl(可選. 編譯 MsnhCV GUI 時用) .
- glew(可選. 編譯 MsnhCV GUI 時用) http://glew.sourceforge.net/ .
- glfw3(可選. 編譯 MsnhCV GUI 時用) https://www.glfw.org/.
- Cuda10+, Cudnn7.0+. (可選)
視頻教程(B站)
- 如何在Linux上編譯
- 如何在winows上編譯
- Pytorch引數轉msnhbin
如何編譯
- CMake要求: CMake 3.15+
- 注意Viewer不能在GPU模式下編譯
ps. 你可以在CMakeLists.txt: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). http://glew.sourceforge.net/ (可選).
- 6.下載glfw3(原始碼).https://www.glfw.org/ (可選).
- 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/ld.so.conf.d/usrlib.conf sudo ldconfig # build Msnhnet git clone https://github.com/msnh2012/Msnhnet.git 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.首先下載預訓練模型并解壓. 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"為網路層的封裝, 你可以雙擊該塊查看詳細內容.
各個封裝的結構 ResBlock 
Res2Block 
AddBlock 
ConcatBlock 
如何轉換模型
- pytorch2msnhnet
- ps.
- 在轉換之前,請務必檢查下你的模型所用的算子被pytorch2Msnhnet支持,
- 可能有些模型轉換不成功,
- 如果你的模型包含非常復雜的前處理和后處理,請先轉backbone,再手動添加OP.
- 對于u版yolov3和yolov4.參考這個視頻,視頻中的工具遷移至此.
關于訓練
- 使用pytorch版本的各個模型訓練即可,訓練完成后,按照上一步,構建Msnhnet即可.
- 如yolov3/4. 使用U版: https://github.com/ultralytics/yolov3
Enjoy it! :D
感謝
Msnhnet參考了以下框架:
- DarkNet
- NCNN
- ACL
第三方庫
- stb_image
- yaml-cpp
- imGui
- mpeg
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287825.html
標籤:其他
