基于 Ultralytics + DeepSORT 的多目标跟踪与改进(支持YOLO全系列,重点车跟踪)

作品简介

介绍


车流统计是智能交通分析的基础,流量、流速、行驶轨迹都建立在"每辆车被持续稳定跟住"之上,这一步就是多目标跟踪(MOT),业界通用方案是"检测器 + 跟踪器"两段式。两段式里有一条经典路线 DeepSORT:只保留高置信度检测框,给每个框提取外观特征(ReID),靠"运动预测 + 外观相似度"把前后帧的目标关联起来。本项目重点跟的是车——而 DeepSORT 是在行人数据集上设计调参的(外观模型直接用行人重识别权重),车辆场景的车流密集交叉、转弯减速、遮挡形态都与行人不同,直接套用会遇到车辆场景特有的问题。

实际跑车流视频暴露出三个典型问题:刚建档的轨迹一帧漏检就被删除,检测恢复后只能换新 ID;轨迹丢失 2~3 帧后外观匹配失败,IoU 营救轮又进不去(原版只允许丢失 1 帧的轨迹参加),目标断裂换 ID;短暂遮挡时画面框闪断(输出层只给丢失后 1 帧的惯性补位)。它们分别对应后文的三项改进。

本项目的目标:让车辆目标的轨迹 ID 保持稳定——不频繁切换,短暂丢失(漏检、遮挡)后能找回原 ID 继续跟踪。

检测用 Ultralytics YOLO,跟踪用 DeepSORT,针对车流场景做了三项实测有效的跟踪改进(以命令行参数提供,默认值即改进值)。本文按以下顺序介绍:整体架构、检测器选型与参数、DeepSORT 轨迹算法流程与三项改进、改进测试方法、结果对比数据、四个测试分析工具的完整用法(附实际命令)。

1、整体架构

1.1、技术栈

1.2、数据流水线

视频帧(每 N 帧) → Detector.detect()      → Nx6 检测数组 [x1, y1, x2, y2, conf, cls]
                  → xyxy_to_xywh()         → 中心点格式 [xc, yc, w, h] + 置信度 + 类别
                  → DeepSort.update()      → ReID 特征提取 → 级联匹配 → 轨迹输出 Nx7 [x1, y1, x2, y2, cls, track_id, conf]
                  → draw_tracking()        → 绘制边框 + ID + 帧信息
                  → 写入输出视频 + 逐帧结果 txt

设计要点三条:

  1. 检测与跟踪彻底解耦:检测端 Detector.detect() 输出标准 Nx6 数组,跟踪端 DeepSort.update() 只认"中心点框 + 置信度 + 类别 + 原图"——只要检测器能产出"框 + 置信度",不限 YOLO、不限框架,转成这个格式接上接口就能用,跟踪端代码零改动。换 YOLO 系模型只改 --model 一个参数。
  2. 跳帧不解码:--frame-interval 控制每隔 N 帧处理一次,跳过的帧用 grab 只推进不解码(零解码成本),需要处理的帧才 retrieve 解码——同一套参数可以在"逐帧"与"抽帧"两种喂帧方式下跑,输出视频帧率按比例缩放保持时间轴一致。
  3. 每次运行全量落盘:输出 txt 逐帧记录每个检测框的去向(配上了哪条轨迹 / 被置信度门槛过滤),文件头写入本次全部配置参数,后续所有分析、人工核查、基线与改进对比都基于这份 txt,实验完全可追溯。

1.3、目录结构

AiMotDeepSort/
├── detector.py                  # YOLO 检测器封装类(加载模型、设备选择、帧推理、解析结果)
├── README.md                    # 工程说明(环境安装、快速开始、文档导航)
│
├── 📁 deep_sort/                # DeepSORT 核心实现(原版源码 + 接口封装)
│   ├── deep_sort.py             # DeepSort 主类(检测 → 轨迹接口 + 输出组装)
│   ├── __init__.py              # 工厂函数 DeepSortTracker(args) + xyxy_to_xywh 格式转换
│   │
│   ├── 📁 sort/                 # 轨迹算法核心
│   │   ├── tracker.py           # 主跟踪器(置信度过滤 → 级联匹配 + IoU 匹配 → 建档结算)
│   │   ├── kalman_filter.py     # 卡尔曼滤波器(8 维状态)
│   │   ├── track.py             # 单条轨迹(状态机 Tentative → Confirmed → Deleted)
│   │   ├── nn_matching.py       # 外观特征最近邻距离度量(余弦距离)
│   │   ├── detection.py         # 检测框 + 特征封装
│   │   ├── iou_matching.py      # IoU 代价计算
│   │   ├── linear_assignment.py # 匈牙利分配 / 级联匹配
│   │   ├── preprocessing.py     # 检测框 NMS
│   │   └── __init__.py
│   │
│   ├── 📁 deep/                 # ReID 外观特征提取
│   │   ├── feature_extractor.py # Extractor(默认加载 ckpt.t7)/ FastReIDExtractor(备选)
│   │   ├── model.py             # 特征网络(resnet18 结构 → 128 维)
│   │   ├── resnet.py            # ResNet 骨干
│   │   └── 📁 checkpoint/       # ReID 权重目录
│   │       ├── ckpt.t7                # 默认外观权重(--reid-ckpt 默认值,本项目测试全部用它)
│   │       ├── original_ckpt.t7       # 原版权重备份(当前代码未引用)
│   │       ├── market_bot_R50.pth     # FastReID 备选权重(当前代码未引用)
│   │       └── resnet18-5c106cde.pth  # torchvision ResNet18 ImageNet 预训练骨干权重
│
├── 📁 ultralytics/              # 内置 Ultralytics YOLO 库(8.4.41,仅用于检测,免安装)
│
├── 📁 utils/                    # 工具函数
│   ├── __init__.py
│   ├── draw.py                  # draw_tracking 轨迹绘制(边框、ID、帧信息)
│   ├── logger.py                # 日志封装(控制台 + logs/app.log 双通道)
│   ├── paths.py                 # 路径工具(工程目录路径配置)
│   └── config.py                # 配置读取(读 configs/system_config.json)
│
├── 📁 configs/                  # 配置文件目录
│   └── system_config.json       # 系统配置(日志级别等)
│
├── 📁 logs/                     # 运行日志目录
│   └── app.log                  # 日志输出(utils/logger.py 写入)
│
├── 📁 test/                     # 测试与分析脚本
│   ├── test_deepsort.py         # 跟踪主测试脚本(检测 → 跟踪 → 可视化 → 输出)
│   ├── frame_viewer.py          # 逐帧看片器(结果 txt 叠加原视频逐帧查看)
│   ├── analyze_track_results.py # 单次运行分析(7 张图 + markdown 报告)
│   ├── analyze_track_compare.py # 两次运行对比(参数对比表 + 8 张对比图 + 报告)
│   └── 📁 output/               # 运行输出目录(deepsort_<模型>_<视频>_<时间戳> 运行目录 + 两次对比目录,含视频 / txt / 图表 / 报告)
│
├── 📁 model/                    # 模型文件目录
│   ├── yolov8s.pt               # YOLOv8s 检测模型(默认模型,全部基线与改进数据基于它)
│   ├── yolo11s.pt               # YOLO11s 检测模型
│   ├── yolov5su.pt              # YOLOv5su 检测模型
│   └── yolo26s.pt               # YOLO26s 检测模型
│
├── 📁 video/                    # 视频文件目录
│   ├── dense.mp4                # 密集交叉场景测试视频
│   └── turn.mp4                 # 转弯减速场景测试视频
│
└── 📁 doc/                      # 项目文档目录
    ├── 项目介绍.md               # 工程详解(架构、参数、算法、改进、结果、工具用法)
    ├── 项目结构.md               # 本文件
    ├── deepsort源码分析.md       # DeepSORT 逐类逐方法源码解读
    ├── 卡尔曼滤波预测过程.md      # 预测 / 投影 / 修正 / 建档四函数实际数字推算
    ├── deepsort改进点.md         # 三项改进的完整七段文档
    └── *.png                    # 文档插图

2、改进

改进一:IoU 匹配容忍丢失帧数(–iou-match-tolerance)

改进二:确认阶段容忍丢失帧数(–tentative-tolerance)


3、测试


4、详细介绍请看文章

【AI视觉软件 03】基于 Ultralytics + DeepSORT 的多目标跟踪与改进(支持YOLO全系列,重点车跟踪)-CSDN博客

5、购买获得以下内容

out 是测试输出的视频,如需要查看原测试可以下载,分开上传是为了减少压缩包大小,加快下载速度。


🔥购买必看!超重要注意事项,千万别踩雷!🔥

1️⃣ 作品即买即用,权限秒开通⏳!由于软件高度可复制,一旦购买成功,立刻授予使用权限,拒绝退货和退款!所以宝贝们,购买前一定要认真确认,别买错了哦,避免资金浪费💸


🚨遇到安装问题或者程序Bug,可QQ留言给我,看到第一时间处理🚨







创作时间: