0. 前言
MMTracking是一款基于PyTorch的视频目标感知开源工具箱,推出之时收到广泛的好评。
遗憾的是,MMTracking在安装的过程中会遇到极其多的问题,并且官方的wiki的FAQ以及GitHub上的issue中并没有很好回答这些问题。本文是笔者基于实践安装解决MMTracking的经验之谈,尝试从特定的系统环境去介绍如何安装MMTracking到您的服务器上,并且尝试浅谈错误的原因。
首先介绍笔者的系统环境:
- 平台:服务器
- OS:Ubuntu 22.04
- Nvidia环境:
- Driver Version: 525.105.17
- CUDA Version: 11.8 (装在用户目录下,非root)
- 显卡型号:RTX 4090 * 8张
1. 问题与分析
影响MMTracking安装的因素有很多,包括但不完全地举例如下:
- Python版本
- Pytorch版本(强烈建议<2.x版本,建议低版本例如1.82)
- MMCV版本
- MMDetection版本
- CUDA版本
- ..
基于以上复杂环境,将会导致有复杂的情况发生。
因为MMTracking的安装依赖MMCV和MMDetection,它们三者之间的版本存在一定的约束关系,而我们安装的时候是一个一个独立安装的,这就造成了极大的麻烦。
1.1 OpenMMLab的复杂情况
为了阐述方便,在这里先介绍目前OpenMMLab工具箱的复杂情况。
(1)MMCV(以下“mmcv”和”MMCV”不区分大小写)
MMCV的版本发布过程中,经历过一些变化,包括名称和版本。
MMCV v2.0.0 正式版本于 2023 年 4 月 6 日发布。在 2.x 版本中,它删除了和训练流程相关的组件,并新增了数据变换模块。另外,从 2.x 版本开始,重命名包名 mmcv 为 mmcv-lite 以及 mmcv-full 为 mmcv。
为了方便理解,mmcv名称的版本变化如下:
版本 | 完整版 | 精简版 |
---|---|---|
1.x | mmcv-full | mmcv |
2.x | mmcv | mmcv-lite |
更多:
(2)MMTracking
为什么要首先介绍mmcv的情况呢?因为MMTracking依赖要求MMCV版本较低,可能存在冲突的问题。
我们首先查看MMTracking的官方文档:点击链接,按照doc的信息,我们很轻易了解到如下一些信息。
- 依赖
我们先看MMTracking的依赖:
MMTracking version | MMCV version | **MMDetection version ** |
---|---|---|
master | mmcv-full>=1.3.17, <2.0.0 | MMDetection>=2.19.1, <3.0.0 |
0.14.0 | mmcv-full>=1.3.17, <2.0.0 | MMDetection>=2.19.1, <3.0.0 |
0.13.0 | mmcv-full>=1.3.17, <1.6.0 | MMDetection>=2.19.1, <3.0.0 |
0.12.0 | mmcv-full>=1.3.17, <1.5.0 | MMDetection>=2.19.1, <3.0.0 |
0.11.0 | mmcv-full>=1.3.17, <1.5.0 | MMDetection>=2.19.1, <3.0.0 |
0.10.0 | mmcv-full>=1.3.17, <1.5.0 | MMDetection>=2.19.1, <3.0.0 |
0.9.0 | mmcv-full>=1.3.17, <1.5.0 | MMDetection>=2.19.1, <3.0.0 |
0.8.0 | mmcv-full>=1.3.8, <1.4.0 | MMDetection>=2.14.0, <3.0.0 |
0.7.0 | mmcv-full>=1.3.8, <1.4.0 | MMDetection>=2.14.0, <3.0.0 |
0.6.0 | mmcv-full>=1.3.8, <1.4.0 | MMDetection>=2.14.0, <3.0.0 |
可见对于mmcv的要求严格低于2.x版本,mmdet严格低于3.x,我们装最新的肯定会出现问题。
- 称呼
该文档的称呼是存在问题的,因为发展至今已经不再用mmcv-full作为mmcv完整版的称呼,可能会误导读者。
- 安装方法
原文的安装方法存在问题,首先按照原文的方法安装mmcv和mmdet版本和方法都对不上,会造成非常多的问题。另一方面,依赖的相关版本在符合的区间内的自由组合并不一定完全有效。
麻烦的是,MMTracking最新的release版本停留在2022年10月,距离太远,很多依赖的安装方式已经发生了变化。
1.2 问题解决办法和分析
如果follow了官方文档的做法,很可能会导致如下一些问题。
1.2.1 编译时C++版本不匹配
产生相当多的警告和报错,其中关键如下:
1 | ...C++17 or later compatible compiler is required to use ATen... |
主要原因是:
- 编译低版本的MMCV;
- 使用了高版本的PyTorch。PyTorch 2.x 版本开始采用C++17编译,MMCV的低版本用C++14编译。
临时解决方法:
- 在MMCV源码的
setup.py
中找到-std=c++14
全部修改为-std=c++17
。具体参考issue:点击此处
1.2.2 缺少模块:No module named ‘mmcv._ext’
一般在import mmcv的相关库时会报此错误,官方doc是建议卸载尝试重新编译,其实一般没有效果。
解决办法:换其他版本的mmdet、mmcv和PyTorch,不要纠结某个版本。
解决思路:查看mim的报错提示,解决MMDet和MMTraking对MMCV的版本依赖,找到版本的兼容交集。
2. 可用环境
下面简单介绍笔者可用的环境:
- PyTorch:torch==1.11.0+cu113
- Python:3.7
- MMCV:1.6.0
- MMDetection:2.24.0
安装指令如下:
PyTorch:
1 | pip install torch==1.11.0+cu113 torchvision==0.12.0+cu113 torchaudio==0.11.0 --extra-index-url https://download.pytorch.org/whl/cu113 |
首先安装Openmim用于便捷安装OpenMMLab的工具箱:
1 | pip install -U openmim |
直接安装MMCV和MMDetection:
1 | mim install 'mmcv-full==1.6.0' |
这里解释一下,之所以还要用mmcv-full
是因为安装mmdet的时候与mim自动安装的mmcv
冲突,总之是一个很麻烦的事情。
安装MMTracking:
1 | git clone https://github.com/open-mmlab/mmtracking.git |
检查MMTracking安装,通过运行例程:
1 | python demo/demo_mot_vis.py configs/mot/deepsort/sort_faster-rcnn_fpn_4e_mot17-private.py --input demo/demo.mp4 --output mot.mp4 |