windows平台FairMOT的实现
环境: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_seqFile "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博客
相关文章:
windows平台FairMOT的实现
环境:python3.6pytorch1.1.0torchvision0.3.0cuda9.2vs2015 该项目需要装3个c库(dcn_v2,apex,cython_bbox)特别坑,各种环境不匹配,各种bug。本人c小白,但是一路摸索总算成功了。下面…...
系统架构设计:12 论软件维护方法及其应用
目录 一 软件维护方法 1 影响软件维护工作的因素 2 软件维护类型 (1)正确性维护...
SS命令使用介绍
ss 一. 命令介绍 先使用手册查看命令介绍信息 NAME ss - another utility to investigate sockets DESCRIPTION ss is used to dump socket statistics. It allows showing information similar to netstat. It can display more TCP and state informations than other tools.…...
让你的对象变得拗口:JSON.stringify(),我把对象夹进了 JSON 魔法帽!
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 引言 1. JSON.stringify() 属性 replacer …...
TDengine时序数据库学习使用
数据库要求: 1.目前服务器只能在linux运行,先安装服务器版本v1 2.下载与v1完全匹配的客户端版本v1(客户端与服务器的版本号不匹配可能访问不了服务器) 第一步 安装 安装服务器注意,安装教程: 使用安装…...
算法通过村第十三关-术数|青铜笔记|数字与数学
文章目录 前言数字统计专题符号统计阶乘0的个数 溢出问题整数反转字符串转整数回文数 进制专题七进制数进制转换 总结 前言 提示:生活是正着来生活,倒着去理解。 --戴维迈尔斯《社会心理学》 数学是学生时代掉头发的学科,那算法是毕业后掉头发…...
【SpringMVC篇】详解SpringMVC入门案例
🎊专栏【SpringMVC】 🍔喜欢的诗句:天行健,君子以自强不息。 🎆音乐分享【如愿】 🎄欢迎并且感谢大家指出小吉的问题🥰 文章目录 🎍SpringMVC简介⭐优点 🌺SpringMVC入门…...
Programming abstractions in C阅读笔记:p166-p175
《Programming Abstractions In C》学习第58天,p166-p175总结。 一、技术总结 1.斐波那契数列(Fibonacci Sequenc) (1)斐波那契数列来源 斐波那契数列来自于《Liber Abaci》一书里兔子繁殖问题,相关资料很多,这里不赘述。 (2)关于《Libe…...
【List-Watch】
List-Watch 一、定义二、工作机制三、调度过程 一、定义 Kubernetes 是通过 List-Watch 的机制进行每个组件的协作,保持数据同步的,每个组件之间的设计实现了解耦。 用户是通过 kubectl 根据配置文件,向 APIServer 发送命令,在 …...
Pytorch因nn.Parameter导致实验不可复现的一种情况
文章首发见博客:https://mwhls.top/4871.html。 无图/格式错误/后续更新请见首发页。 更多更新请到mwhls.top查看 欢迎留言提问或批评建议,私信不回。 没解决,只是记录这种情况。 也可以多次实验取均值以避免结果复现。 场景 自己的模块中&a…...
MySQL表名区分不区分大小写,规则是怎样
MySQL表名区分不区分大小写,规则是怎样 mysql在linux中表名区分大小写,mysql在Windows中表名不区分大小写;可以在MySQL的配置文件“my.ini [mysqld]”中增加一行“lower_case_table_names 参数”来设置是否区分大小写。 mysql的表名区分大小写…...
Design patterns--观察者模式
设计模式之观察者模式 代码示例 #ifndef OBSERVER_H #define OBSERVER_H#include <map>class Observer { public:Observer();virtual void update(std::map<int, double>) 0; }; #endif // OBSERVER_H#include "observer.h"Observer::Observer() {}#if…...
【Spring Boot】SpringBoot 单元测试
SpringBoot 单元测试 一. 什么是单元测试二. 单元测试的好处三. Spring Boot 单元测试单元测试的实现步骤 一. 什么是单元测试 单元测试(unit testing),是指对软件中的最⼩可测试单元进⾏检查和验证的过程就叫单元测试。 二. 单元测试的好处…...
ansible 调研
参考:自动化运维工具——ansible详解(一) - 珂儿吖 - 博客园 (cnblogs.com) ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点…...
QT UI控件汇总介绍
按钮 ToolButton 和pushbutton没什么区别,可以用来设置图标 设置展示策略 RadioButton 一般用Container可以将其框起来设置互斥域,推荐选用GroupBox 使用方法 qDebug()<<ui->radioButton_3->isChecked(); CheckBox 可以勾选三态 stat…...
【垃圾回收概述及算法】
文章目录 1. 垃圾回收概述及算法2. 垃圾回收相关算法2.1 标记阶段:引用计数算法2.2 标记阶段:可达性分析算法2.3 对象的 finalization 机制2.3.1 一个对象是否可回收的判断 2.4 清除阶段:标记-清除算法2.5 清除阶段:复制算法2.6 清…...
2021年03月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
Python编程(1~6级)全部真题・点这里 一、单选题(共25题,每题2分,共50分) 第1题 对于字典infor {“name”:“tom”, “age”:13, “sex”:“male”},删除"age":13键值对的操作正确的…...
为什么通过一致性正则化方法就可以避免将所有未标记数据集分配给同一类?
一致性正则化方法可以帮助避免将所有未标记数据分配给同一类别的原因在于它们引入了对模型输出的一致性约束,从而减轻了判别性损失(如交叉熵损失)可能导致的问题。以下是一些关键原因: 一致性反馈: 一致性正则化方法…...
第4章 决策树
文章目录 4.1 基本流程4.2 划分选择4.2.1 信息增益4.2.2 增益率4.2.3 基尼指数 4.3 剪枝处理4.3.1 预剪枝4.3.2 后剪枝 4.4 连续与缺失值4.4.1 连续值处理4.4.2 缺失值处理 4.5 多变量决策树4.6 阅读材料 4.1 基本流程 决策树也称判定树,是一类常见的机器学习方法。…...
在Remix中编写你的第一份智能合约
智能合约简单来讲就是:部署在去中心化区块链上的一个合约或者一组指令,当这个合约或者这组指令被部署以后,它就不能被改变了,并会自动执行,每个人都可以看到合约里面的条款。更深层次的理解就是:这些代码会…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
LeetCode - 394. 字符串解码
题目 394. 字符串解码 - 力扣(LeetCode) 思路 使用两个栈:一个存储重复次数,一个存储字符串 遍历输入字符串: 数字处理:遇到数字时,累积计算重复次数左括号处理:保存当前状态&a…...
自然语言处理——循环神经网络
自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元(GRU)长短期记忆神经网络(LSTM)…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
BLEU评分:机器翻译质量评估的黄金标准
BLEU评分:机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域,衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标,自2002年由IBM的Kishore Papineni等人提出以来,…...
深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向
在人工智能技术呈指数级发展的当下,大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性,吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型,成为释放其巨大潜力的关键所在&…...
深入理解 React 样式方案
React 的样式方案较多,在应用开发初期,开发者需要根据项目业务具体情况选择对应样式方案。React 样式方案主要有: 1. 内联样式 2. module css 3. css in js 4. tailwind css 这些方案中,均有各自的优势和缺点。 1. 方案优劣势 1. 内联样式: 简单直观,适合动态样式和…...
SQL注入篇-sqlmap的配置和使用
在之前的皮卡丘靶场第五期SQL注入的内容中我们谈到了sqlmap,但是由于很多朋友看不了解命令行格式,所以是纯手动获取数据库信息的 接下来我们就用sqlmap来进行皮卡丘靶场的sql注入学习,链接:https://wwhc.lanzoue.com/ifJY32ybh6vc…...
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑
精益数据分析(98/126):电商转化率优化与网站性能的底层逻辑 在电子商务领域,转化率与网站性能是决定商业成败的核心指标。今天,我们将深入解析不同类型电商平台的转化率基准,探讨页面加载速度对用户行为的…...
