ubuntu24.04、win11配置pysot

一、引言

  1. 配置:
    ubuntu24.04+CUDA11.7+torch1.13.0+torchvision0.14.0(失败)
    win11+CUDA11.6(成功)
  2. 参考链接:
    1). 商汤PySot的配置使用(1)
    2). 商汤PySot的配置使用(2)
    3). 使用Pysot框架遇到的问题
  3. 项目地址:https://github.com/STVIR/pysot

二、配置环境

这里我没有重新配置环境,而是使用的之前配置的一个环境,详细过程在这里,只需要重新安装一个 tensorboardX 库:

bash 复制代码
pip install tensorboardX

三、demo

1. 添加路径

用 pycharm 打开项目并在终端中输入下面的命令,并检查是否添加成功:

bash 复制代码
export PYTHONPATH=$PWD:$PYTHONPATH
echo $PYTHONPATH

win 添加路径的方式:

bash 复制代码
# 配置临时环境变量
set PYTHONPATH=C:\path\to\dir
# 打印环境变量检查是否配置成功
echo %PYTHONPATH%
# 配置成功有如下输出
C:\path\to\dir

PS: 临时添加路径,每次都要添加。

2. stup.py

编译 stup.py 文件,生成 build 文件夹:

bash 复制代码
python setup.py build_ext --inplace

3. 下载模型

官方链接:PySOT Model Zoo

百度云链接:https://pan.baidu.com/s/1GB9-aTtjG57SebraVoBfuQ 密码:j9yb

感谢大佬的分享。

将模型下载下来,将里面各个文件夹的 model.pth 文件,分别复制到 pysot 工程文件 experiments 对应的文件夹里。不要直接替换文件夹,里面的 config.yaml 文件不一样。直接替换的话,后面运行程序会报错。

4. demo.py

根据我个人的习惯,我在 demo.py 的 parser 中添加了 config、snapshot、video 的默认路径:

或者按照大佬的介绍在菜单栏 Run-->Edit configurations 中输入:

bash 复制代码
--config
../experiments/siamrpn_alex_dwxcorr/config.yaml
--snapshot
../experiments/siamrpn_alex_dwxcorr/model.pth
--video
../demo/bag.avi

或者在终端中输入都可以。

然后运行 demo.py,用鼠标框个框,回车:

四、test

1. 错误1

在Ubuntu24.04中打开 test.py 文件,就有一个醒目的错误:Cannot find reference region in __init__.py

使用了非常多的方法都没有用,setup.py 文件改了又改,错误还是存在。而且 build 文件夹也顺利生成了,到底是什么原因呢?这里我在运行 setup.py 文件时还出现了两个警告:
Warning: Extension name toolkit.utils.region does not match fully qualified
toolkit/utils/region.pyx: cannot find cimported module 'c_region'

我最终的解决方案:

File→Settings→Editor→Inspections→在右侧框中选择python→Unresolved references

将Unresolved references后的"√"勾掉。。。

2. 错误2

bash 复制代码
FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2)

解决方案:

setup.py 文件的开头第一行加上:

bash 复制代码
# cython: language_level=3

或者在 anaconda3/envs/环境名称/lib/python3.7/site-packages/Cython/Compiler/Main.py 的第 757 行将 2 改为 3.

win11中没有出现错误。

3. 准备数据集(以 OTB100 为例)

  1. 下载 .json 文件
    官方链接:https://pan.baidu.com/s/1js0Qhykqqur7_lNRtle1tA?at=1734357740544#list/path=/
  2. 配置数据集
    将CVRP13.json,OTB100.json,OTB50.json放在OTB100数据集目录中(您需要将Jogging复制到Jogging-1和Jogging-2,并将Skating2复制到Skating2-1和Skating2-2或使用软链接,将 Human4 文件夹修改为 Human4-2

4. 编辑 test

运行 test.py

会将测试结果保存在 ./results 下面,后面的评估需要测试结果。

五、eval

1. 编辑配置

在编辑配置中输入:

bash 复制代码
--tracker_path
../tools/results
--dataset
OTB100
--num
1
--tracker_prefix
model
--show_video_level

点击运行。

2. 经典问题:

在ubuntu24.04中出现:

bash 复制代码
ImportError: cannot import name 'calculate_failures' from 'toolkit.utils' (unknown location)

感觉可能还是 setup 运行的时候出了问题?我在 win11 中就没有遇到这个问题,运行 eval.py 非常顺利:

所以到底是怎么回事。后面我没有继续在Ubuntu24.04中配置了,只在win11中进行了下面的配置步骤。

五、安装 LaTeX

参考链接:
Latex安装教程

1. 安装 Texlive

  1. 下载地址:
    win官方链接:https://tug.org/texlive/windows.html
    清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/
  2. 下载
  3. 安装
    解压 ISO 文件,右键 install-tl-windows.bat ,以管理员身份运行:

    修改安装位置,路径中不能含有中文,然后点击 advance:

    安装语言只选择了英文、中文:



    点击确定,开始安装
  4. 检测安装结果
    在终端中输入:
bash 复制代码
tex -v
latex -v
xelatex -v
pdflatex -v

看是否显示版本号。若不显示则需添加环境变量,但一般应该是自动添加的。

2. 安装 TeXstudio

  1. 下载地址
    win官方链接:https://texstudio.sourceforge.net/
    清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/github-release/texstudio-org/texstudio/
  2. 下载
  3. 安装
    安装路径需全英文
  4. 配置
    1). 这里我打开就是中文版的,所以没有设置语言。
    2). 设置编译环境
    选项-->设置TeXstudio-->构建-->默认编译器-->XeLaTeX

    写中文论文--->XeLaTeX,英文论文PdfLaTex
  5. 测试效果
    新建文件,编辑如下代码:
bash 复制代码
\documentclass{article}
% 这里是导言区
\begin{document}
Hello, world!
\end{document}

点击构建并查看:

3. 更改eval.py的内容

参考链接

bash 复制代码
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

import os
import argparse

from glob import glob
from tqdm import tqdm
from multiprocessing import Pool
from toolkit.datasets import OTBDataset, UAVDataset, LaSOTDataset, \
        VOTDataset, NFSDataset, VOTLTDataset
from toolkit.evaluation import OPEBenchmark, AccuracyRobustnessBenchmark, \
        EAOBenchmark, F1Benchmark
from toolkit.visualization import draw_success_precision, draw_eao, draw_f1
parser = argparse.ArgumentParser(description='tracking evaluation')
parser.add_argument('--tracker_path', '-p', type=str,
                    help='tracker result path')
parser.add_argument('--dataset', '-d', type=str,
                    help='dataset name')
parser.add_argument('--num', '-n', default=1, type=int,
                    help='number of thread to eval')
parser.add_argument('--tracker_prefix', '-t', default='',
                    type=str, help='tracker name')
parser.add_argument('--show_video_level', '-s', dest='show_video_level',
                    action='store_true')
parser.add_argument('--vis', dest='vis', action='store_true')
parser.set_defaults(show_video_level=False)
args = parser.parse_args()


def main():
    tracker_dir = os.path.join(args.tracker_path, args.dataset)
    trackers = glob(os.path.join(args.tracker_path,
                                 args.dataset,
                                 args.tracker_prefix+'*'))
    trackers = [os.path.basename(x) for x in trackers]

    assert len(trackers) > 0
    args.num = min(args.num, len(trackers))

    root = os.path.realpath(os.path.join(os.path.dirname(__file__),
                            '../testing_dataset'))
    root = os.path.join(root, args.dataset)
    if 'OTB' in args.dataset:
        dataset = OTBDataset(args.dataset, root)
        dataset.set_tracker(tracker_dir, trackers)
        benchmark = OPEBenchmark(dataset)
        success_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_success,
                trackers), desc='eval success', total=len(trackers), ncols=100):
                success_ret.update(ret)
        precision_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,
                trackers), desc='eval precision', total=len(trackers), ncols=100):
                precision_ret.update(ret)
        benchmark.show_result(success_ret, precision_ret,
                show_video_level=args.show_video_level)
        if args.vis:
            for attr, videos in dataset.attr.items():
                draw_success_precision(success_ret,
                            name=dataset.name,
                            videos=videos,
                            attr=attr,
                            precision_ret=precision_ret)
    elif 'LaSOT' == args.dataset:
        dataset = LaSOTDataset(args.dataset, root)
        dataset.set_tracker(tracker_dir, trackers)
        benchmark = OPEBenchmark(dataset)
        success_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_success,
                trackers), desc='eval success', total=len(trackers), ncols=100):
                success_ret.update(ret)
        precision_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,
                trackers), desc='eval precision', total=len(trackers), ncols=100):
                precision_ret.update(ret)
        norm_precision_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_norm_precision,
                trackers), desc='eval norm precision', total=len(trackers), ncols=100):
                norm_precision_ret.update(ret)
        benchmark.show_result(success_ret, precision_ret, norm_precision_ret,
                show_video_level=args.show_video_level)
        if args.vis:
            draw_success_precision(success_ret,
                    name=dataset.name,
                    videos=dataset.attr['ALL'],
                    attr='ALL',
                    precision_ret=precision_ret,
                    norm_precision_ret=norm_precision_ret)
    elif 'UAV' in args.dataset:
        dataset = UAVDataset(args.dataset, root)
        dataset.set_tracker(tracker_dir, trackers)
        benchmark = OPEBenchmark(dataset)
        success_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_success,
                trackers), desc='eval success', total=len(trackers), ncols=100):
                success_ret.update(ret)
        precision_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,
                trackers), desc='eval precision', total=len(trackers), ncols=100):
                precision_ret.update(ret)
        benchmark.show_result(success_ret, precision_ret,
                show_video_level=args.show_video_level)
        if args.vis:
            for attr, videos in dataset.attr.items():
                draw_success_precision(success_ret,
                        name=dataset.name,
                        videos=videos,
                        attr=attr,
                        precision_ret=precision_ret)
    elif 'NFS' in args.dataset:
        dataset = NFSDataset(args.dataset, root)
        dataset.set_tracker(tracker_dir, trackers)
        benchmark = OPEBenchmark(dataset)
        success_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_success,
                trackers), desc='eval success', total=len(trackers), ncols=100):
                success_ret.update(ret)
        precision_ret = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval_precision,
                trackers), desc='eval precision', total=len(trackers), ncols=100):
                precision_ret.update(ret)
        benchmark.show_result(success_ret, precision_ret,
                show_video_level=args.show_video_level)
        if args.vis:
            for attr, videos in dataset.attr.items():
                draw_success_precision(success_ret,
                            name=dataset.name,
                            video=videos,
                            attr=attr,
                            precision_ret=precision_ret)
    elif args.dataset in ['VOT2016', 'VOT2017', 'VOT2018', 'VOT2019']:
        dataset = VOTDataset(args.dataset, root)
        dataset.set_tracker(tracker_dir, trackers)
        ar_benchmark = AccuracyRobustnessBenchmark(dataset)
        ar_result = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(ar_benchmark.eval,
                trackers), desc='eval ar', total=len(trackers), ncols=100):
                ar_result.update(ret)

        benchmark = EAOBenchmark(dataset)
        eao_result = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval,
                trackers), desc='eval eao', total=len(trackers), ncols=100):
                eao_result.update(ret)
        ar_benchmark.show_result(ar_result, eao_result,
                show_video_level=args.show_video_level)
    elif 'VOT2018-LT' == args.dataset:
        dataset = VOTLTDataset(args.dataset, root)
        dataset.set_tracker(tracker_dir, trackers)
        benchmark = F1Benchmark(dataset)
        f1_result = {}
        with Pool(processes=args.num) as pool:
            for ret in tqdm(pool.imap_unordered(benchmark.eval,
                trackers), desc='eval f1', total=len(trackers), ncols=100):
                f1_result.update(ret)
        benchmark.show_result(f1_result,
                show_video_level=args.show_video_level)
        if args.vis:
            draw_f1(f1_result)


if __name__ == '__main__':
    main()

4. 修改 eval.py 的 configurations

添加一行"--vis":

bash 复制代码
--tracker_path
...\results
--dataset
OTB100
--num
1
--tracker_prefix
model
--show_video_level
--vis
相关推荐
AIWhispers几秒前
Word2Vec:将词汇转化为向量的技术
人工智能·自然语言处理·word2vec
普密斯科技20 分钟前
3D工具显微镜的测量范围
人工智能·计算机视觉·3d·自动化·视觉检测·集成测试
三月七(爱看动漫的程序员)25 分钟前
AI Alignment: A Comprehensive Survey---分布转移下的学习
人工智能·gpt·深度学习·学习·语言模型·自然语言处理·chatgpt
老大白菜31 分钟前
OpenAI 与 ChatGPT 的关系解析
人工智能·chatgpt
bryant_meng32 分钟前
【Double Head】《Rethinking Classification and Localization for Object Detection》
人工智能·目标检测·计算机视觉·double head·decouple head
KiraFenvy43 分钟前
【踩坑】Pytorch与CUDA版本的关系及安装
人工智能·pytorch·python
酒酿小圆子~1 小时前
PyTorch中apex的安装方式
人工智能·pytorch·python
YRr YRr1 小时前
深入解析Ubuntu 20.04中ROS的catkin_make工具
linux·运维·ubuntu
wellnw1 小时前
【ubuntu18.04】ubuntu18.04挂在硬盘出现 Wrong diagnostic page; asked for 1 got 8解决方案
linux·运维·ubuntu
itwangyang5201 小时前
AIGC drug design 人工智能生成式药物设计:基于 GPT 的 SMILES 生成与应用
人工智能·gpt