Ubuntu24.04配置STMTrack

news2024/12/13 1:33:16

项目地址:https://github.com/fzh0917/STMTrack

一、安装 CUDA

参考链接:
Ubuntu24.04配置DINO-Tracker
Ubuntu多CUDA版本安装及切换
由于之前在其他项目中已经安装了 CUDA12.1,这次需要安装另一个版本。

1. 查看安装版本

按照 requirement.txt 中的要求,CUDA的版本为10.0,torch版本高于1.4。在 pytorch 官网上查看对应版本:
在这里插入图片描述
这里可以看到 pytorch1.4 对应 torchvision0.5,对应 CUDA10.1。

2. 安装CUDA

1) 下载安装包

下载地址: https://developer.nvidia.com/cuda-toolkit
历史版本下载地址: https://developer.nvidia.com/cuda-toolkit-archive
在这里插入图片描述
在这里插入图片描述
依次执行两条指令。
安装过程中如果提示 gcc 版本不匹配导致安装失败,需要在指令后添加--override
安装过程中注意不安装驱动,提示“A symlink already exists at /usr/local/cuda. Update to this installation?”选择 No。

2) 创建软链接

参考链接:
anzhuang
Ubuntu多CUDA版本安装及切换
由于我电脑中已经存在了一个 12.1 版本,CUDA 软链接是指向 12.1 的。上面那个选项选了 yes 会改变 CUDA 的软链接。

  1. 查看当前使用的 CUDA版本
    /usr/local路径下通过stat cuda命令查看当前使用的 CUDA 版本:
  2. 删除原本的 CUDA 软链接
sudo rm -rf /usr/local/cuda
  1. 建立新的指向 CUDA-10.1 的软链接
sudo ln -s /usr/local/cuda-10.1 /usr/local/cuda
  1. 重新查看当前 CUDA 版本
    在这里插入图片描述

  2. 检查是否添加到环境变量

sudo gedit ~/.bashrc

在最后确认有没有下面这几行内容

export PATH=/usr/local/cuda/bin:$PATH  
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda

如果没有,将其添加到~/.bashrc的最后,然后运行命令

source ~/.bashrc

使配置的环境变量生效。

3. 安装 cudnn

1) 下载对应版本cudnn

官网
在这里插入图片描述

2) cd到cudnn所在的文件夹下进行解压等操作:

tar -zxvf cudnn-10.0-linux-x64-v7.4.2.24.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda-10.0/include/ 
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-10.0/lib64/ 
sudo chmod a+r /usr/local/cuda-10.0/include/cudnn.h /usr/local/cuda-10.0/lib64/libcudnn*
     
cd /usr/local/cuda-10.0/lib64/
sudo ln -sf libcudnn.so.7.4.2 libcudnn.so.7

4. 新建环境

conda create -n STMTrack python=3.7 -y
conda activate STMTrack

二、安装 torch

参考链接:

  1. Ubuntu18.04+Cuda10.1+Python3.6 下安装 PyTorch1.4.0+torchvision0.5.0,成功安装torch1.4.0和torchvision并解决安装速度过慢
  2. ubuntu linux安装pytorch和torchvision

1. 添加镜像源安装(失败)

在这里插入图片描述

2. 使用 whl 文件安装(成功)

1) 下载镜像

镜像网址:https://download.pytorch.org/whl/torch_stable.html
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2) 安装

在whl文件目录打开终端,输入:

pip install torch-1.4.0+cu100-cp36-cp36m-linux_x86_64.whl
 
pip install torchvision-0.5.0+cu100-cp36-cp36m-linux_x86_64.whl

在这里插入图片描述

3) 检查是否安装成功

python

import torch
print(torch.version.cuda)
print(torch.backends.cudnn.version())

三、安装其他库

在项目地址打开终端,运行:

pip install -r requirements.txt

四、实验设置

参考链接:

  1. 把STMTrack跑起来
  2. CVPR2021跟踪算法STMTrack的配置

1. 预训练模型下载

在got上训练的https://drive.google.com/file/d/1AT6SAieig8oNQ-MJ6dUhCfgYCyJEdxfj/view
在全部数据集上训练的https://drive.google.com/file/d/1w7nhGZR53FQnh3fVbIcbj08hxa2Zjvub/view
将下载的预训练模型放入工程目录下新建的pretrain_model路径中

2. 其他设置

  1. STMTrack-main/experiments/stmtrack/test/目录下对 otb,uav,got 等数据集进行配置,以 uav 为例,打开STMTrack/experiments/stmtrack/test/UAV123/stmtrack-googlenet-uav123.yaml
    1). 更改预训练模型所在路径
    pretrain_model_path: "/root/STMTrack/epoch-19_fulldata.pkl" ,注意冒号与双引号之间有一个空格,提醒一下,要看一下原来文件中的与训练文件写的是 fulldata.pk1 还是 gotdata.pk1,改成对应文件的路径
    2). 更改 device_num
    好像是可用于计算任务的 GPU 数量,这里原代码中为10,我改为了1,可以通过以下方式在终端查询:
python
import torch
print(torch.cuda.device_count())

在这里插入图片描述
3). 添加数据集所在路径
在yaml 文件的最后一行添加数据集的路径 data_root: “数据集的绝对路径”
在这里插入图片描述
4). 下载 uav123.json 和 lasot.json
链接:git clone https://github.com/megvii-research/video_analyst/tree/master/videoanalyst/evaluation/got_benchmark/datasets 。
下载好后放入/videoanalyst/evaluation/got_benchmark/datasets

3.测试代码

在终端输入:

python main/test.py --config testing_dataset_config_file_path

或直接在test.py中添加默认 config 路径。

五、问题

RuntimeError: CUDA error: no kernel image is available for execution on the device

经过查阅,大部分帖子都说是 CUDA 版本和 torch 版本不匹配造成的,但我这个应该是匹配的:

python
import torch
print(torch.__version__)
# 显示torch和cuda版本
print(torch.cuda.is_available())
# 显示True

在这里插入图片描述
也有人说是由于算力和 CUDA 不匹配造成的,但是在浏览的过程中发现大家提到的由于算力不匹配导致的 CUDA erroe 似乎会详细提示算力不匹配,但我这里也没有提示,而且输入:

torch.ones((1, 1, 1, 1, 1)).cuda()

输出:

tensor([[[[[1.]]]]], device='cuda:0')

这算是能够调用成功?所以我也不太确定是不是算力问题导致的。按照这位大佬的方法,在 .bashrc 文件中改了算力也没用。

我的显卡为 RTX4090,在浏览的过程中发现有人说 4090 对应的最低 CUDA 版本为 11.8,有人说是 11.7, 在官方文档中查看 CUDA 与 算力的对应关系,没看懂,似乎是与 cudnn 有关?但是这个问题我始终不知道怎么改,抱着试试的心态重新配置了一个环境 CUDA11.7+torch1.13.0+torchvision0.14.0,配置完成后直接运行 test.py,成功。
在这里插入图片描述

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

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

相关文章

Android显示系统(08)- OpenGL ES - 图片拉伸

Android显示系统(02)- OpenGL ES - 概述 Android显示系统(03)- OpenGL ES - GLSurfaceView的使用 Android显示系统(04)- OpenGL ES - Shader绘制三角形 Android显示系统(05)- OpenGL…

【实现多网卡电脑的网络连接共享】

电脑A配备有两张网卡,分别命名为eth0和eth1(对于拥有超过两张网卡的情况,解决方案相似)。其中,eth0网卡能够连接到Internet,而eth1网卡则通过网线直接与另一台电脑B相连(在实际应用中&#xff0…

聊聊在应用层面实现内网穿透功能是否可行

前言 最近接手了供方开发的网关项目,交接文档里面有个内网穿透的功能,一下子就吸引的我的目光。实现这个内网穿透的背景是业务部门有些业务是部署在公网,这些公网的业务想访问内网的业务,但因为公网和内网没打通,导致…

头歌 计算机操作系统 Linux之线程同步二

第1关:信号量 任务描述 在上一个实训中,我们学习了使用互斥锁来实现线程的同步,Linux系统中还提供了另一个类似互斥锁的线程不同操作,那就是信号量。 本关任务:学会使用信号量来实现线程间的同步与互斥。 相关知识 …

基于MinIO打造高可靠分布式“本地”文件系统

MinIO是一款高性能的对象存储服务,而S3协议是由亚马逊Web服务(AWS)制定的一种标准协议,用于云存储服务之间的数据交换。MinIO与S3协议的关系在于,MinIO实现了S3协议的接口,这意味着用户可以使用与AWS S3相同…

【MIT-OS6.S081作业1.3】Lab1-utilities primes

本文记录MIT-OS6.S081 Lab1 utilities 的primes函数的实现过程 文章目录 1. 作业要求primes (moderate)/(hard) 2. 实现过程2.1 代码实现 1. 作业要求 primes (moderate)/(hard) Write a concurrent version of prime sieve using pipes. This idea is due to Doug McIlroy, in…

Js如和返回数组中的指定列

一、需求 日常工作中需要返回数组中的指定列,例如Echarts 和 下拉框 选择 id,value 类似这种都需要在数组中提取指定列元素。 二、代码示例 const products [{ name: "商品1", price: 100, inventory: 50 },{ name: "商品2", pri…

C++的一些经典算法

以下是C的一些经典算法: 一、排序算法 冒泡排序(Bubble Sort) 原理: 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换…

35.1 thanos项目介绍和二进制部署

本节重点介绍 : 核心优点 无需维护存储,存储高可用: 利用廉价的公有云对象存储,高可用长时间存储,数据降采样:利用Compactor降采样完全适配原生prometheus查询接口:Query实现多级数据缓存配置 二进制部署 …

【PlantUML系列】状态图(六)

一、状态图的组成部分 状态:对象在其生命周期内可能处于的条件或情形,使用 state "State Name" as Statename 表示。初始状态:表示对象生命周期的开始,使用 [*] 表示。最终状态:表示对象生命周期的结束&…

Android 15(V)新功能适配,雕琢移动细节之美

Android 15,内部代号为Vanilla Ice Cream,是Android移动操作系统的最新主要版本,于2024年2月16日在开发者预览版1中发布。Android 15源代码于 2024年9月4日发布。Android 15稳定版于2024年10月15日发布。 以下是针对 Android 15(…

【零成本抽象】基本概念与在C++中的实现

零成本抽象概念是由 Bjarne Stroustrup 提出的,他在 1994 年的著作中就有相关设想,2016 年其在 C++ 大会登台演讲时,明确阐述了 C++ 中的 “零成本抽象” 这一理念。 一、零成本抽象概念 Bjarne Stroustrup提出的零成本抽象概念,是指在编程中使用高级抽象机制时,不会产生…

android编译assets集成某文件太大更新导致git仓库变大

不知道大家有没有类似的困扰,你的工程assets文件过大,我曾经在某度车机地图团队工作过一段时间时候,每次发包会集成一个上百MB的文件。工作一段时间你的git仓库将会增加特别多。最后,你会发现你如果重新git clone这个仓库会非常大…

F5-TTS文本语音合成模型的使用和接口封装

F5-TTS文本语音生成模型 1. F5-TTS的简介 2024年10月8日,上海交通大学团队发布,F5-TTS (A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching) 是一款基于扩散Transformer和ConvNeXt V2的文本转语音 (TTS) 模型。F5-TTS旨在生成流…

克隆选择算法复现

克隆选择算法复现 基于克隆选择算法求解0 - 1背包问题的代码复现文档一、背景和意义(一)背景(二)意义 二、算法原理(一)克隆选择算法基础(二)受体编辑机制 三、算法流程(…

Scala的隐式对象

Scala中,隐式对象(implicit object)是一种特殊的对象,它可以使得其成员(如方法和值)在特定的上下文中自动可用,而无需显式地传递它们。隐式对象通常与隐式参数和隐式转换一起使用,以…

观察者模式的理解和实践

引言 在软件开发中,设计模式是开发者们为了解决常见的设计问题而总结出来的一系列最佳实践。观察者模式(Observer Pattern)是其中一种非常经典且使用率极高的设计模式。它主要用于定义对象之间的一对多关系,使得当一个对象的状态发…

windows下Qt5自动编译配置QtMqtt环境(11)

文章目录 [toc]1、概述2、准备1.1 下载源码1.2 配置环境1.3 解释原理 3、编译4、验证5、参考6、视频 更多精彩内容👉内容导航 👈👉Qt网络编程 👈 1、概述 Qt默认是不包含mqtt库的,如果需要使用到mqtt库就只能自己编译配…

【6】数据分析检测(DataFrame 1)

学习目标3 昨天,我们学习了Series。 而Pandas的另一种数据类型:DataFrame,在许多特性上和Series有相似之处。 今天,我们将学习DataFrame的相关知识: 1. DataFrame的概念 2. 构造一个DataFrame 3. DataFrame的常用…

如何选择安全、可验证的技术?

澳大利亚信号局的澳大利亚网络安全中心 (ASD 的 ACSC) 发布了一份指导文件,题为《选择安全和可验证的技术》,旨在帮助组织在采购软件(专有或开源)、硬件(例如物联网设备)和云服务(SaaS、MSP 服务…