Introduction
mmtracking是基于pytorch的综合感知工具箱,可以用来完成视频目标检测、单目标/多目标跟踪,视频分割等任务。
官方网址:mmtracking-dev-1.x
Installation
电脑配置:cuda 11.1 + NVIDIA V100
mmtraking版本:dev-1.x(从github上dev-1.x branch下载)
官方安装教程
实测有效指令:
conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab
pip install torch==1.9.1+cu111 torchvision==0.10.1+cu111 torchaudio==0.9.1 -f https://download.pytorch.org/whl/torch_stable.html
pip install mmengine==0.1.0
pip install mmcv==2.0.0rc1 -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9/index.html
pip install mmdet==3.0.0rc0
cd .\Desktop\mmtracking-1.x
pip install -r requirements/build.txt
pip install -v -e .
pip install git+https://github.com/JonathonLuiten/TrackEval.git
pip uninstall mmcls
pip install mmcls==1.0.0rc0
python demo/demo_mot_vis.py configs/mot/deepsort/deepsort_faster-rcnn_r50_fpn_8xb2-4e_mot17halftrain_test-mot17halfval.py --input demo/demo.mp4 --output mot.mp4
注意事项:
- 不同mmcv版本对cuda和torch版本有不同要求,请参考官方文档
- 按照官网代码安装后mmcls可能版本过高,需要卸载后安装1.0.0rc0版本
- mot evaluate工具需要从github上面git代码,有可能要配置全局代理。参考指令:
git config --global http.proxy 127.0.0.1:xxx(代理端口)
- 官网代码demo指令中文件名错误需要更改
Train a new detector on custom dataset
- 准备数据集:mmtracking仅支持coco格式的数据集,所以需要把自己的数据集标注形式改为coco格式,在
./tools/dataset_converters/
文件夹下官方已经提供了一些其他数据集转换为coco格式的代码。处理好后的数据集应该是如下格式:
|——dataset
| |——annotations
| |——annotations.json(coco格式)
| |——images
| |——001.jpg
| ...
| |——xxx.jpg
- 修改配置文件
查询配置文件的命令:
python ./tools/misc/print_config.py ./configs/det/xxx.py(配置文件名)
mmtrakcing的配置文件逻辑:在./configs/
文件夹下包括不同部分的配置文件,例如在./configs/det/
文件夹下是检测器的配置文件,而在./configs/tracktor/
文件夹下是跟踪算法的配置文件。所有的配置文件可以采用继承的方法继承其他配置文件的配置,继承方法是在py文件中加入
_base_=['./configs/xxx']
例如上述代码表示该文件继承./configs/_base_
文件夹。官方教程给出了配置文件的命名规则。建议在det/
文件夹下新建自己的配置文件,继承原有的配置文件后修改。
3. 训练代码
注意:官方给出的代码部分调用的模块已经不能使用,例如set_random_seed
方法已经移到mmengine
中。
import os.path as osp
import mmengine
from mmengine.runner import set_random_seed, Runner
from mmengine.utils import mkdir_or_exist
cfg = mmengine.Config.fromfile('./configs/det/xxx.py') #配置文件路径
#修改配置
cfg.data_root = 'data/xxx' #数据集路径
cfg.train_dataloader.batch_size = 1
cfg.train_dataloader.dataset.data_root = 'data/xxx/'
cfg.train_dataloader.dataset.ann_file = 'annotations/xxx.json' #标注文件路径
cfg.train_dataloader.dataset.data_prefix = dict(img='images/') #图片数据文件夹名称
cfg.train_dataloader.dataset.metainfo = dict(CLASSES=('’,)) #数据集类别
cfg.test_dataloader = cfg.test_cfg = cfg.test_evaluator = None
cfg.model.roi_head.bbox_head.num_classes = 7 #根据自己的数据集修改
cfg.val_dataloader = cfg.val_cfg = cfg.val_evaluator = None
cfg.visualizer.name = 'mot_visualizer'
cfg.work_dir = './trainMyDetector' #训练结果保存的位置
cfg.randomness = dict(seed=0, deterministic=False)
cfg.gpu_ids = range(1)
print(f'Config:\n{cfg.pretty_text}') #打印最终的配置文件
mkdir_or_exist(osp.abspath(cfg.work_dir))
runner = Runner.from_cfg(cfg)
runner.train()