【目标跟踪】|UpdateNet

Learning the Model Update for Siamese Trackers

文章标题:《Learning the Model Update for Siamese Trackers》
文章地址:[1] arXiv,[2] ICCV2019 openaccess
github地址:https://github.com/zhanglichao/updatenet

单目标跟踪方法主要有两种范式:一种是用 Siamese 深度神经网络,一种是 tracking-by-detection。

Siamese 的方法从当前帧提取被跟踪物体的特征,作为模板(template),在下一帧利用该模板对目标进行定位。由于目标外观的变化、各种类型的遮挡、干扰物的存在、运动模糊、照明变化等环境因素的影响,对跟踪效果带来非常大的挑战。

问题

在早期的 Siamese 跟踪器里,第一帧就对目标模板进行初始化,后面都固定使用这个模板进行跟踪。然而实际任务中目标外观变化通常很明显,如果不能有效地更新目标模板,很快就会跟踪失败。

为了解决这个问题,目前已经有人做了一些简单的更新策略,通过固定学习率的移动平均方法,对目标模板进行线性更新:
在这里插入图片描述
T i表示从当前帧图像利用上一帧的跟踪结果提取的模板。
T~i-1为上一帧保留的动态模板。
T~i表示当前帧的更新的动态模板。

在 DCF 这类跟踪器里,T 对应于相关滤波核(correlation filter)。在 Siamese 这类跟踪器里,T 是 backbone 提取的特征。
我们认为这种方法有一些缺点:
对于所有视频,它都用一个固定的更新率。但是不同情况下,对于更新的需求是不一样的,要考虑的因素很复杂。例如相机运动模糊,不同时刻的动态变化等。
这个更新率对于模板的所有空间维度(包括通道维度)上也是固定的。但有时候我们只需要更新模板的一部分,例如发生遮挡时。
跟踪器不能从累计漂移中恢复过来。随着模板的更新,我们失去了 T 0 的原始信息,而第一帧的模板 T 0 才是我们最开始想要跟踪的目标。
公式(1)只是一个非常简单的线性组合,但是我们需要灵活的更新机制,这在目标外观变化复杂时非常有必要。用更复杂的组合函数也许会好点。

方法

我们提出了一个模型,它学习一个自适应的更新策略。
由于我们用的是 Siamese 的跟踪方法,T 表示目标的深度特征模板。
我们根据以下公式来更新模板:
在这里插入图片描述
UpdateNet ϕ 是一个学习到的函数,用于计算更新的模板,它有3个输入:
T0GT :初始模板,提供了高度可靠的信息,增强了对于后期跟踪漂移的鲁棒性。
T~i-1为上一帧保留的动态模板。
T i​ :当前模板 ,根据上帧结果在该位置抠出来的图像再经过 backbone 提取成的特征。

在第一帧的时候三帧一致
在这里插入图片描述

训练

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标跟踪是指通过计算机视觉技术,识别并跟踪视频中的特定目标。在Python中,可以使用OpenCV库来实现目标跟踪。首先,需要读取视频或打开摄像头进行实时录像。可以使用`cv2.VideoCapture()`函数来读取视频流,并使用`cv2.legacy.TrackerCSRT_create()`函数创建CSRT算法的跟踪器。然后,通过调用跟踪器的`init()`方法初始化跟踪器,并传入第一帧的图像和目标框。接下来,可以通过循环读取每一帧的图像,并调用跟踪器的`update()`方法来更新跟踪器的位置。如果跟踪成功,可以在图像上绘制目标框来显示跟踪结果。最后,记得释放视频流和关闭窗口。下面是一个实现目标跟踪的Python代码示例: ```python import cv2 tracker = cv2.legacy.TrackerCSRT_create() # 创建CSRT算法的跟踪器 cap = cv2.VideoCapture('11.mp4') # 读取视频流 ret, frame = cap.read() # 读取第一帧 bbox = cv2.selectROI('A', frame, fromCenter=False, showCrosshair=True) # 选择目标框 tracker.init(frame, bbox) # 初始化跟踪器 while True: ret, frame = cap.read() # 读取每一帧 ok, box = tracker.update(frame) # 更新跟踪器 if ok: (x, y, w, h) = [int(v) for v in box] cv2.rectangle(frame, pt1=(int(x), int(y)), pt2=(int(x) + int(w), int(y) + int(h)), color=(0, 255, 0), thickness=2) # 绘制目标框 cv2.imshow('A', frame) # 显示视频流 if cv2.waitKey(50) == ord(' '): # 等待50毫秒或按下空格键退出 break # 释放视频流和窗口 cap.release() cv2.destroyAllWindows() ``` 这段代码使用CSRT算法对目标进行跟踪,通过选择目标框来初始化跟踪器,并在每一帧中更新跟踪器的位置。如果跟踪成功,会在图像上绘制目标框以展示跟踪结果。你可以根据自己的需求选择不同的跟踪算法和调整参数。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [python进阶——人工智能实时目标跟踪](https://blog.csdn.net/lbcyllqj/article/details/128857299)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [目标跟踪实验(计算机视觉)通过python 语言编程设计跟踪算法,实现目标行人的选择,跟踪。促进学生理解并...](https://blog.csdn.net/qq_48527460/article/details/124131114)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值