SAMF

作者: 和蔼的zhxing | 来源:发表于2017-12-18 17:04 被阅读367次

    论文: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);
                     
    

    相关文章

      网友评论

          本文标题:SAMF

          本文链接:https://www.haomeiwen.com/subject/rcumwxtx.html