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的详细过程 的相关文章

  • 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
  • 你可以拥有你的 API 并在 Laravel 中使用它吗?

    我制作了一个在 Laravel 中返 回 json 的 API 路线 api php 现在我想在我的内部使用所述APIweb项目的一侧 路线 web php 包括中间件 刀片视图 etc 我当前的解决方案是这样的 public functi
  • 使用 Swagger 的 Spring REST API 文档 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个可以帮助我生成 RESTful API 文档的工具 我的服务器是用Java编写的并使用S
  • RESTful API:我应该在哪里编码我的工作流程?

    我正在开发一个 RESTful API 这是我的第一个 API 也是我的第一个真正大型的编码项目 因此 我仍在学习很多关于建筑等方面的知识 目前 我的 api 设置分为以下几层 HTTP层 资源层 领域模型 业务逻辑层 数据访问 存储层 持
  • REST API 路由最佳实践

    我想知道当订单是一种资源时 为以下场景创建 REST API 的最佳实践是什么 获取数据库中的所有订单 当然不是实际场景 仅供理解 通过订单ID获取订单 根据订单ID获取单个订单 单个 GET 路由是否可以用于所有这些场景 或者我们应该针对
  • 使用 JavaScript 时如何保护 API Key?

    因此 我正在开发一个仅供我自己使用的小型应用程序 也可能是 Git 上的一个开源项目 我正在使用来自 Envato Marketplaces 的 API 众所周知 有些操作不需要任何密钥 但同时也有一些操作需要 我首先用 PHP 为 Env
  • HTTPS 请求仅在 iOS、Ionic 2 上失败

    我有一个Ionic 2调用一个应用程序Spring Boot用于向其他设备发送推送通知的 API API 配置为 HTTPS The API POST请求适用于一切except iOS 我在服务器上的 SSL 证书是自签名的 也许就是这样
  • 限制传出 PHP+curl 请求的速率

    有没有办法限制 有延迟 向外部服务器发出 PHP curl 请求的速率 以便每秒只有 n 个请求 PHP 在 Fastcgi 模式下使用 因此无法使用睡眠 是的 有curl 多重处理程序 您可以使用 OOP 方式以 OOP 方式完成此操作这
  • Google BigQuery 与 PHP 集成

    我需要帮助将 google bigquery 代码集成到 PHP 中 所以我可以从 php 代码本身执行查询和其他类型的操作 需要您的帮助并建议我一些工作示例链接 提前致谢 这是一段代码 正确地创建一个Google Client using
  • RabbitMQ HTTP API 请求 401 未经授权

    我正在尝试访问 RabbitMQ Rest 但收到 401 未经授权的错误 我想访问队列信息并获取消息编号 我发现这是一个解决方案 DefaultHttpClient httpClient new DefaultHttpClient Htt
  • MongoRuntimeError:连接池已关闭

    我看到我的猫鼬池在插入数据之前似乎已关闭 因为在调用云集群中的猫鼬数据库时出现此错误 MongoRuntimeError Connection pool closed 但我正在等待所有的电话 所以我不确定为什么会看到这个问题 也许这与我定义
  • 我们如何在 python 中使用 ms office communicator 客户端公开的 API,这可能吗?

    我想使用 ms office communicator 客户端 api 并且我想在 python 中使用这些 API 可以吗 gt gt gt import win32com client gt gt gt msg win32com cli
  • 在 Hyperledger Composer REST API 上使用 Passport-http

    我想知道是否可以使用passport http来保护由composer rest server生成的Hyperledger Composer的REST API 以及什么是导出 COMPOSER PROVIDERS 配置 这个想法是使用先前生
  • Magento SOAP V2 API - 附加属性设置为空

    几个小时以来 我一直在尝试通过 SOAP V2 API 创建具有附加属性的产品 每当我打电话时就会添加该产品目录产品创建但我随请求发送的附加属性被设置为空 每当我不添加附加属性时 这两个属性都会设置为其默认值 因此我认为这些属性正在发送和接
  • 如何使用 Azure DevOps 的 python 客户端 API 将用户添加到 Azure DevOps?

    我正在编写一个 python 脚本来将用户 来自 AAD 支持的提供商的现有用户 添加到 Azure DevOps 我正在使用 Azure DevOps 的 python 客户端库来实现此目的 身份验证后 我可以从 azure devops
  • 如何以编程方式将图片上传到 Facebook?

    好的 这是我的第一个问题 如何允许我网站上的访问者在他们的 Facebook 新闻源上分享我的照片 https webapps stackexchange com questions 10140 how do i allow visitor
  • 如何将未知字段类型的数据解组为 JSON

    我有这些 结构 type Results struct Gender string json gender Name struct First string json first Last string json last json nam
  • IB Java API:提取多个合约的股票数据(实时柱)

    我正在对算法交易和 IB API 进行一些自学和实验 我决定使用 Java 但我愿意切换到 C 我浏览了一个在线教程 该教程将引导您完成下面所示的代码 但我想知道是否可以将其扩展到一只股票之外 我想浏览所有 SP500 股票并检查股票数据
  • 字典 API(词汇)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人知道一个好的 NET 字典 API 吗 我对含义不感兴趣 而是我需要能够以多种不同的方式查询单词 返

随机推荐

  • 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