IOU 目标跟踪其一:IOU Tracker

IOU MOT 其一:IOU Tracker


Reference:

  1. High-Speed Tracking-by-Detection Without Using Image Information

1. 介绍

IOU Tracker 是 2017 年提出的一种不需要图像信息的简单高效的跟踪模型,它在 DETRAC 车辆跟踪数据集可以轻松运行到 100K fps。

它主要基于两个假设:

  1. 检测器对每帧要跟踪的每个物体都产生一个检测,也就是说,在检测中 没有/只有很少 的间断;
  2. 在连续帧中检测一个物体有高度重叠的 I O U IOU IOU,这在足够高的帧率是常见情况。

文内使用的 I O U IOU IOU 测量方式:
IOU ⁡ ( a , b ) = Area ⁡ ( a ) ⋂ Area ⁡ ( b )  Area  ( a ) ⋃ Area ⁡ ( b ) . \operatorname{IOU}(a, b)=\frac{\operatorname{Area}(a) \bigcap \operatorname{Area}(b)}{\text { Area }(a) \bigcup \operatorname{Area}(b)} . IOU(a,b)= Area (a)Area(b)Area(a)Area(b).

如果这两个条件都满足,跟踪将变得没那么重要,即使不使用图像信息也能够完成。

2. 算法内容

文中提出的 I O U IOU IOU 跟踪器,如果满足一定的阈值 σ I O U σ_{IOU} σIOU,它通过将最高的 I O U IOU IOU 与前一帧的最后一个检测相关联来继续跟踪。所有没有分配到现有跟踪的探测将开始一个新的跟踪。所有没有被分配的检测的跟踪将被干掉。
在这里插入图片描述通过滤除所有长度小于 t m i n t_{min} tmin 的跟踪和一次都没评分在 σ h σ_h σh 以上的检测,进一步提高了性能。较短的跟踪被删除,因为它们通常来源于假阳性,普遍会增加输出的混乱。要求跟踪至少有一个高分检测,以确保跟踪是一个真正感兴趣的对象。

详细的方法描述如下图所示,其中 D f D_f Df 表示在第 f f f 帧的检测, d j d_j dj 表示在那一帧的第 j j j 个检测结果, T a T_a Ta 活跃的(active)跟踪, T j T_j Tj 完成的跟踪, F F F 序列中帧的个数:
在这里插入图片描述
流程:

  1. 对于当前帧,首先利用阈值 σ l \sigma_l σl 进行初筛,得到输入检测集 D D D;
  2. 对于每个活跃的跟踪,找到和它有最大 I O U IOU IOU 的该帧检测框,如果该 I O U IOU IOU 大于 σ I O U \sigma_{IOU} σIOU,将检测 d b e s t d_{best} dbest 加入到当前活跃跟踪 t i t_i ti 中,随后将该检测框从当前帧检测集 D f D_f Df 内删去;而如果最大的 I O U IOU IOU 小于 σ I O U \sigma_{IOU} σIOU,这时如果该活跃跟踪的历史最高检测评分大于 σ h \sigma_h σh 且跟踪的时间长度大于 t m i n t_{min} tmin,则将 t i t_{i} ti 加入到 T f T_f Tf 中,否则将从 T a T_a Ta 中删去 T a T_a Ta
  3. 对于没有匹配到的检测,将其初始化为新跟踪并添加到 T a T_a Ta 中;
  4. 在上述循环完毕后,对激活跟踪 T A T_A TA 中的每个跟踪做判断,如果满足跟踪的历史最高检测评分大于 σ h \sigma_h σh 且跟踪的时间长度大于 t m i n t_{min} tmin,则将该跟踪 t i t_i ti 加入到 T f T_f Tf 中。

文章跳转:
IOU 目标跟踪其二:VIOU Tracker

  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
YOLOv5是一种基于深度学习的目标检测算法,它可以实现目标的检测和跟踪。下面是一个简单的示例,展示了如何使用YOLOv5实现目标检测和跟踪: ```python import torch import cv2 from yolov5.models import * from yolov5.utils import * # 加载YOLOv5模型 model = attempt_load('yolov5s.pt', map_location=torch.device('cpu')).autoshape() # 加载预训练权重 weights = 'yolov5s.pt' device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.load_state_dict(torch.load(weights, map_location=device)['model']) # 设置模型为推理模式 model = model.to(device).eval() # 加载类别名称 class_names = load_classes('coco.names') # 初始化跟踪器 tracker = cv2.TrackerKCF_create() # 打开摄像头 video = cv2.VideoCapture(0) # 读取视频帧并进行目标检测和跟踪 while True: ret, frame = video.read() if not ret: break # 目标检测 img = torch.from_numpy(frame).to(device) img = img.float() / 255.0 img = img.unsqueeze(0) pred = model(img)[0] # 跟踪目标 boxes = non_max_suppression(pred, conf_thres=0.3, iou_thres=0.45) if len(boxes) > 0: box = boxes[0] x, y, w, h = int(box[0]), int(box[1]), int(box[2] - box[0]), int(box[3] - box[1]) tracker.init(frame, (x, y, w, h)) # 更新跟踪器 success, box = tracker.update(frame) if success: x, y, w, h = [int(v) for v in box] cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) # 显示结果 cv2.imshow('Object Detection and Tracking', frame) if cv2.waitKey(1) == ord('q'): break # 释放资源 video.release() cv2.destroyAllWindows() ``` 这段代码使用了YOLOv5模型进行目标检测,然后使用OpenCV中的`TrackerKCF_create()`函数进行目标跟踪。代码首先加载YOLOv5模型和预训练权重,然后初始化跟踪器并打开摄像头。在每个视频帧上,代码将图像输入到YOLOv5模型中进行目标检测,然后根据检测结果初始化或更新跟踪器的状态。最后,代码显示带有检测和跟踪结果的视频帧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泠山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值