libtorch学习历程(一):libtorch2.4.0+opencv4.10+Qt6安装

news2025/1/12 7:59:45

开发环境

  • Win11
  • RTX4060
  • CUDA12.1
  • libtorch 2.4.0 ,CUDA12.1,release版
  • VS2022
  • opencv4.10版本
  • Qt 6.6.3

软件下载

libtorch下载

直接去pytorch官网下载即可,根据需要下载realease与debug版。
而CUDA的版本则查看CUDA版本教程,来选择合适的。
在这里插入图片描述
在这里插入图片描述
debug版与release版在使用上的区别:

  • release版构建与运行更快,但不能直接进行调试,需要进行配置。
  • debug版构建与运行较慢,但可以进行调试。

opencv下载

直接去官网下载即可。
在这里插入图片描述
在这里插入图片描述

VS2022下载

直接去官网下载即可,安装是选择C++的桌面开发即可。
在这里插入图片描述
然后在单个组件部分,安装Window 10 SDK,以及msvc15/17/19备用。
在这里插入图片描述
在这里插入图片描述

Qt6安装

由于libtorch在2.1版本后,需要使用Qt6以及MSVC19,因此这里安装Qt6。
若是旧版本的,可以参考这个链接:旧版本libtorch配置

按照Qt6安装教程进行安装,亲测中国科学技术大学:http://mirrors.ustc.edu.cn/qtproject/ 的镜像可用。

选择组件时,将MSVC2019与MinGW选上,其余的看自己需要。
在这里插入图片描述
安装完成后,打开Qt Creator,打开构建套件,查看编译器,可以看到Qt自动识别到的编译器。
这要使用的是红框中的编译器。
在这里插入图片描述
打开构建套件,可以看到安装时选择的MSVC与MinGW。
查看MSVC的配置,可以看到所使用的编译器。
在这里插入图片描述

Qt项目配置

新建一个Qt的UI项目,配置pro文件,使得项目可以使用libtorch与opencv。
在这里插入图片描述
debug版与release版的pro文件设置基本一样,只是文件名可能需要修改。
我这里是release版的。

INCLUDEPATH += 你的opencv地址/opencv/build/include
INCLUDEPATH += 你的libtorch地址/libtorch/include
INCLUDEPATH += 你的libtorch地址/libtorch/include/torch/csrc/api/include
INCLUDEPATH += 你的libtorch地址/libtorch/include/torch/csrc/api/include/torch

DEPENDPATH += 你的libtorch地址/libtorch/include
DEPENDPATH += 你的libtorch地址/libtorch/include/torch/csrc/api/include

LIBS += -L你的opencv地址/opencv/build/x64/vc16/lib -lopencv_world4100
LIBS += -L你的libtorch地址/libtorch/lib \
        -lasmjit \
        -lc10 \
        -lc10_cuda \
        -lcaffe2_nvrtc \
        -lcpuinfo \
        -ldnnl \
        -lfbgemm \
        -lfbjni \
        -lfmt \
        -lkineto \
        -llibprotobuf \
        -llibprotobuf-lite \
        -llibprotoc \
        -lpthreadpool \
        -lpytorch_jni \
        -lsleef \
        -ltorch \
        -ltorch_cpu \
        -ltorch_cuda \
        -lXNNPACK
        
LIBS += -INCLUDE:"?ignore_this_library_placeholder@@YAHXZ"

测试

测试代码:

#include "mainwindow.h"
#include<opencv2/opencv.hpp>
#include <QApplication>
#include<iostream>
#undef slots
#include<torch/script.h>
#include<torch/torch.h>
#define slots Q_SLOTS

class ConvReluBnImpl : public torch::nn::Module {
public:
    ConvReluBnImpl(int input_channel=3, int output_channel=64, int kernel_size = 3);
    torch::Tensor forward(torch::Tensor x);
private:
    // Declare layers
    torch::nn::Conv2d conv{ nullptr };
    torch::nn::BatchNorm2d bn{ nullptr };
};
TORCH_MODULE(ConvReluBn);

ConvReluBnImpl::ConvReluBnImpl(int input_channel, int output_channel, int kernel_size) {
    conv = register_module("conv", torch::nn::Conv2d(torch::nn::Conv2dOptions(input_channel, output_channel, kernel_size).padding(1)));
    bn = register_module("bn", torch::nn::BatchNorm2d(output_channel));

}

torch::Tensor ConvReluBnImpl::forward(torch::Tensor x) {
    x = torch::relu(conv->forward(x));
    x = bn(x);
    return x;
}

int main(int argc, char *argv[])
{
    //test torch
    auto device = torch::Device(torch::kCUDA);
    auto model = ConvReluBn(3,4,3);
    model->to(device);
    auto input = torch::zeros({1,3,12,12},torch::kFloat).to(device);
    auto output = model->forward(input);
    std::cout<<output.sizes()<<std::endl;

    //test opencv
    cv::Mat image = cv::imread("任意一张图片的地址");
    cv::Mat M(200, 200, CV_8UC3, cv::Scalar(0, 0, 255));
    if(!M.data)
        return 0;
    cv::imshow("fff",image);
    cv::imshow("ddd",M);
    cv::waitKey(0);
    cv::destroyAllWindows();
    //test qt
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

执行效果(注意要选择对应的方法执行,debug或release):
会出现两个界面:200x200的红色图片以及自己选择的一张图片。
在这里插入图片描述

参考文档

https://allentdan.github.io/2021/01/21/QT%20Creator%20+%20Opencv4.x%20+%20Libtorch1.7%E9%85%8D%E7%BD%AE/#more
https://www.yuque.com/lengyuezuixue/togedc/krb68k

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1968822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大数据核心概念与技术架构简介

大数据基本概念 大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。 大数据特征&#xff1a; 数据量大&#xff1a;一般以P&#xff08;1000个TB&a…

详解DDR3原理以及使用Xilinx MIG IP核(app 接口)实现DDR3读写测试

系列文章目录 &#xff08;1&#xff09;详解SDRAM基本原理以及FPGA实现读写控制 文章目录 系列文章目录一、DDR简介1.1 什么是 SDRAM、DDR、DDR2、DDR31.2 SDRAM、DDR、DDR2、DDR3核心频率、工作频率以及等效频率的计算1.3 DDR3带宽以及容量的计算 二、MIG IP核的介绍三、MIG…

Datawhale AI夏令营第三期 AI+物质科学学习记录 Task2 RNN建模SMILES进行反应产率预测

引导 如何将化学知识转化为计算机可识别的形式 提到化学应该会想到元素周期表&#xff0c;分子式&#xff0c;化学反应方程等等&#xff0c;化学这门学科的知识和内容都有专有符号记录的&#xff0c;但计算机不能理解&#xff0c;所以需要将这些符号让计算机能理解 Ai4Chemi…

python orm框架有哪些

ORM概念 ORM&#xff08;Object Ralational Mapping&#xff0c;对象关系映射&#xff09;用来把对象模型表示的对象映射到基于SQL的关系模型数据库结构中去。这样&#xff0c;我们在具体的操作实体对象的时候&#xff0c;就不需要再去和复杂的SQL语句打交道&#xff0c;只需简…

5 postgresql 并行查询

并行扫描会占用更多的cpu/IO内存资源&#xff0c;开启的时候要小心配置。 大部分场景都能提高查询效率 之前有过一个生产案例&#xff0c;开启并行之后性能反而没有普通的好&#xff0c;原因就是占有了太多资源&#xff0c;查询慢了&#xff0c;增加表锁概率&#xff0c;产生…

ISO 14001:引领企业绿色革命的环境管理体系

ISO 14001 以其预防为主、系统化管理的特点&#xff0c;在众多管理体系中脱颖而出。该标准强调通过识别和控制环境因素&#xff0c;提前预防潜在环境问题&#xff0c;从根本上减少企业对环境的负面影响。这种预防性管理模式&#xff0c;不仅能够有效保护环境&#xff0c;还能降…

.[datastore@cyberfear.com].mkp勒索病毒数据怎么处理|数据解密恢复

引言 近年来&#xff0c;网络安全威胁日益严峻&#xff0c;其中勒索病毒成为了一种极具破坏性的恶意软件。特别是[conkichinmodlconkichinmodl.com].mkp 、[datastorecyberfear.com].mkp勒索病毒&#xff0c;其通过加密用户文件并索取赎金的方式&#xff0c;给受害者带来了巨大…

15.列表框文本域和文件域

一、列表框 <!-- 下拉框&#xff0c;列表框 --><p>城市&#xff1a;<select name"城市"><option value"Guangzhou">广州</option><option value"Shenzhen" selected>深圳</option><option value&…

Zabbix 7.0 安装

在zabbix官网中有着比较完善的安装步骤&#xff0c;针对不同的系统都有。可以直接按照举例说明进行安装。本文只是针对其提供的安装步骤进行一些说明解释补充。 安装环境 操作系统版本&#xff1a;AlmaLinux 9.4&#xff08;10.10.20.200&#xff09;zabbix版本&#xff1a;7.…

A股震荡前行,3000点指日可待?

今天的A股&#xff0c;让人瞬间呆住了&#xff0c;你知道是为什么吗&#xff1f;盘面上出现2个耐人寻味的重要信号&#xff0c;一起来看看&#xff1a; 1、今天A股小幅洗盘&#xff0c;涨了一天就熄火了&#xff1f;让人瞬间呆住了。不慌&#xff01;敢于回踩&#xff0c;才能更…

两个好消息,你先听哪个?

1.第五大数据、人工智能与软件工程国际研讨会&#xff08;ICBASE 2024)成功申请IEEE出版&#xff0c;上线IEEE官网&#xff0c;欢迎投稿参会&#xff01;&#xff01;&#xff01; &#x1f4e3;IEEE独立出版&#xff0c;设置优秀评选 &#x1f525;院士加盟&#xff0c;中外高…

C嘎嘎浅聊string

那么这篇文章我们开始学习 c嘎嘎的string stl简介 什么是stl STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的 组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架 stl版本 原始版本、P.J.版本、RW版…

机械学习—零基础学习日志(高数18——无穷小与无穷小)

零基础为了学人工智能&#xff0c;真的开始复习高数 学习速度加快&#xff01; 无穷小定义 这里可以记住&#xff0c;无穷小有一个特殊&#xff0c;那就是零。 零是最高阶的无穷小&#xff0c;且零是唯一一个常数无穷小。 张宇老师还是使用了超实数概念来讲解无穷小。其实是…

在云服务器上自动化部署项目,jenkins和gitee

▮全文概述 在编写项目时&#xff0c;很头大的事情就是需要自己手动的上传jar包到服务器上启动。如果出现一点bug&#xff0c;就要重头上传和启动。这是一件很烦的事情&#xff0c;所以&#xff0c;可以使用jenkins和gitee实现项目的自动部署 ▮全流程 在本地提交代码到gitee …

kvm+glusterfs+pcs分布式存储构建kvm高可用群集。

kvmglusterfspcs分布式存储构建kvm高可用群集。 高可用指能在短时间内自动完成故障转移&#xff0c;kvm在实现故障自动转移的方式如果要考虑速度那么基于共享存储的迁移方法无疑是最快的。而共享存储的高可用就可以用glusterfs来实现。 glusterfs可以利用分布式复制卷兼顾了性能…

图解RocketMQ之消费者如何进行消息重试

大家好&#xff0c;我是苍何。 在上一篇[[图解RocketMQ之生产者如何进行消息重试]]中分析了当生产者发送消息失败的时候&#xff0c;RocketMQ 是如何进行重试的。 最后留了一个问题&#xff0c;生产端的消息是重试 hold 住了&#xff0c;但如果消费者出现异常&#xff0c;消费…

leetcode53. 最大子数组和(java实现)

今天分享的题目是leetcode53题 本题的解题思路&#xff1a;贪心算法。 举个例子&#xff1a; nums [-2,1,-3,4,-1,2,1,-5,4]&#xff0c;如果说我们的累加和是负数那么就将其舍弃&#xff0c;换下一个位置从新进行累加&#xff0c;因为如果目前我们的累加和如果是负数那么还不…

Zotero的探索之路

下载安装 Zotero | Downloads&#xff1a;点击链接&#xff0c;不仅要下载软件本身&#xff0c;也要下载浏览器connector&#xff0c;这样就方便从网页抓取论文到zotero本地了&#xff0c;浏览器是使用插件导入下载包即可 导入文献方法 zotero自动下载&#xff08;推荐&#…

C 语言快速排序算法

升序排序 /*快速排序算法排序规则 */ int32_t CmpCb(const void* _a, const void* _b) {uint16_t* a (uint16_t*)_a;uint16_t* b (uint16_t*)_b;int32_t val 0;if (*a > *b){val 1;}else if (*a < *b){val -1;}else {val 0;}return val; }int main() {// 创建局部…

c++----类与对象(下)

当我们简单的学习了上一篇日期类。简单的理解并且使用了我们前面学习的知识。当然这还只是我们c的九牛一毛。并且我们的类与对象的知识还没学习完。今天我们来把类与对象的知识完善一下。 初始化列表 那么今天我们就不讲废话了&#xff0c;我们直接来主题。首先我们可以看到我…