写在前面

最近在研究SiamRPN,究其根本,CNN依托于AlexNet骨架,所以花些功夫研究以下SiamFC代码,将其阶段性复现。

[ Tracking only ]

关于GPU显卡配置、cudn和cudnn安装可以参考Ubuntu16.0下安装显卡驱动、 cuda10.0 、cudnn的活生生案例

1.Ubuntu16.04配置Matconvnet

[可参考官方教程](http://www.vlfeat.org/matconvnet/)

%% 编译安装MatConvNet工具箱
mex -setup,mex -setup C++ %绑定C++编译器
% 将matlab工作路径切换到./MatConvNet,在该工作空间下输入:
addpath matlab %添加搜索路径
vl_compilenn %编译工具箱-一般编译(使用cpu)(注:一般在这行会报错,可用以下代码替换:vl_compilenn('EnableImreadJpeg',false))
vl_setupnn %启动工具箱
% 以下两种方式二选一即可
vl_compilenn('enableGpu',true) %使用cuda编译,编译速度一般
vl_compilenn('enableGpu',true,'cudaRoot','/usr/local/cuda-10.0','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn5') %使用cudnn编译(具体相应的路径名根据自身实际情况进行设置)
%% 测试
vl_testnn %测试cpu编译成功
vl_testnn('gpu',true) %测试GPU编译成功

注意:以上对MatConvNet的配置均在MatConvNet所在的工作目录下进行

2.运行阶段:
run_tracker('vot15_bag',1)

注意:对于一些关键路径的修改,可根据报错提示进行相对应的修改,关于stats.mat文件,可以参考SiamFCdemo运行所需stats.mat文件,下载后放到相对应的文件路径即可;最后运行以上一句代码即可。
[2019/3/2 写]


看到一个相对比较良心的代码复现博文[论文复现] Fully-Convolutional Siamese Networks for Object Tracking可作为参考;
[2019/3/3 更]


MatConvNet是什么;
MatConvNet函数文档;
[2019/3/4 更]


又写在前面

突然警醒到:深度学习的关键所在在于神经网络的训练过程,你所搭建的自己的architecture一旦形成,需要利用相应的数据集进行训练,得到真正属于自己的architecture的权重参数,这才是end to end的真谛吧。
所以就有了接下来的工作,balabalabala…

[ Training only ]

关于配置问题,参见上面的[Training only]部分,在这里需要指出的是Matconvnet的版本问题,本人用的是v1.0-beta25版本,而Siamfc原作者当初用的是v1.0-beta20版本(Matconvnet工具箱下载链接),在tracking阶段,两者均可,但是,在训练阶段,可能由于版本的原因,会弹出一些很痛心的bug…诸如此图(ps:如果你到了这一步,你真的就离成功不远了,我真的是费了九牛二虎之力才到了这一步,奈何我是如此之菜…)
关于解决方案,先别着急,等到了这一步自会说;

1.进行图片原始数据的预处理工作

上图为step-by-step instructions步骤;【1】中链接为ILSVRC官网下载链接,但是需要注册,如果对官网所给的数据集并不是了解的话,建议使用这个直截了当的链接——ILSVRC2015_VID数据集下载链接,直接点击下载即可,一共89.6G;
【3】中要求做的是将VID中的validation和train数据集合并为一个,并将相应的5个文件夹的名称改为a,b,c,d,e;
【4】中按要求运行即可,
【5】中要求对每个视频的每一帧图片进行相应的处理(合并了一些信息),这一步骤耗费了大约一周的时间,持续不断的运行,5个matlab并行处理,全是泪…
【6】中对图片中的object进行操作,但是按要求运行并没有什么卵用,空的,不知道哪里出了问题,所以基于【7】以上步骤做的工作全部作废,一周的运行化为泡影…
所以,作此总结:
使用谷歌浏览器直接下载imdb_video.mat即可,给出的【4-7】的操作只为了得到一个它,所以直接下载它即可;
【8】中搞不懂它在做些什么;
【9】中需要做的是复制ILSVRC2015文件夹的tree结构供后续【10】中作crop得到的图片存储用,按照给定的要求做即可,这里以Ubuntu为例(过程可作参考,结合自身理解后期记录,可能会有错误,但能够有些帮助,知道相应的指令能够完成怎样的操作):

#将当前路径下的文件夹的tree结构存储到dirs.txt
find . -type d >dirs.txt
#新建一个文件夹ILSVRC2015_
mkdir ILSVRC2015_
cd ILSVRC2015_ | cp ../ILSVRC2015/dirs.txt ./
# 从dirs.txt产生相应的目录
xargs mkdir -p <dirs.txt

【10】中运行save_crops.m;这里虽然他那样讲,但是实际并不能够达到效果,会出现一些bugs,以下可以作为参考:

% load imdb_video.mat
imdb_video = load('/home/db/Subject/SiamFC/v1/siamese-fc/cfnet_imdb_video_2016-10.mat')
% run save_crop
% -imdb_video这里用imdb_video.imdb_video,你查看导入的imdb_video即能明白为啥这么做;
% v_1:1;v_end:4417;一共4417组VID,对其全部进行crop操作
% root_original:你存放ILSVRC2015的路径;root_crops:crop后存放的图片路径
%save_crops(imdb_video,v_1,v_end, root_original, root_crops)
save_crops(imdb_video.imdb_video,1,4417,'/home/db/Subject/SiamFC/v1/siamese-fc/ILSVRC2015', '/media/db/ZZXin EXT/ILSVRC2015_')

【11】中可以按照要求做,忘记自己run的还是直接下载的,建议还是用原作者给的吧
至此,对图片的原始数据预处理工作全部完成;

2. training过程

  1. 配置Matconvnet(和上同),可以将这个文件写成一个脚本文件即可,每次进行Matconvnet的配置运行该脚本即可;
%% 编译安装MatConvNet工具箱
mex -setup,mex -setup C++ %绑定C++编译器
% 将matlab工作路径切换到./MatConvNet,在该工作空间下输入:
addpath matlab %添加搜索路径
vl_compilenn %编译工具箱-一般编译(使用cpu)(注:一般在这行会报错,可用以下代码替换:vl_compilenn('EnableImreadJpeg',false))
vl_setupnn %启动工具箱
% 以下两种方式二选一即可
vl_compilenn('enableGpu',true) %使用cuda编译,编译速度一般
vl_compilenn('enableGpu',true,'cudaRoot','/usr/local/cuda-10.0','cudaMethod','nvcc','enableCudnn',true,'cudnnRoot','local/cudnn5') %使用cudnn编译(具体相应的路径名根据自身实际情况进行设置)
%% 测试
vl_testnn %测试cpu编译成功
vl_testnn('gpu',true) %测试GPU编译成功

注:该脚本的运行路径是在Matconvnet文件夹下;

  1. 移除掉siam-fc/training/下的.example后缀,修改env_paths_training中的访问路径(很重要)
    % 这里是到crop后的ILSVRC2015_crops的路径,要涵盖全,一直到train/下% opts.rootDataDir = '/path/to/ILSVRC2015_crops/Data/VID/train/';opts.rootDataDir = '/media/db/ZZXin EXT/ILSVRC2015_/Data/VID/train';% 一直到imdb_video.mat的路径%opts.imdbVideoPath = '/path/to/imdb_video.mat';opts.imdbVideoPath = '/home/db/Subject/SiamFC/v1/siamese-fc/cfnet_imdb_video_2016-10.mat';% 一直到imageStats.mat的路径%opts.imageStatsPath = '/path/to/imageStats.mat';opts.imageStatsPath = '/home/db/Subject/SiamFC/v1/siamese-fc/cfnet_ILSVRC2015.stats.mat';
  1. 直接运行run_experiment.m
# 运行training主程序
run_experiment(imdb_video.imdb_video)

至此,大工告成了么?
并没有,还记得最初的那个bug么?
解决方案

将BatchNorm.m中的第32行的参数‘moments’整行删除掉,并将第33行% obj.moments=[ ]注释掉;
至此,完工。
[2019/4/29 写]

SiamFC代码配置复现相关推荐

  1. SiamFC代码配置复现 matlab版本

    原创 SiamFC代码配置复现 2019-04-29 22:18:06 ZZXin_ 阅读数 1603更多 分类专栏: 深度学习 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议 ...

  2. java spring mysql配置_java相关:mysql+spring+mybatis实现数据库读写分离的代码配置

    java相关:mysql+spring+mybatis实现数据库读写分离的代码配置 发布于 2020-4-4| 复制链接 分享一篇关于关于mysql+spring+mybatis实现数据库读写分离的代 ...

  3. 【小知识】VScode格式化代码配置及插件

    VScode格式化代码配置及插件 学会使用扩展和配置,能让你的vs code生产效率提高百分之二十 --鲁迅 打开setting(新版vscode打开方式2019版) 先按步骤打开 setting 界 ...

  4. [MyBatis] 通过代码配置+XML文件构建SqlSessionFactory

    [MyBatis] 通过代码配置+XML文件构建SqlSessionFactory 问题描述 版本说明 数据库 依赖 相关代码 XML文件: mybatis-config.xml FbPlayerMa ...

  5. CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现

    CVE-2015-1635-HTTP.SYS远程执行代码漏洞复现 一.漏洞描述 远程执行代码漏洞存在于 HTTP 协议堆栈 (HTTP.sys) 中,当 HTTP.sys 未正确分析经特殊设计的 HT ...

  6. 【语义地图】Ubuntu18.04 Suma++代码配置运行

    自己的课题涉及到语义场景构建,最近配置运行了Suma++,结合Suma和RangeNet++,此项目基于RangeNet++代码的配置运行 Suma++源码地址:https://github.com/ ...

  7. STM32——stm32 I2C通信代码配置(2)(学习笔记)

    STM32--I2C通信配置 I2C的系统框架 1.通讯引脚 2.时钟控制逻辑 3.数据控制逻辑 4.整体控制逻辑 通信过程 写入过程 读取过程 I2C代码配置 I2C的初始化结构体 几个重要的函数 ...

  8. [软件工具][原创]yolov7快速训练助手使用教程傻瓜式训练不需要写代码配置参数

    yolov7的发布标志着深度学习目标检测领域又新增一员虎将,是darknet原作者团队最新力作.为了跟上时代发展要求,yolov7快速训练助手更新出来.本此更新依旧面向懒人和初学者,使用非常简单. 第 ...

  9. Java 从零开始实现一个画图板、以及图像处理功能,代码可复现

    Java 从零开始实现一个画图板.以及图像处理功能,代码可复现 这是一个学习分享博客,带你从零开始实现一个画图板.图像处理的小项目,为了降低阅读难度,本博客将画图板的一步步迭代优化过程展示给读者,篇幅 ...

  10. SiamFC代码大乱炖 (pytorch)

    写前bb 最早是看了matlab的代码,搭了环境,demo也跑了,就再也没碰过了.之后想自己把测试和训练部分全部跑通,找了个用pytorch写的代码,看的过程中发现自己还是很多细节部分不是很清楚.虽然 ...

最新文章

  1. 使用Categorical_endcoder包对标称变量进行个性化编码
  2. MySQL复习资料(三)——MySQL-DML语句
  3. 第35次Scrum会议(11/23)【欢迎来怼】
  4. Sublime Text 3使用技巧总结--快捷键及常用插件
  5. PostgreSQL逻辑优化——整体架构
  6. RabbitMQ 概念
  7. 软件著作权算法软件设计说明书_软件著作权说明书模板
  8. 耗时162天,从华为外包5k转岗正式员工15k,经历的心酸只有自己知道
  9. django WEB聊天室项目
  10. JS逆向加密——AES加密解密
  11. php获取图片rgb值,判断图片是否纯黑纯白
  12. 测试开发知识总结(一)
  13. 【Flink Rest-ful API 】
  14. 种子轮、天使轮等相关知识
  15. 将一个八位的二进制数转换为十进制数
  16. AT1983 BBQ Hard
  17. RBAC vs ABAC
  18. LabVIEW将现有数据文件映射至TDMS数据文件格式
  19. 可以用来生成连续有逻辑视觉网络训练设计
  20. 最新体感:超级街霸4

热门文章

  1. 浙大2016计算机考研分数线,2016浙江大学考研分数线公布
  2. 机器学习最常用的算法
  3. jQuery WEUI select的使用
  4. ArcGis 拓扑检查——缺顶点、悬挂检查代码 C#
  5. html 屏幕录像,Screencastify:屏幕录像
  6. 计算经纬度距离工具类
  7. 【重拾FPGA】三段式状态机的路口红绿灯
  8. Pdproxy度盘下载器
  9. 利用度盘直链解析网页及XDOWN高速下载百度网盘分享资源
  10. 数据库 左连接拼接多个表该怎么写?