windows平台FairMOT的实现

news2024/9/24 19:25:21

环境:python3.6+pytorch1.1.0+torchvision0.3.0+cuda9.2+vs2015

该项目需要装3个c++库(dcn_v2,apex,cython_bbox)特别坑,各种环境不匹配,各种bug。本人c++小白,但是一路摸索总算成功了。下面总结一下:

一、
1.先把源码下下来,用git(自己手安)克隆或者直接下载zip文件都可:https://github.com/ifzhang/FairMOT

2. 安装anaconda3,并用conda搭建虚拟环境:

conda create -n FairMOT python=3.6 #-n 代表环境名字
activate
conda activate FairMOT #激活这个叫FairMOT的环境

3.安装pytorch1.1.0,在官网上下载https://download.pytorch.org/whl/torch_stable.html,我选择的是:cu100/torch-1.1.0-cp36-cp36m-win_amd64.whl,下载后使用pip安装

pip install torch-1.1.0-cp36-cp36m-win_amd64.whl

4.安装对应的torchvision

pip install torchvision-0.3.0-cp36-cp36m-win_amd64.whl

5.安装cython,ninja

pip install cython
pip install ninja

6.安装opencv-python:

pip install -U opencv-python==4.1.1.26

7.安装依赖项:

pip install -r requirements.txt

8.安装:DCNv2:

下载:GitHub - maohule/DCNv2

进入DCNv2-master文件夹运行:

python setup.py build develop

在Python下import dcn_v2不报错就安装成功了。

9.安装cython_bbox,在这里下载cython-bbox · PyPI,运行下面指令安装:

python setup.py build develop install

可能报错:

cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”

修改如下一行,然后再执行安装即可。

在Python下import cython_bbox不报错就安装成功了。

参考:cl: 命令行 error D8021 :无效的数值参数“/Wno-cpp”-CSDN博客

invalid numeric argument '/Wno-cpp' 解决方法-CSDN博客

10.安装apex:

git clone https://github.com/NVIDIA/apex.git这个官方的怎么安都报错,于是乎,找了这个博客(apex安装常见的三个报错并成功解决(亲测有效)_安装apex库错误-CSDN博客)的第四种方法,很有效:

git clone https://github.com/ptrblck/apex.git
cd apex
git checkout apex_no_distributed
pip install -v --no-cache-dir ./

安装后需要将FairMOT代码中的from torch.cuda import amp改为from apex import amp

在Python下import apex不报错就安装成功了。

11.修改FairMOT代码FairMOT-master\src\lib\opts.py

--load_model 设置上一步下载好的模型权重位置

在opts.py的19行

0代表第一个gpu

–input-video要测试视频的位置
–output-root测试完视频的输出位置

12.在src文件夹下运行demo.py文件,即可测试:

python demo.py mot --input-video ../videos/MOT16-03.mp4 --load_model ../models/fairmot_dla34.pth --conf_thres 0.4

运行时出现如下错误:

Traceback (most recent call last):
  File "demo.py", line 14, in <module>
    from track import eval_seq
  File "C:\Users\93260\FairMOT-master1\src\track.py", line 20, in <module>
    import datasets.dataset.jde as datasets
ModuleNotFoundError: No module named 'datasets.dataset'

解决:将datasets.dataset.jde改为datasets.dataset.jde

出现错误:找不到models模块

解决:在models块添加__init__.py文件即可

出现错误:

AttributeError: module 'torch' has no attribute 'true_divide'

发生该错误主要原因是我用低版本的torch,torch1.7就没有这样的错误。

解决:将torch.true_divide改为 torch.div即可

二、一些坑的总结:

1.torch1.1.0+torchvision0.3.0+cuda9.2+vs2015可以成功编译dcn_v2,但是编译apex时候报错,参照Pytorch 安装 APEX 疑难杂症解决方案 - 知乎,大概意思是torch的cuda版本

torch.version.cuda

是10.0,但是nvcc --version查到的cuda版本是9.2,所以导致Cuda extensions are being compiled with a version of Cuda that does not错误。因此我按照nvcc查到的版本卸载安装了torch1.2和torchvision0.4即下载安装

利用pip uninstall 卸载torch和torchvision,再安装

pip install torch-1.2.0+cu92-cp36-cp36m-win_amd64.whl
pip install torchvision-0.4.0+cu92-cp36-cp36m-win_amd64.whl

这样编译apex就没错了,但是import dcn_v2又报错了。因此安装完apex后又重新卸载安装了torch1.1.0和torchvision0.3.0,重新编译dcn_v2。编译成功后import dcn_v2和import apex均不报错。(遇见flat_hash_map.h错误,没解决,但是通过重安pytorch方法,版本匹配后,就没有这个错误了)

2.'cl.exe' not found

首先确保你安装了C++编译工具,我直接安装Microsoft Visual studio 14.0了。一定要选择上C++编译工具。

配置环境变量:在你的系统添加环境变量,在搜索框输入sysdm.cpl,选择高级,环境变量,系统变量,Path添加:

3.系统可以同时存在多个版本的cuda,使用哪个更改环境变量即可。比如我安装了cuda9.2和cuda11.2,因此如果要用cuda9.2,在系统变量的Path中将9.2版本的cuda放在11.2前面:

另外在系统变量中将CUDA_PATH的路径指向9.2:

4. visual studio c++ build tools时安装缺失问题:

解决visual studio C++ build tools时安装包缺失或损坏的问题(亲测绝对有用!!!)_visual studio build tools-CSDN博客win10安装visual studio C++ build tools超简单教程(离线适用)_microsoft c++ build tools 离线-CSDN博客

即百度网盘下载:
链接:https://pan.baidu.com/s/1msbwwqLleQ0GagZ4ymKvhQ
提取码:owk0
下载解压后的文件夹如图所示:

然后双击VisualCppBuildTools_Full.exe离线安装。

5.不要卸载setuptools,在安装dcn_v2时,出现错误,根据搜索提示,需要安装低版本的setuptools,我于是卸载了setuptools导致每次运行都会报一个文件出错,于是还重新安装了annaconda。变成低版本的setuptools,只需要直接安装即可,例如:pip install setuptools=59.x.x。如果不小心卸载了setuptools参照以下方法解决:

手贱,pip uninstall setuptools报错!!!-CSDN博客

[python]python2.7卸载setuptools导致No module named pkg_resources_python卸载setuptools_FL1623863129的博客-CSDN博客

6. pip下载安装出现SSLError,解决:关掉翻墙软件。

[python]python2.7卸载setuptools导致No module named pkg_resources_python卸载setuptools_FL1623863129的博客-CSDN博客

7.conda激活虚拟环境发生错误:CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘。

解决:在shell环境下应该要先启动conda的base环境

activate

再激活虚拟环境:

conda activate FairMOT1

参考:CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.简单解决方案_rothschildlhl的博客-CSDN博客

8.关于apex的一些总结:

apex安装问题解决_nvidia apex安装_一根黄三的博客-CSDN博客

Pytorch 安装 APEX 疑难杂症解决方案 - 知乎

CommandNotFoundError: Your shell has not been properly configured to use ‘conda activate‘.简单解决方案_rothschildlhl的博客-CSDN博客

9.关于dcn_v2的一些总结:

解决在windows上DCNv2编译问题(强推!亲测有效!!)_windows编译dcnv2-CSDN博客

10.flat_hash_map.h总结:

没办法用人工智障跳鸡你太美让我很伤心! - 哔哩哔哩

python - flat_hash_map.h : error C3203: 'templated_iterator': unspecialized class template - Stack Overflow

11.python3.8+pytorch1.7+cuda11.2+vs2019参照:

FairMOT配置(VS2019+Win10+CUDA11.0)_importerror: cannot import name '_nt_quote_args' f-CSDN博客

Tracking(目标跟踪):Mot(多目标跟踪系列)-FairMot,快速入门代码、小白都看懂_he_eeeeeeeeeee的博客-CSDN博客

12.其他的FairMOT的总结:

https://www.cnblogs.com/huiyanliu/p/14080785.html

关于在windows上完成目标检测模型Centernet 以及自己数据的训练 - 灰信网(软件开发博客聚合)FairMOT实时多目标跟踪_fairmot dla-CSDN博客关于在windows上完成目标检测模型Centernet 以及自己数据的训练 - 灰信网(软件开发博客聚合)

FairMOT训练自己的数据集及学习笔记_fairmot修改类别数-CSDN博客

解决在windows上DCNv2编译问题(强推!亲测有效!!)_windows编译dcnv2-CSDN博客

13.conda如何添加,删除镜像channel,管理虚拟环境,以及其他常见命令

conda如何添加,删除镜像channel,管理虚拟环境,以及其他常见命令。_conda config --add channels_音程的博客-CSDN博客

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

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

相关文章

【Redis学习1】Redis持久化机制详解

Redis持久化机制详解 一、Redis为什么需要持久化机制 Redis一般用作缓存&#xff0c;其数据存储在内存中&#xff0c;当Redis宕机后&#xff0c;内存中的数据将会丢失。因此使用缓存的时候&#xff0c;我们经常需要对内存中的数据进行持久化也就是将内存中的数据写入到硬盘中…

vscode ssh linux C++ 程序调试

vscode调试c++程序相比vs2022要复杂很多,vs2022可以"一键运行调试",vscode则需要自己配置。 ​vscode调试程序时,会在当前工作目录产生.vscode 目录, 该目录有两个重要文件launch.json和tasks.json, 下面介绍两种调试方法: 手动调试和自动调试。 手动调试 不管…

k8s安全机制

安全机制 一、机制说明二、认证&#xff08;Authentication&#xff09;HTTP Token 认证HTTP Base 认证HTTPS 证书认证&#xff08;最严格&#xff09; 三、鉴权&#xff08;Authorization&#xff09;角色角色绑定主体&#xff08;subject&#xff09;Role and ClusterRoleRol…

实现一个简单的线性回归和多项式回归(2)

对于多项式回归&#xff0c;可以同样使用前面线性回归中定义的LinearRegression算子、训练函数train、均方误差函数mean_squared_error&#xff0c;生成数据集create_toy_data,这里就不多做赘述咯~ 拟合的函数为 def sin(x):y torch.sin(2 * math.pi * x)return y1.数据集的建…

3、在 CentOS 8 系统上安装 PostgreSQL 15.4

PostgreSQL&#xff0c;作为一款备受欢迎的开源关系数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;已经存在了三十多年的历史。它提供了SQL语言支持&#xff0c;用于管理数据库和执行CRUD操作&#xff08;创建、读取、更新、删除&#xff09;。 由于其卓越的健壮性…

Linux网络监控工具 - nethogs

nethogs 是一个基于命令行的网络监控工具&#xff0c;用于实时监视每个进程的网络流量。它可以显示每个进程使用的带宽、连接数和数据包数量等信息。 安装 在大多数Linux发行版中&#xff0c;您可以使用包管理器来安装 nethogs。例如&#xff0c;在Ubuntu/Debian上&#xff0c…

【Java 进阶篇】CSS语法格式详解

在前端开发中&#xff0c;CSS&#xff08;层叠样式表&#xff09;用于控制网页的样式和布局。了解CSS的语法格式是学习如何设计和美化网页的关键。本文将深入解释CSS的语法格式&#xff0c;包括选择器、属性和值等基本概念&#xff0c;同时提供示例代码以帮助初学者更好地理解。…

【单片机】18-红外线遥控

一、红外遥控背景知识 1.人机界面 &#xff08;1&#xff09;当面操作&#xff1a;按键&#xff0c;旋转/触摸按键&#xff0c;触摸屏 &#xff08;2&#xff09;遥控操作&#xff1a;红外遥控&#xff0c;433M/2.4G无线通信【穿墙能力强】&#xff0c;蓝牙-WIFI-Zigbee-LoRa等…

WPFdatagrid结合comboBox

在WPF的DataGrid中希望结合使用ComboBox下拉框&#xff0c;达到下拉选择绑定的效果&#xff0c;在实现的过程中&#xff0c;遇到了一些奇怪的问题&#xff0c;因此记录下来。 网上能够查询到的解决方案&#xff1a; 总共有三种ItemSource常见绑定实现方式&#xff1a; 1.ItemS…

【bug日记】spring项目使用配置类和测试类操作数据库

最近学校课程要求使用spring操作数据库&#xff0c;时间有点久了&#xff0c;操作都不太熟悉了&#xff0c;遇到了很多坑&#xff0c;特此记录一下。 导入依赖 <!-- Spring Framework --> <dependency><groupId>org.springframework</groupId><ar…

用Nginx搭建一个可用的静态资源Web服务器

sudo wget http://dlib.net/files/dlib-19.24.tar.bz2下载需要的文件。 sudo tar jxf dlib-19.24.tar.bz2进行解压。 sudo mkdir /nginx/dlib在nginx安装目录/nginx创建一个新的目录dlib。 配置文件里边的内容如下&#xff1a; worker_processes 1; events {worker_con…

如何批量获取1688商品详情数据接口,1688商品详情数据接口

批量获取1688商品详情数据接口的步骤如下&#xff1a; 获取API接口权限。编写API请求代码。应用爬取下来的数据。 1688商品详情数据接口步骤如下&#xff1a; 注册成为1688开放平台的开发者&#xff0c;并创建一个应用&#xff0c;获取到所需的App Key和App Secret等信息。使…

SpringBoot 如何使用 Prometheus 进行监控

在当今的软件开发世界中&#xff0c;监控是至关重要的一部分。它允许开发人员和运维团队实时跟踪应用程序的性能、可用性和健康状况。Spring Boot是一个流行的Java框架&#xff0c;用于构建微服务和Web应用程序&#xff0c;而Prometheus是一个开源的监控和警报工具。本文将介绍…

数据结构和算法——线性结构

文章目录 前言线性表顺序表链表合并有序链表反转链表 队列循环队列双端队列资源分配问题 栈共享栈表达式求值递归处理迷宫问题 串串的模式匹配BF算法KMP算法next数组的求解next数组的优化 前言 本文所有代码均在仓库中&#xff0c;这是一个完整的由纯C语言实现的可以存储任意类…

spark-08

学习视频&#xff1a; 黑马程序员Spark全套视频教程&#xff0c;4天spark3.2快速入门到精通&#xff0c;基于Python语言的spark教程_哔哩哔哩_bilibili

增强LLM:使用搜索引擎缓解大模型幻觉问题

论文题目&#xff1a;FRESHLLMS:REFRESHING LARGE LANGUAGE MODELS WITH SEARCH ENGINE AUGMENTATION 论文地址&#xff1a;https://arxiv.org/pdf/2310.03214.pdf 论文由Google、University of Massachusetts Amherst、OpenAI联合发布。 大部分大语言模型只会训练一次&#…

Spring Data Redis使用方式

1.导入Spring Data Redis的maven坐标 pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2. 配置Redis数据源 2.1application.yml文件…

idea compile项目正常,启动项目的时候build失败,报“找不到符号”等问题

1、首先往上找&#xff0c;看能不能找到如下报错信息 You aren’t using a compiler supported by lombok, so lombok will not work and has been disabled. 2、这种问题属于lombok编译失败导致&#xff0c;可能原因是依赖jar包没有更新到最新版本 3、解决方案 1&#xff09…

C语言编程实现只有一个未知数的两个多项式合并的程序

背景&#xff1a; 直接看题目把&#xff01;就是C语言写两个多项式多项式合并 题目要求&#xff1a; 1. 题目&#xff1a; 编程实现只有一个未知数的两个多项式合并的程序。如&#xff1a; 3x^26x7 和 5x^2-2x9合并结果为8x^24x16。 2. 设计要求 &#xff08;1&#xff09…

有哪些值得推荐的Java 练手项目?

大家好&#xff0c;我是 jonssonyan 我是一名 Java 后端程序员&#xff0c;偶尔也会写一写前端&#xff0c;主要的技术栈是 JavaSpringBootMySQLRedisVue.js&#xff0c;基于我学过的技术认真的对每个分享的项目进行鉴别&#xff0c;今天就和大家分享我曾经用来学习的开源项目…