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的信息,我们很轻易了解到如下一些信息。

  1. 依赖

我们先看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,我们装最新的肯定会出现问题。

  1. 称呼

该文档的称呼是存在问题的,因为发展至今已经不再用mmcv-full作为mmcv完整版的称呼,可能会误导读者。

  1. 安装方法

原文的安装方法存在问题,首先按照原文的方法安装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
2
mim install 'mmcv-full==1.6.0'
mim install 'mmdet==2.26.0'

这里解释一下,之所以还要用mmcv-full是因为安装mmdet的时候与mim自动安装的mmcv冲突,总之是一个很麻烦的事情。

安装MMTracking:

1
2
3
4
git clone https://github.com/open-mmlab/mmtracking.git
cd mmtracking
pip install -r requirements/build.txt
pip install -e . -v

检查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

本站由 @JasonYip 使用 Stellar 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。