深度排序与 PyTorch
更新(2020-01-01)
变更
- 修复漏洞
- 重构代码
- 通过在 GPU 上添加 nms 加速检测
更新(07-22)
变更
- 修复漏洞(感谢 @JieChen91 和 @yingsen1 报告漏洞)。
- 使用批量特征提取每一帧,导致速度小幅提升。
- 改进代码。
进一步改进方向
- 在特定数据集上训练检测器而不是官方数据集。
- 在行人数据集上重新训练 REID 模型以获得更好的性能。
- 用更先进的检测器替换 YOLOv3。
更新(2024-05-23)
追踪
-
在 deep 文件夹的显著特征提取网络中添加了 resnet 网络
-
修复了
preprocessing.py
中的 NMS 漏洞,还修复了 sort 文件夹中kalmen_filter.py
中的协方差计算漏洞
检测
-
添加了 YOLOv5 检测器,调整了接口,添加了 YOLOv5 相关的 yaml 配置文件。代码引用自该仓库:YOLOv5-v6.1。
-
删除了原始 YOLOv5 中的
train.py
、val.py
和detect.py
。本仓库只需要 yolov5x.pt。
深度排序
- 添加了追踪目标类别,可以同时显示类别和追踪 ID。
更新(2024-05-28)
分割
- 添加了 Mask RCNN 实例分割模型,代码引用自该仓库:mask_rcnn 。视觉结果保存在
demo/demo2.gif
中。 - 类似于 YOLOv5,删除了
train.py
、validation.py
和predict.py
。本仓库只需要 maskrcnn_resnet50_fpn_coco.pth。
深度排序
- 添加了追踪目标掩码,可以同时显示类别、追踪 ID 和目标掩码。
最新更新(2024-06-09)
特征提取网络
- 在 PyTorch 中使用
nn.parallel.DistributedDataParallel
支持多 GPU 训练。 - 为更好地使用
train.py
和train_multiGPU.py
添加了 GETTING_STARTED.md。
更新了 README.md
以包含之前的更新内容(#更新(2024-05-23) 和 #更新(2024-05-28))。
欢迎任何对本仓库的贡献!
介绍
这是一个实现 MOT 跟踪算法的深度排序项目。深度排序基本与排序相同,但增加了一个 CNN 模型来提取由检测器框定的人体部分的图像特征。这个 CNN 模型实际上是一个 RE-ID 模型,PAPER 中使用的检测器是 FasterRCNN,原始源码在 HERE。 然而,在原始代码中,CNN 模型是用 tensorflow 实现的,我不熟悉这个库。因此,我用 PyTorch 重新实现了这个 CNN 特征提取模型,并对该模型进行了些许修改。此外,我使用 YOLOv3 生成边界框,而不是 FasterRCNN。
依赖
- python 3 (不确定是否支持 python2)
- numpy
- scipy
- opencv-python
- sklearn
- torch >= 1.9
- torchvision >= 0.13
- pillow
- vizer
- edict
- matplotlib
- pycocotools
- tqdm
快速开始
- 检查已安装所有依赖项
pip install -r requirements.txt
对于中国用户,可以指定 pypi 源以加速安装:
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
- 克隆这个仓库
git clone git@github.com:ZQPei/deep_sort_pytorch.git
- 下载检测器参数
# 如果在这个仓库中使用 YOLOv3 作为检测器
cd detector/YOLOv3/weight/
wget https://pjreddie.com/media/files/yolov3.weights
wget https://pjreddie.com/media/files/yolov3-tiny.weights
cd ../../../
# 如果在这个仓库中使用 YOLOv5 作为检测器
cd detector/YOLOv5
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5s.pt
或
wget https://github.com/ultralytics/yolov5/releases/download/v6.1/yolov5m.pt
cd ../../
# 如果在这个仓库中使用 Mask RCNN 作为检测器
cd detector/Mask_RCNN/save_weights
wget https://download.pytorch.org/models/maskrcnn_resnet50_fpn_coco-bf2d0c1e.pth
cd ../../../
- 下载 deepsort 特征提取网络的权重
# 如果在 PAPER 中使用原模型
cd deep_sort/deep/checkpoint
# 从以下链接下载 ckpt.t7 到此文件夹
https://drive.google.com/drive/folders/1xhG0kRH1EX5B9_Iz8gQJb7UNnn_riXi6
cd ../../../
# 如果在这个仓库中使用 resnet18
cd deep_sort/deep/checkpoint
wget https://download.pytorch.org/models/resnet18-5c106cde.pth
cd ../../../
- (可选) 编译 nms 模块如果在这个仓库中使用 YOLOv3 作为检测器
cd detector/YOLOv3/nms
sh build.sh
cd ../../..
注意:
如果编译失败,最简单的方法是 升级 PyTorch >= 1.1 和 torchvision >= 0.3,你可以避免大部分编译问题,这些问题通常是由于 gcc 版本过低
或 缺少库
导致的。
- (可选) 准备第三方子模块
这个库通过提供一个 fast-reid 适配器支持 bagtricks、AGW 和其他主流 ReID 方法。
然后准备捆绑的 fast-reid,并按照其 README 中的说明进行安装。
请参考 configs/fastreid.yaml
以获取使用 fast-reid 的样本。参见 Model Zoo 获取可用的方法和训练模型。
这个库通过提供 MMDetection 适配器支持 Faster R-CNN 和其他主流检测方法。
然后准备捆绑的 MMDetection,并按照其 README 中的说明进行安装。
请参考 configs/mmdet.yaml
以获取使用 MMDetection 的样本。参见 Model Zoo 获取可用的方法和训练模型。
运行
git submodule update --init --recursive
- 运行演示
usage: deepsort.py [-h]
[--fastreid]
[--config_fastreid CONFIG_FASTREID]
[--mmdet]
[--config_mmdetection CONFIG_MMDETECTION]
[--config_detection CONFIG_DETECTION]
[--config_deepsort CONFIG_DEEPSORT] [--display]
[--frame_interval FRAME_INTERVAL]
[--display_width DISPLAY_WIDTH]
[--display_height DISPLAY_HEIGHT] [--save_path SAVE_PATH]
[--cpu] [--camera CAM]
VIDEO_PATH
# yolov3 + deepsort
python deepsort.py [VIDEO_PATH] --config_detection ./configs/yolov3.yaml
# yolov3_tiny + deepsort
python deepsort.py [VIDEO_PATH] --config_detection ./configs/yolov3_tiny.yaml
# yolov3 + deepsort 在摄像头上
python3 deepsort.py /dev/video0 --camera 0
# yolov3_tiny + deepsort 在摄像头上
python3 deepsort.py /dev/video0 --config_detection ./configs/yolov3_tiny.yaml --camera 0
# yolov5s + deepsort
python deepsort.py [VIDEO_PATH] --config_detection ./configs/yolov5s.yaml
# yolov5m + deepsort
python deepsort.py [VIDEO_PATH] --config_detection ./configs/yolov5m.yaml
# mask_rcnn + deepsort
python deepsort.py [VIDEO_PATH] --config_detection ./configs/mask_rcnn.yaml --segment
# fast-reid + deepsort
python deepsort.py [VIDEO_PATH] --fastreid [--config_fastreid ./configs/fastreid.yaml]
# MMDetection + deepsort
python deepsort.py [VIDEO_PATH] --mmdet [--config_mmdetection ./configs/mmdet.yaml]
使用 --display
以启用每帧图像显示。
结果将保存在 ./output/results.avi
和 ./output/results.txt
。
所有上述文件还可以从百度网盘获取!
链接:BaiduDisk
密码:fbuw
训练 RE-ID 模型
检查 GETTING_STARTED.md 开始使用标准基准或 自定义数据集 进行训练。
演示视频和图像