C-COT目标跟踪技术:超越相关滤波的连续卷积操作

需积分: 9 2 下载量 189 浏览量 更新于2024-07-16 收藏 2.61MB PDF 举报
"C-COT_VOT16_slides.pdf是目标跟踪领域内一篇重要论文C-COT的作者在报告中使用的幻灯片,主要探讨了超越相关滤波器(Beyond Correlation Filters)在视觉追踪中的应用,特别是学习连续卷积操作符(Learning Continuous Convolution Operators)对提升追踪性能的重要性。" 这篇PPT详细介绍了相关滤波器(Correlation Filters,简称DCF)在视觉追踪领域的应用和其局限性。DCF是一种常用的目标检测和识别方法,自2014年以来,已经成为了许多顶级追踪算法(如KCF、DSST、HCF、SRDCF、Staple等)的基础,展示了其在对象识别和检测中的强大能力。 然而,DCF方法存在一个关键限制:它依赖于单分辨率特征图。这种结构导致了输出得分的粗糙,即在保持高分辨率时,模型的不变性较低,而在提高不变性时,又牺牲了分辨率。具体来说,浅层的卷积层提供了较高的空间分辨率但低的特征不变性,而深层的卷积层则相反,具有较高的不变性但低的分辨率。这成为了一个问题,因为理想情况下,我们希望同时拥有高分辨率和高不变性。 为了解决这一问题,PPT提出了两个可能的解决方案,但它们各自都有缺点。首先,尝试通过显式重采样来融合不同分辨率的信息,但这可能导致失真、信息损失以及冗余数据。其次,使用独立的DCF并后期融合,但这可能导致次优结果,因为忽略了不同层之间的潜在相关性。 C-COT论文的作者马丁·丹尼尔延(Martin Danelljan)、安德烈亚斯·罗宾逊(Andreas Robinson)、法哈德·沙赫巴兹·汗(Fahad Shahbaz Khan)和迈克尔·费尔斯伯格(Michael Felsberg)提出了一种超越DCF的方法,即学习连续卷积操作符,以克服上述限制。这种方法旨在通过更灵活和精确地处理特征图的分辨率和不变性,来提升目标跟踪的性能和鲁棒性。 这篇PPT深入讨论了DCF在视觉追踪中的作用,以及如何通过改进方法来克服其局限性,为后续的视觉追踪研究提供了重要的理论基础和实践指导。
2023-06-11 上传
2023-06-11 上传
2023-06-11 上传
2023-06-11 上传

下列代码出现nan int错误,请解决:float smoothCot() { float err = -1; cogs.clear(); v_end = mesh.vertices_end(); // for (v_it = mesh.vertices_begin(); v_it != v_end; ++v_it) { cog[0] = cog[1] = cog[2] = valence = 0.0; //cout << valence<<"1" << endl; for (vv_it = mesh.vv_iter(*v_it); vv_it.is_valid(); ++vv_it) { double cot_weight = 0.0; MyMesh::HalfedgeHandle heh = mesh.find_halfedge(*v_it, *vv_it); if (!mesh.is_boundary(heh)) { MyMesh::HalfedgeHandle prev_heh = mesh.prev_halfedge_handle(heh); MyMesh::HalfedgeHandle next_heh = mesh.next_halfedge_handle(heh); MyMesh::VertexHandle prev_vh = mesh.to_vertex_handle(prev_heh); MyMesh::VertexHandle next_vh = mesh.to_vertex_handle(next_heh); MyMesh::Point prev_p = mesh.point(prev_vh); MyMesh::Point curr_pi = mesh.point(*v_it); MyMesh::Point curr_pj = mesh.point(*vv_it); MyMesh::Point next_p = mesh.point(next_vh); double cot_alpha = cot(curr_pi - prev_p, curr_pj - prev_p); double cot_beta = cot(curr_pi - next_p, curr_pj - next_p); cot_weight = cot_alpha + cot_beta; //cout << cot_weight<<"2" << endl; } cog += cot_weight *( mesh.point(*vv_it)-mesh.point(*v_it)); valence += cot_weight; //cout << valence<<"3" << endl; } cogs.push_back(cog / valence); } for (v_it = mesh.vertices_begin(), cog_it = cogs.begin(); v_it != v_end; ++v_it, ++cog_it) { if (!mesh.is_boundary(*v_it)) { MyMesh::Point p = mesh.point(*v_it); //*cog_it += mesh.point(*v_it); err = max(err, (p - *cog_it).norm()); mesh.set_point(*v_it, *cog_it); } } return err; }

2023-06-11 上传