【代码问题】SiameseFC

时间:2023-03-09 13:23:01
【代码问题】SiameseFC

【SiameseFC】: L Bertinetto, J Valmadre, JF Henriques, et al. Fully-convolutional siamese networks for object tracking.[C] //ECCV2016.

1. 网络的通道维数问题

网络的conv2的核的大小是5*5*48*256,但是conv1的输出是96通道。同样的情况发生在conv5,conv5的核的大小是3*3*192*256,但是conv4的输出是384通道

解释:推测采用了AlexNet中所用的group技术

按照AlexNet给出的Architecture,conv1的输出分成2个group(48+48),然后conv2的核分成两个部分(5*5*48*128和5*5*48*128),这样conv2的核总共是5*5*48*128+5*5*48*128=5*5*48*256

conv2的输出相对应与conv1的2个group就是2个128通道,合起来是256通道

相关参考:https://www.zhihu.com/search?type=content&q=imagenet%20group

以及           https://www.zhihu.com/question/52550307/answer/131299064

MatConvNet官方的Manual中也有相关的说明:

【代码问题】SiameseFC

【代码问题】SiameseFC

2. Tracker的运行结果明显出错,即使是跑deer这种很简单的sequence也出错。

这是一个很奇怪的现象。分析代码发现在tracker_eval.m中对responseMap上采样出错。

三个尺度进行上采样,有一个尺度的上采样后的Map图形明显扭曲了

具体是这条代码:

   responseMapsUP(:,:,s) = imresize(responseMaps(:,:,s), p.responseUp, 'bicubic');

因为这里的Map的数据格式都是gpuArray。后来我换到CPU格式就好了。

把上面一条代码替换成:  

  responseMaps_cpu=gather(responseMaps(:,:,s));
  responseMapsUP_cpu=imresize(responseMaps_cpu, p.responseUp, 'bicubic');
  responseMapsUP(:,:,s)=gpuArray(responseMapsUP_cpu);

按理说不应该有这样的错误,不知道是不是和我机器的具体硬件有关。

或者说imresize对GPU格式数据的支持和具体硬件相关?2018.4.30

3.training的时候在vid_create_net.m文件中的add_block和add_block_conv_only函数中需要在info = vl_simplenn_display(net) 这句前加一句net=vl_simplenn_tidy(net);

2019.4.28