SAMF
时间:2022-06-09
本文章向大家介绍SAMF,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
论文:paper 结合了CN和KCF的多尺度扩展,看文章之前就听说很暴力,看了以后才发现原来这么暴力。 论文的前一半讲KCF,后一半讲做的实验,中间一点点大概半页的内容讲了怎么进行尺度适应。原文的3.3部分 这里有一张图:
SAMF
具体操作就是选择一系列尺度因子,源代码中选择了7个(比DSST中少多了),然后得到一个尺度金字塔,利用双线性插值resize到一个固定尺寸,然后分别送入KCF(结合了Fhog和CN特征),然后得到一个响应图,一共7层,然后找出响应的最大值,最大值属于哪个尺度就说明哪个尺度合适(直观上这样并没有说明道理),不过实验说明这样的效果还是不错的,这个算法取得了14年VOT竞赛的第二名。 可想而知这个速度是比较慢的,每一帧都要比KCF多花6倍的时间,如果加CN的话再多一点。 大神的专栏里比较了一下SAMF和DSST: 1:DSST有33个尺度,而SAMF只有7个尺度(还可以减少,并不存在训练样本减少的问题),所以DSST比较精细。 2:DSST是位置和尺度分开检测,所以只是分布最优,并不能保证位置是最优的,而SAMF是位置和尺度同时(全局)最优,而往往这两个结果是不一样的(全局和分布)。 3:DSST更具有创新性,也更灵活,但需要额外训练一个滤波器,SAMF只需要一个滤波器,但需要计算多次。 并不是DSST的效果一定就比SAMF好。
最后再吐槽一句,真是太暴力了,这种文章真是拼速度发出来的,不过公开源码了也可以说非常良心了。 核心代码截取出来放到这里:
search_size = [1 0.985 0.99 0.995 1.005 1.01 1.015];
for i=1:size(search_size,2)
tmp_sz = floor((target_sz * (1 + padding))*search_size(i));
param0 = [pos(2), pos(1), tmp_sz(2)/window_sz(2), 0,...
tmp_sz(1)/window_sz(2)/(window_sz(1)/window_sz(2)),0];
param0 = affparam2mat(param0);
patch = uint8(warpimg(double(im), param0, window_sz));
zf = fft2(get_features(patch, features, cell_size, cos_window,w2c));
%calculate response of the classifier at all shifts
switch kernel.type
case 'gaussian',
kzf = gaussian_correlation(zf, model_xf, kernel.sigma);
case 'polynomial',
kzf = polynomial_correlation(zf, model_xf, kernel.poly_a, kernel.poly_b);
case 'linear',
kzf = linear_correlation(zf, model_xf);
end
response(:,:,i) = real(ifft2(model_alphaf .* kzf)); %equation for fast detection
end
%target location is at the maximum response. we must take into
%account the fact that, if the target doesn't move, the peak
%will appear at the top-left corner, not at the center (this is
%discussed in the paper). the responses wrap around cyclically.
[vert_delta,tmp, horiz_delta] = find(response == max(response(:)), 1);
- 从MapX到MapXtreme2004[4]-标注AutoLabel
- Linux下锁定账号,禁止登录系统的设置总结
- 深度解析 TypeConverter & TypeConverterAttribute (一)
- 从MapX到MapXtreme2004[7]-对Table、Feature等的理解
- 互联网赋能传统装企 “科技撬动力巨大”
- Python接口自动化-8-测试报告
- http应用优化和加速说明-负载均衡
- linux负载均衡总结性说明(四层负载/七层负载)
- 从MapX到MapXtreme2004[6]-标点心得
- silverlight3中的"伪"3D
- 暴利驱动的疯狂游戏“外挂”:非法获利可达数百万;X-Agent 后门大升级,俄罗斯 APT28 间谍活动更为隐蔽
- Nginx+keepalived双机热备(主从模式)
- 即使不做程序员,也要学会像程序员一样去思考
- 这5项高科技 正在颠覆未来医疗
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 动手写简单的嵌入式操作系统二
- C++核心准则E.6:使用RAII防止资源泄露
- C++核心准则E.12: 当不可能或不愿意通过抛出异常退出函数时使用noexcept
- C++核心准则E.13: 直接拥有一个对象所有权时永远不要抛出异常
- C++核心准则E.14:使用根据目的设计的用户定制类型异常(非内置类型)
- C++核心准则E.16:析构函数,内存释放和swap操作永远不能失败
- Eclipse配合GDB和jlinkGDBServer仿真调试STM32
- 单片机程序构架
- 打卡群刷题总结0730——格雷编码
- 常用的vim配置,_vimrc文件
- 算法篇:链表之删除和为0的元素
- 算法篇:链表之反转链表
- 算法篇:链表之排序
- 算法篇:链表之删除链表中重复节点
- 小小验证码,作用可真不小!