Ubuntu18下编译安装torchvision—C++API的详细过程

2023-05-16

最近使用libtorch做网络模型的部署,在编写后处理代码时用到了官方自带的nms.h文件,但该文件需要安装torchvision,而torchvision并不包含在官方的LibTorch包中,需要自行下载源码并进行编译安装,安装过程中遇到了一些问题,在此一并记录下来。

目录

一、下载源码包

二、编译过程及遇到的BUG

三、使用


一、下载源码包

首先就是在github上下载torchvision源码包,在这里要注意一点的是,所安装的torchvision必须要与你的LibTorch版本对应,在GitHub主页的tags中下载相应版本的torchvision,这个对应关系在官方GitHub上有说明,如下:

因为我的LibTorch是1.5.0-CPU版本的,所以我就要下载0.6.0版本的torchvision,后面的安装都以这个为例,其他版本的安装也一样。

二、编译过程及遇到的BUG

下载好后,将压缩包解压到自己看着舒服的位置,重命名为vision(这步只是为了后面操作方便,可以随你怎么自定义hhh),并在vision同级目录下新建torchvision文件夹,用来存放最终的安装文件。然后在解压的文件夹vision内新建一个build文件夹并进入。

mkdir build
cd build

进入build文件夹后打开终端,开始进行编译(这里注意下不要按照GitHub官方的教程来编译,那个教程的有些命令参数暂时不是很全,会报错的!)首先我们输入如下命令(注意把相关的路径修改为自己的路径):

cmake -DCMAKE_PREFIX_PATH=/home/wsx/LibTorch/libtorch150cpu/libtorch -DCMAKE_INSTALL_PREFIX=/home/wsx/LibTorch/libtorch150cpu/torchvision060/torchvision -DCMAKE_BUILD_TYPE=Release ..

相比官方教程,这里主要多了个 -DCMAKE_PREFIX_PATH=/home/wsx/LibTorch/libtorch150cpu/libtorch 以及 -DCMAKE_INSTALL_PREFIX=/home/wsx/LibTorch/libtorch150cpu/torchvision060/torchvision 。第一个红色的命令很重要!是必须要有的!这个是你的LibTorch存放的路径,因为torchvision编译时会依赖LibTorch里面的相关文件!第二个参数是说明最终的安装文件安装在哪里,这里就是上面新建的torchvision文件夹,当然具体放哪自己看着舒服就行,不一定非按我的来,还有就是注意路径别写错了!注意区分大小写字母!哎,这里说多了都是泪T-T~

说明:因为我要安装的是CPU版本的,想要装GPU版本的话还要在命令行紧跟在Release后面中加入 -DWITH_CUDA=ON 参数

好了,现在执行上面这个命令,emmmmm,看看是不是会报错hhh(没报错就略过这部分哈)

————————————————BUG—修改—————————————

忘记截图了,但是保存了部分内容如下:

CMake Warning at CMakeLists.txt:13 (find_package):   By not providing 
"FindPython3.cmake" in CMAKE_MODULE_PATH this project has   asked CMake to find a 
package configuration file provided by "Python3", but   CMake did not find one.

这个问题主要是因为cmake版本太低了!Ubuntu18.04上的原装CMake版本为3.10,可以通过命令 cmake -version查看,而3.10版本的cmake没有FindPython3.cmake文件,因此我们可以把cmake升级到3.13.2版本(我是安装的这个版本,其他的可能也可以自行尝试吧hhh),然后重新编译就行了。

对于该bug的有关讨论参考GitHub链接:

https://github.com/pytorch/vision/issues/2045

Minimum CMake version required to build. · Issue #2085 · pytorch/vision · GitHub

cmake下载链接:

官网或GitHub。

下载CMake-3.13.2.tar.gz

安装过程也很简单——不用卸载原有的cmake,会自动覆盖的,解压后依次输入以下命令就好了:

./configure
make
make install

然后输入cmake --version 指令来查看新的cmake版本。

——————————————BUG—END———————————

在第一步cmake执行完成后,接下来依次执行以下指令:

make
make install

不出问题的话,到这里就安装完成了。然后就是在代码中使用torchvision了。

三、使用

因为我使用cmake编译的代码,所以我要在原有的CmakeLists文件上做下微改,加入torchvision库,修改的部分如下:

set(CMAKE_PREFIX_PATH "/usr/local/lib;/home/wsx/LibTorch/libtorch150cpu/libtorch;/home/wsx/LibTorch/libtorch150cpu/torchvision060/torchvision")

find_package(TorchVision REQUIRED)

target_link_libraries(test1 PUBLIC ${TORCH_LIBRARIES} ${OpenCV_LIBS} TorchVision::TorchVision)

以上红色部分是我修改的部分,注意有关的路径别写错了!然后就可以在源代码中开心的加入 #include "torchvision/csrc/nms.h" 并使用啦~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ubuntu18下编译安装torchvision—C++API的详细过程 的相关文章

  • 是否有 .NET 库或 API 可以与 IIS 配置数据库交互/编辑它?

    或者我是否坚持使用自己的 XML 切割 功能 我想创建一个小型任务托盘应用程序 以便我可以快速将虚拟目录重新指向硬盘上的几个文件夹之一 一点背景 我的开发机器上的代码库有 3 个不同的 svn 分支 Current Production B
  • 如何使用 C# API 移动 TFS 文件?

    我一直在谷歌上搜索如何使用 TFS API 通过 C 移动文件 我们的想法是有一个文件夹 开发人员可以在其中放置数据库升级脚本 构建过程会在该文件夹中创建一个构建脚本 并将该文件夹上的所有文件移动到具有我们刚刚创建的数据库构建版本的新文件夹
  • 歌曲搜索和流预览 API [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有 API 可以让我搜索歌曲 然后在我的网站上流式传输该歌曲的预览 查看了 Amazon MP3 但
  • 为 REST API 编写单元测试的最佳方法是什么?

    在为 API 包装器编写单元测试时 我应该对 REST API 端点进行真正的调用 还是应该使用 mocl 响应来模拟成功和错误的调用 单元测试意味着只测试你的unit API 包装器 仅此而已 因此 不幸的是 您应该模拟整个 API 另一
  • PowerShell-V5 Invoke-Webrequest 添加 2 个标头授权标头和接受接受标头

    我正在尝试创建一个脚本 该脚本将使用 powershell 和 invoke webrequest 自动升级 NSX 以利用 NSX Manager 的 API 调用 我已经完成了脚本 但脚本的某些部分我需要检查并匹配响应中的某些数据 事实
  • Paypal Rest API - 来自批准 URL 的令牌生命周期

    我使用 Paypal Rest API 我的问题是 有多长token来自批准 URL 有效吗 我想将此令牌 也包含我的令牌 存储到数据库并生成带有我的令牌的链接 稍后 如果我单击此链接 将我的令牌替换为 paypal 令牌 我想重定向到 p
  • 具有 .net core 后端和 .net 身份的 React SPA 应用程序

    我基本上有与这里详细说明的相同的问题 使用 asp Core 2 0 和 React 进行登录重定向 https stackoverflow com questions 48337368 但那个帖子从未得到答复 我已经搜索了很多 几乎我的问
  • cURL 命令在 git bash 中有效,但在 cmd 和 powershell 中无效

    以下命令在 git bash 中有效 但在 cmd 和 powershell 中无效 curl X POST http localhost 5678 api findgen H Content Type application json d
  • Magento2:REST API:保存每个商店视图的产品详细信息不起作用

    使用Magento2 1 0 rc1分支 有样本数据 使用 REST API 目录ProductRepositoryV1 REF http devdocs magento com swagger index html http devdoc
  • Rails API 设计无需禁用 CSRF 保护

    早在 2011 年 2 月 Rails 就改为需要 CSRF 令牌all non GET http weblog rubyonrails org 2011 2 8 csrf protection bypass in ruby on rail
  • 如何使用 PATCH 更新简单的数据库字段?

    我是 php 和 API 的新手 我正在尝试学习这些方法 但我无法执行 PATCH 或 PUT 来更新我的简单 mysql 数据库 我使用了以下代码 if isset PATCH con mysqli connect localhost r
  • 为我的网站构建 API 哪个更好:MVC 或 Ado.net 数据服务?

    我有一个用MVC构建的网站 现在我想为这个网站构建一个API 让用户使用这个API来实现不同的网站 Web服务 插件和浏览器扩展 我经历过这个article http weblogs asp net cibrax archive 2010
  • C++ API 设计和错误处理

    我需要使用 lib 文件 MSVC 编写 C API 它由 Dll 公开的几个导出的 C 类组成 从我的另一个问题的答案中我了解到 如果 C API 是在一个 VC 版本 假设是 2010 中构建的 并且客户端代码是在另一个 VC 版本中编
  • axios响应不显示数据

    我正在学习使用 Axios 但输出如图所示 当我使用 fetch 时 输出正常 我该如何修复 Axios const axios require axios default const url https jsonplaceholder t
  • Google BigQuery 与 PHP 集成

    我需要帮助将 google bigquery 代码集成到 PHP 中 所以我可以从 php 代码本身执行查询和其他类型的操作 需要您的帮助并建议我一些工作示例链接 提前致谢 这是一段代码 正确地创建一个Google Client using
  • 如何使用 Visual C++ 在 win32 API 中创建圆形/圆形按钮

    我有一个 Visual C 中的 Window Win32 API 应用程序 我没有使用MFC 我必须创建一个带有位图图像的圆形 圆形按钮 我的应用程序有一个皮肤视图 任何人都可以帮助我完成这项任务吗 按钮是窗口 您可以使用 CreateW
  • 从纬度经度查找时区[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何库 或者更好的网络服务 可以将纬度 经度转换为时区 对于我正在从事的一个项目 我相当深入地研究
  • RabbitMQ HTTP API 请求 401 未经授权

    我正在尝试访问 RabbitMQ Rest 但收到 401 未经授权的错误 我想访问队列信息并获取消息编号 我发现这是一个解决方案 DefaultHttpClient httpClient new DefaultHttpClient Htt
  • 用于高级搜索/过滤的.Net Web API URL 约定

    我对 Microsoft 的 REST 和 WebAPI 比较陌生 我们正在实现一个中心 REST 服务 它将容纳多种类型的对象获取和设置 作为该项目的领导者 我的任务是提出我们正在使用的正确的 Uri 设计 我想知道关于战争什么想法更好
  • 如何通过groovy动态更新ReadyAPI/SoapUI中的Resource值?

    我的资源采用这种格式 testing 101 getCustomer 99 这里我需要通过 groovy 动态更改 101 和 99 部分 以便我可以在同一测试用例中运行多个值 我研究了 ReadyAPI 的内置功能 但没有那么有帮助 我也

随机推荐

  • Axiso解决跨域访问

    首先请检查下你的 Vue 版本 xff0c Vue2 和 Vue3 跨域方式不同 xff1a vue V 2 X or 3 X 一 Vue2 版本 这里以访问 Ve2x 的一个公告API为例 xff0c 直接访问如下 xff1a span
  • SpringBoot集成Spring Security(1)——入门程序

    本篇文章环境 xff1a SpringBoot 2 0 43 Mybatis 43 Spring Security 5 0 注意 xff1a SpringSecurity 5 0 43 版本变动较多 xff0c 且不兼容之前版本 xff0c
  • Windows下MongoDB 3.x 的安装及配置

    一 登录Mongodb官网 https www mongodb com try download community 下载安装包 二 安装MongoDB 安装比较简单 xff0c 类似于QQ xff0c 微信等软件 xff0c 中间主要是选
  • 如何获取 OSS AccessKeyId、AccessKeySecret

    开通阿里云oss xff1a https www aliyun com 1 点击概览 AccessKey oss控制台官网链接 xff1a https oss console aliyun com overview 2 出现下图 xff0c
  • vscode怎么使用git

    1 clone代码库 在vscode中输入快捷键 Ctrl 43 Shift 43 P 打开vscode的命令框 xff0c 在框中输入 git clone 并回车 xff0c 然后在文本框中输入git代码库的地址 2 修改clone下来的
  • Json与Java对象相互转化

    出现问题的原因 xff1a 在做项目中 xff0c 我们使用Hutool工具的Http请求调用远程服务器的接口 xff0c 返回Json字符串 xff0c 现在要把Json字符串转化为对象进行存储 xff0c 传给前端vue 访问远程返回的
  • 微信小程序基础

    文章目录 一 微信小程序介绍1 为什么是微信 程序2 官 微信 程序体验 二 微信小程序准备工作1 注册账号2 登录小程序3 获取APPID4 开发工具 三 第 个微信 程序1 打开微信开发者 具2 新建 程序项 3 填写项 信息4 成功5
  • 微信小程序之动态添加、删除指定view和获取input值

    遇到的问题 xff1a 动态的添加指定的view内容 嗯 很简单 wx for就搞定 xff01 xff01 动态添加的内容中有input xff0c 最终获取值的时候 xff0c 要获取到所有input的值并且是一个数组 动态删除指定的已
  • LibTorch:tensor.index_select()

    LibTorch中的tensor index select 方法与PyTorch中的用法类似 xff0c 作用都是在指定的tensor维度dim上按照index值索引向量 先看一下在LibTorch中的声明 xff1a inline Ten
  • 【微信小程序常见问题】bindtap事件传参 | wx.navigateTo()传参

    目的 xff1a 微信小程序中某个控件的点击事件bindtap触发时如何传参 举例实现 xff1a 1 wxml文件 这里的参数名是 item xff0c 参数值是 doubleperson lt view class 61 34 radi
  • 【微信小程序组件】自定义单选(多选)切换颜色按钮组件

    问题所在 xff1a 在小程序开发中 xff0c 官网提供的表单组件不足以满足我们的需求 xff0c 所以我们需要自定义组件 这里我们以按钮为例 需求 xff1a 1 默认按钮都不选中 xff0c 当点击一个按钮选中且按钮变色 xff0c
  • useGeneratedKeys=“true“作用

    使用 mysql 自增长序列 xff0c 新插入一条数据时 xff0c 怎么得到主键 xff1f 加入以下属性即可 xff1a useGeneratedKeys 61 true keyProperty 61 id id xff1a 根据自己
  • 【毕业设计】便宜购商城管理系统(Springboot+Jsp+支付宝+Echarts)

    便宜购商城项目是一套电商系统 xff0c 包括商城前台系统及商城后台系统 xff0c 基于 Spring Boot 2 X 及相关技术栈开发 前台商城系统包含首页登录 商品分类 首页轮播 商品搜索 商品展示 购物车 订单结算 订单流程 个人
  • IDEA中使用Debug调试详解

    在现在的开发中 xff0c 我们经常采用Debug来追踪代码的运行流程 xff0c 通常在程序运行过程中出现异常 xff0c 启用Debug模式可以分析定位异常发生的位置 xff0c 以及在运行过程中参数的变化 通常我们也可以启用Debug
  • nrm报错 [ERR_INVALID_ARG_TYPE]

    nrm 1 2 1报错 xff1a TypeError ERR INVALID ARG TYPE The 34 path 34 argument must be of type string Received undefined at va
  • SVN下载、拉取远程库、上传代码及注意问题

    1 下载SVN客户端 首先进入在SVN官网 xff0c 下载SVN客户端 xff1b 官网地址 xff1a https tortoisesvn net downloads html 选择 Downloads xff0c 选择自己电脑对应的版
  • vscode / idea 使用SVN及查看历史记录

    一 vscode使用 SVN 1 在vscode插件中心搜索svn 进行安装 xff08 我这里已经安装完毕了 xff09 注意 xff1a 插件安装成功 xff0c 需要重新启动软件 安装成功后会出现如下的图标 xff1a 2 桌面右键使
  • int和Integer有什么区别

    面试中会问道int和Integer的区别 xff0c 这里我们详细说一下 Integer是int的包装类 xff1b int是基本数据类型 Integer变量必须实例化后才能使用 xff1b int变量不需要 Integer实际是对象的引用
  • Java 垃圾回收机制与几种垃圾回收算法

    一 如何确定某个对象是 垃圾 xff1f 这一小节先了解一个最基本的问题 xff1a 如果确定某个对象是 垃圾 xff1f 既然垃圾收集器的任务是回收垃圾对象所占的空间供新的对象使用 xff0c 那么垃圾收集器如何确定某个对象是 垃圾 xf
  • Ubuntu18下编译安装torchvision—C++API的详细过程

    最近使用libtorch做网络模型的部署 xff0c 在编写后处理代码时用到了官方自带的nms h文件 xff0c 但该文件需要安装torchvision xff0c 而torchvision并不包含在官方的LibTorch包中 xff0c