MSCV+Qt调用pytorch模型
本文最后更新于 1679 天前,其中的信息可能已经有所发展或是发生改变。

最近需要把深度学习模型直接部署到Qt里,然后遇到了不少坑,就顺带记录一下

MSVC调用Pytorch模型

首先第一步是通过VS调用Pytorch模型,这步还算简单,官方直接有编译好的库下载

下载地址:https://download.pytorch.org/libtorch/cu90/libtorch-win-shared-with-deps-latest.zip

然后配合各种博客配置一番就搞定编译了

https://oldpan.me/archives/pytorch-windows-libtorch

https://www.cnblogs.com/geoffreyone/p/10827010.html

不过要注意一下CMake的时候,如果没有把libtorch放到环境变量里,就要手动在CMake里指定路径

cmake_minimum_required(VERSION 3.0 FATAL_ERROR)

project(torch_demo)

# 就是下面两句设定了torch路径
FIND_PATH(Libtorch REQUIRED)
set(CMAKE_PREFIX_PATH ${Libtorch})

find_package(Torch REQUIRED)

set(CMAKE_BUILD_TYPE Release)
add_executable(torch_demo main.cpp)
target_link_libraries(torch_demo "${TORCH_LIBRARIES}")
set_property(TARGET torch_demo PROPERTY CXX_STANDARD 11)
SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/RELEASE")

# 本来想直接拷贝dll的,不过写的太暴力了,还是算了
# file(GLOB TORCH_DLL "${Libtorch}/lib/*.dll")
# foreach(loop_var ${TORCH_DLL})
#     add_custom_command(TARGET torch_demo POST_BUILD        # Adds a post-build event to torch_demo
#         COMMAND ${CMAKE_COMMAND} -E copy_if_different      # which executes "cmake - E copy_if_different..."
#             "${loop_var}"                                  # <--this is in-file
#             $<TARGET_FILE_DIR:torch_demo>)                 # <--this is out-file path
# endforeach(loop_var) 

然后使用的时候,建议看官网文档,API可能会有变动,像上面的博客里的代码就有一处变动

Qt调用libtorch

一开始这步就是编译不过,每次都是440个错误

找了半天,找到篇博客,说了解决方案,include的时候要像下面这样

#undef slots
#include "torch/torch.h"
#def slots Q_SLOTS

不过在我这里还是不行,得改成下面这样

#undef slots
#undef UNICODE
#include "torch/torch.h"
#include "torch/script.h"
#define slots Q_SLOTS

不过我没找到UNICODE的原始定义是啥,不过好像程序运行也没啥问题,就先这样吧

pro文件里按照这篇博客修改,只要把那些没有的静态库去掉,还有一处cpu换成gpu就行了,改完以后我的.pro文件如下所示

INCLUDEPATH += E:\pytorch_demo\libtorch\include \
               E:\pytorch_demo\libtorch\include\torch\csrc\api\include \
               C:\Program Files\NVIDIA Corporation\NvToolsExt\include \
               C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include \

DEPENDPATH += E:\pytorch_demo\libtorch\include

LIBS += -LE:\pytorch_demo\libtorch\lib\ -lc10 \
        -lcaffe2_detectron_ops_gpu \
        -lcaffe2_module_test_dynamic \
        -lclog -lcpuinfo \
        -llibprotobuf -llibprotobuf-lite -llibprotoc \
        -ltorch

LIBS += $$quote(C:\Program Files\NVIDIA Corporation\NvToolsExt\lib\x64\nvToolsExt64_1.lib) \
        $$quote(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64\cudart_static.lib) \
        $$quote(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64\cufft.lib) \
        $$quote(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64\curand.lib) \
        $$quote(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64\cudnn.lib) \
        $$quote(C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64\cublas.lib)

这样就编译过了,不过运行直接出错,模型加载就有问题。。

update:

上面的pro文件有两个地方路径有空格,所以有问题,加上就好了,但是速度差了近4倍。。如果是cpu模式下能差近7倍,不知道为啥Qt上速度这么慢

file

评论

  1. 匿名
    4年前
    2020-5-08 14:14:28

    ( ̄▽ ̄)

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇