SiamFC代码配置复现

2023-05-16

写在前面

最近在研究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:如果你到了这一步,你真的就离成功不远了,我真的是费了九牛二虎之力才到了这一步,奈何我是如此之菜…)
vl_nnbnorm错误关于解决方案,先别着急,等到了这一步自会说;

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 写]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SiamFC代码配置复现 的相关文章

  • Python脚本之准备测试环境的用户数据

    本文为博主原创 xff0c 未经授权 xff0c 严禁转载及使用 本文链接 xff1a https blog csdn net zyooooxie article details 127645678 这期是讲述下 我准备测试环境用户数据的经
  • 1114Selenium web自动化测试经验分享-设置网页超时加载时间set_page_load_timeout()

    最开始学习web自动化测试就遇到一个小困扰 xff0c 有时候设计的用例可能会打开新浪 腾讯这些网站 xff0c 等待网页加载完成都要小半分钟 最近重拾web自动化测试 xff0c 又遇到这个困扰 个人博客 xff1a https blog
  • 1127UI自动化测试经验分享-显式等待(一)WebDriverWait类、until()方法

    最近忙于其他事情 xff0c 博客就没那么多时间来写 原本想先分享下三种等待方式 xff0c 但是隐式等待我还有点不太懂 这次先分享显式等待 个人博客 xff1a https blog csdn net zyooooxie 一 xff09
  • OpenCV框架介绍

    OpenCV框架介绍 概述 OpenCV是一个开放源代码的计算机视觉应用平台 xff0c 由英特尔公司下属研发中心俄罗斯团队发起该项目 xff0c 开源BSD证书 xff0c OpenCV的目标是实现实时计算机视觉 xff0c xff0c
  • 1128UI自动化测试经验分享-显式等待(二)expected_conditions模块、visibility_of_element_located(locator)

    expected conditions模块 提供的预期条件判断类 模块包含一套预定义的条件集合 xff0c 大大方便了 WebDriverWait 的使用 个人博客 xff1a https blog csdn net zyooooxie 一
  • Requests.request()方法分享【一】

    最近参加了一次新公司测试团队技术分享会 xff0c 有大佬分享了关于接口自动化框架 python 43 requests 43 ddt 43 unittest 43 jenkins xff0c 印象很深刻的是他的脚本测试用例的设计和requ
  • 指针 Swap交换函数

    64 努力的张张 的C 练习 数组 指针地址传递 Swap函数 首先 xff0c 我们先来看一下普通值传递和地址传递的区别 函数间普通值传递 上代码 xff1a span class token macro property span cl
  • 用两个栈实现一个队列【C语言】

    问题描述 xff1a 考虑用两个栈实现队列这样的特殊结构 问题分析 xff1a 我们靠两个栈实现队列 xff0c 肯定是一个用来存放入队的数据 xff0c 一个用来出栈 xff0c 在这里我们主要关注这个样几个问题 xff1a 什么时候队列
  • 数据库安全 --- 创建登录名 用户+配置权限【笔记】

    项目场景 xff1a 创建用户和给用户授权 解决方案 xff1a 1 创建用户 至此用户才创建成功 xff1a 2 配置权限 把查询Student表权限授给用户test xff1a 把对Student表和Course表的全部权限授予用户U2
  • Visual C++6.0 一些编译链接报错解决

    01 VC 43 43 编写图形化界面链接时出现 LIBCD lib crt0 obj error LNK2001 unresolved external symbol main 的解决方案 在我使用VC 43 43 编写一个图形化显示界面
  • lambda表达式【C++】

    lambda表达式 lambda表达式是C 43 43 11最重要也是最常用的一个特性 lambda来源于函数式编程的概念 优点 xff1a 声明式编程风格 xff1a 就地匿名定义目标函数或函数对象 xff0c 不需要额外写一个命名函数或
  • Qt学习笔记 day_03

    目录 十三 自定义代理类的实现1 基于QSpinBox的自定义代理类的实现2 自定义代理类的使用3 xff09 setItemDelegateForColumn 函数的使用注意 十三 自定义代理类的实现 1 基于QSpinBox的自定义代理
  • 版本控制软件SVN

    SVN学习 1 版本控制软件定义及用途 版本控制软件是为适应软件配置管理的需要 xff0c 控制软件的修改 xff0c 减少混乱 xff0c 提高软件生产效率 xff0c 其是软件质量保证的重要环节软件配置管理是对软件修改进行标识 组织和控
  • 螺旋桨的制作图文教程

    一 螺旋桨的一些基础概念 当我们把螺旋桨看成是一个一面旋转一面前进的机翼时 xff0c 就能借助已知的空气动力学常识 xff0c 直观地理解螺旋桨的基本工作原理 1 xff0e 桨距 动力桨距和几何桨距 桨距 xff1a 从广义而言 xff
  • 自制2.4G ELRS接收机,不需要打板,容易制作

    制作难度 xff1a 中等 xff0c 主要是器件太小 xff0c 焊接需要耐心 一 硬件材料 1 LoRa射频模块 xff0c sx1280 xff1a E28 2G4M12S 2 MCU Wifi模块 xff1a ESP 01F 3 各
  • Qt学习笔记 【C++】(4)

    目录 一 Qt中的C 43 43 11标准二 Explicit Linking 和 Implicit Linking三 自动生成的ui xxx ui文件四 常用快捷键 一 Qt中的C 43 43 11标准 Qt 5 中开启C 43 43 1
  • 串口发送接收字符串的C语言代码参考

    通过串口把字符串数据从单片机U1发送到单片机U2 xff0c 通过U2的LCD602显示出来 LCD602显示代码是用的一个比较不错的现成的显示代码 单片机串口传字符串 xff0c 主要是利用字符串的格式的特点 xff0c 在传输中结束串口
  • HTTP协议解析

    HTTP概述 HTTP 全称为 34 超文本传输协议 34 是一种应用非常广泛的应用层协议 我们平时打开一个网站 就是通过 HTTP 协议来传输数据的 HTTP工作过程 xff1a 当我们在浏览器中输入一个 34 网址 34 xff0c 此
  • 《算法导论》学习心得

    第四章 分治策略 xff08 1 xff09 Master Method中case 3中 正则条件 的含义 xff1a 保证f n 在每次递归后都比上一层小 xff08 非递增 xff09 否则显然T n gt f n xff08 2 xf

随机推荐

  • 《算法导论》 第11章部分答案

    注 xff1a 以下答案均为自己思考 xff0c 难免有误 xff0c 欢迎指正 11 3 1 xff1a 将长度为n的链表进行排序 xff0c 将关键值的散列值相同的元素排为相邻 而散列表有点类似于链接法解决冲突的散列表 11 3 2 x
  • 算法刷题心得:动态规划 scramble-string

    牛客网 gt 在线编程 gt letcode gt scramble string Given a string s1 we may represent it as a binary tree by partitioning it to t
  • POJ 1635 Subway tree systems

    题目 xff1a Some major cities have subway systems in the form of a tree i e between any pair of stations there is one and o
  • Openwrt添加定制一个软件包

    我深知前路风雨 xff0c 但我依然微笑前行 Openwrt的Makefile流程异于一般常用的Makefile xff0c 阅读起来难度太大 但是我么可以先通过如何使用 修改Makefile开始 xff0c 从Makefile的某个局部开
  • 无人机通信(WiFI/3G/4GLTE)

    无人机通信 xff08 WiFI 3G 4GLTE xff09 DJI 大疆创新的无人机可实时操控执行各项任务 Phantom3 还内置了全新的 Lightbridge 高清图传系统 xff0c 使飞机所拍摄的实时图像可远距离传输到移动设备
  • realsense D430 python采集深度图像,并保存为txt及pcd点云,用于open3D后处理

    D430点云是x y z 将realsense D430保存的点云文件 pcd 需要对数据进行处理 废话不多说 直接上代码 span class token comment coding utf 8 span span class toke
  • 隐藏符号 __dso_handle 问题

    这几天要给项目做移植 xff0c 重写了下Makfile 项目原是使用autoconf配置的 xff0c 但在新环境下对autoconf的支持不好 Makefile编写基本按autoconf生成的Makefile来的 xff0c 编译选项等
  • 类模板成员函数

    模板类的头文件 span class token macro property span class token directive hash span span class token directive keyword ifndef s
  • C++ 在.h文件中包含头文件和在.cpp文件中包含头文件的原则

    1 第一个原则 xff1a 如果可以不包含头文件 xff0c 那就不要包含了 xff0c 这时候前置声明可以解决问题 如果使用的仅仅是一个类的指针 xff0c 没有使用这个类的具体对象 xff08 非指针 xff09 xff0c 也没有访问
  • NRF24L01数据通信C程序

    NRF24l01 产品性能 xff1a 1 xff09 2 4GHZ全球开放ISM频段免许可使用 2 xff09 最高工作速率2Mbps GFSK高效调制 3 xff09 125个频道满足多点通讯和跳频通讯需求 4 xff09 1 9 3
  • gazebo仿真之xacro文件

    span class token operator lt span span class token operator span xml version span class token operator 61 span span clas
  • c++ 释放内存 野指针

    在释放内存之时 xff0c 不仅仅是将该块内存进行释放 xff0c 还要将指向该块内存的指针置为NULL 如果不置为NULL xff0c 下次继续使用该指针时会出现问题 具体看示例 在下面的示例中 xff0c 如果没有处理野指针的那句话 x
  • 二维码识别 -- 基于ros平台下的仿真

    生活中的二维码 二维码是用某种特定的几何图形按一定规律在平面 xff08 二维方向上 xff09 分布的黑白相间的图形记录数据符号信息的 xff1b 在代码编制上巧妙地利用构成计算机内部逻辑基础的 0 1 比特流的概念 xff0c 使用若干
  • ROS中控制机械臂抓取目标例程

    在上一个博文中介绍了一个简单的目标识别的例子 xff0c 在这篇博客中 xff0c 例如是别的结果 xff0c 完成机械臂的抓取控制 xff0c 主要进行程序的分析和学习 包含的头文件 xff1a include lt ros ros h
  • STM32_Debug 使用ST-Link进行调试出现Error:Flash Download Failed-"Cortex-M3" 解决方案

    在Debug窗口依次注意以下几个点 xff1a 1 选择与主控芯片相配套的芯片 2 选择ST Link Debugger 此处注意该页面最下面一行可不更改 xff08 亲测有效 xff09 3 接上图点击进入Setting xff0c 依次
  • 标准外设库(STD库)、HAL库、LL库三者区别

    转自 xff1a https blog csdn net zcshoucsdn article details 54613202 2018 1 19 HAL库详解见STM32之HAL库详解 及 手动移植 STM32 Embedded Sof
  • FOC矢量控制

    FOC xff08 Filed Oriented Control xff09 是采用数学方法实现三相马达的力矩与励磁的解耦控制 主要是对电机的控制电流进行矢量分解 xff0c 变成励磁电流 I d Id 之后我将详细介绍一下这个算法的数学原
  • Linux网络编程8——对TCP与UDP的简易封装

    引言 每次使用socket通信 xff0c 都会有很对相似的操作 本文 xff0c 会对TCP与UDP通信做一简单封装 xff0c 并生成动态库 代码 my socket h ifndef MY SOCKET H define MY SOC
  • 分分钟带你入门无刷电机控制_P-NUCLEO-IHM001套件评测使用

    终于有时间将前段时间把有关ST公司的分分钟带你入门无刷电机控制 P NUCLEO IHM001套件评测的资料系统的整理一下 刚一开始接触接触这个套件的时候感觉这是什么鬼 xff0c 可以实现正弦波矢量控制 xff1f 这么强 xff0c 慢
  • SiamFC代码配置复现

    写在前面 最近在研究SiamRPN xff0c 究其根本 xff0c CNN依托于AlexNet骨架 xff0c 所以花些功夫研究以下SiamFC代码 xff0c 将其阶段性复现 Tracking only 关于GPU显卡配置 cudn和c