项目地址: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 的软链接。
- 查看当前使用的 CUDA版本
在/usr/local
路径下通过stat cuda
命令查看当前使用的 CUDA 版本: - 删除原本的 CUDA 软链接
sudo rm -rf /usr/local/cuda
- 建立新的指向 CUDA-10.1 的软链接
sudo ln -s /usr/local/cuda-10.1 /usr/local/cuda
-
重新查看当前 CUDA 版本
-
检查是否添加到环境变量
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
参考链接:
- Ubuntu18.04+Cuda10.1+Python3.6 下安装 PyTorch1.4.0+torchvision0.5.0,成功安装torch1.4.0和torchvision并解决安装速度过慢
- 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
四、实验设置
参考链接:
- 把STMTrack跑起来
- CVPR2021跟踪算法STMTrack的配置
1. 预训练模型下载
在got上训练的https://drive.google.com/file/d/1AT6SAieig8oNQ-MJ6dUhCfgYCyJEdxfj/view
在全部数据集上训练的https://drive.google.com/file/d/1w7nhGZR53FQnh3fVbIcbj08hxa2Zjvub/view
将下载的预训练模型放入工程目录下新建的pretrain_model
路径中
2. 其他设置
- 在
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,成功。