【SOT】SiamRPN代码笔记
代码来源:https://github.com/laisimiao/siamrpn.pytorch
结合博客关于SiamRPN代码的一些要点
下面是阅读上述SiamRPN代码时的笔记
1、template frame和detection frame经过相同的Siamese Network得到一个feature,然后经过RPN的classification branch和regression branch,其中template作为kernel在detection上做correlation操作。
2、分类分支的作用就是预测原图上的哪些anchor会与目标的IoU大于一定的阈值,他们对应最后的feature map上的点就是1;回归分支就是预测每个anchor与target box的xywh的偏移
preprocess data(数据预处理)
augmentation.py
- gray augmentation(可选): BGR->GRAY->BGR
- shift scale augmentation:
- if self.scale: (cx, cy, w, h)形式,中心点坐标不变,尺度缩放
- if self.shift: (x1, y1, x2, y2)形式,上下左右移动
- bbox 同样操作
- color augmentation
- blur augmentation
- flip augmentation
datasets.py(VIDYTBBLMDB)
- 在整个视频中随机抽取一帧作为模板帧,在模板帧前后 frame_range 的范围(不超过视频的长度)内随机抽取另一帧作为搜索帧
- 对模板帧和搜索帧做处理–>template_image, template_box, search_image, search_box(图片、目标框标签)
- 数据增强–>模板图像、搜索图像、搜索图像的bbox
- ⭐️ 设置 anchor,输出包含两种格式((x1, y1, x2, y2)、(cx, cy, w, h))
- ⭐️ 根据设置的 anchor 和真实的 bbox 来生成 cls, delta, delta_weight,即分类标签、回归标签、回归权重
- ⭐️ 最终输出的形式为{
‘template’: template,
‘search’: search,
‘label_cls’: cls,
‘label_loc’: delta,
‘label_loc_weight’: delta_weight
}
⭐️ 表示不同于 SiamFC 的地方
SiamRPN(model.py)
z x| |
backbone backbone\ /RpnHead/ \cls reg
AlexNet
backbone
RpnHead
cls:z_ft x_ft| |Conv2d Conv2d[N,2K*256,4,4][N, 256, 20, 20]\ /Conv2d|pred_cls(cross_entropy)
reg:z_ft x_ft| |Conv2d Conv2d[N,4K*256,4,4][N, 256, 20, 20]\ /Conv2d|pred_reg(smooth L1)
SiamRPNTracker(track.py,测试过程)
- 设置为 eval 模式
init(self, image, box)
- 这部分就是利用第一帧的先验信息,包括第一帧图片和ground truth bbox,相当于一个one-shot detection,这个template frame就固定了,相当于一个kernel
- 只对于 z: crop 一块以 box 中心为中心、以 box 大小为基准稍大(s_z)的 patch,然后 resize 成 127 的大小,如果需要的话用颜色的平均值进行 pad
- 只对于 z: 送入 backbone
update(self, image)
- 输入一张subsequent frame,然后根据预测值,加以scale和ratio的penalty,然后用cosine window来suppress large displacement,然后根据分类分数的最高值对应的anchor来回归预测目标位置
- 只对于 x: crop 一块以 box 中心为中心、以 s_x 为大小(s_x=s_z*255/127)的 patch,然后 resize 成 255 的大小,如果需要的话用颜色的平均值进行 pad
- 只对于 x: 送入 backbone
- 将 init 中得到的 z 的特征提取结果和上一步 x 的特征提取结果一起送入 rpnhead, 得到 outputs
- ⭐️ 将 outputs 的分类预测和回归预测转化为 score(通过softmax) 和 pred_bbox(修正后的anchor)
- ⭐️ scale penalty、aspect ratio penalty、window penalty
- 找到峰值点
- ⭐️ 调整 bbox 的大小(用学习率调整)和位置,输出 bbox
- 更新目标大小(size)和位置(center_pos),为下一帧做准备
train.py(训练过程)
- 构建 SiamRPN 模型
- 构建数据集(VIDYTBBLMDB类)和dataloader
- 导入预训练模型(siamrpn.backbone)
- 固定预训练模型的参数
- 设置优化器和学习率调整策略
- 从第10个epoch开始将预训练模型的参数解除固定
- 将模板和搜索区域送入网络:siamrpn(data[‘template’], data[‘search’]),得到输出 pred_cls, pred_reg
- 将输出 pred_cls, pred_reg 与 data[‘label_cls’]、data[‘label_loc’]、data[‘label_loc_weight’] 计算损失
- 记录损失和时间等信息
- 梯度反传和优化器更新,一个epoch结束前学习率更新
- 保存模型
【SOT】SiamRPN代码笔记相关推荐
- CSDN技术主题月----“深度学习”代码笔记专栏
from: CSDN技术主题月----"深度学习"代码笔记专栏 2016-09-13 nigelyq 技术专题 Hi,各位用户 CSDN技术主题月代码笔记专栏会每月在CODE博客为 ...
- 看完师兄的代码笔记,我失眠了
祝大家中秋节快乐! 最近很多公司的秋季招聘都已经启动了. 想必大家(尤其是经历过求职面试的)都知道,数据结构和算法在求职笔试/面试中的重要性. 纵观如今的互联网公司面试,清一色地都在重点考查这块,不开 ...
- LSTM TF核心实现代码笔记
LSTM TF核心实现代码笔记 1. LSTM TF里的核心代码实现 2. 代码详细讲解 1. LSTM TF里的核心代码实现 LSTM网络的核心实现是在这个包里tensorflow/python.k ...
- 2018年最新Spring Boot视频教程附代码笔记资料(50G)
1. Spring Boot 项目实战 ----- 技术栈博客企业前后端 链接:https://pan.baidu.com/s/1hueViq4 密码:4ma8 2.Spring Boot 项目实 ...
- Python Text Processing with NLTK 2.0 Cookbook代码笔记
如下是<Python Text Processing with NLTK 2.0 Cookbook>一书部分章节的代码笔记. Tokenizing text into sentences ...
- Transformer课程 第8课NER案例代码笔记-IOB标记
Transformer课程 第8课NER案例代码笔记-IOB标记 NER Tags and IOB Format 训练集和测试集都是包含餐厅相关文本(主要是评论和查询)的单个文件,其中每个单词都有一个 ...
- 2018尚硅谷SpringBoot视频教程附代码+笔记+课件(内含Docker)
尚硅谷SpringBoot视频教程(内含Docker)附代码+笔记+课件 下载地址:百度网盘
- 吴恩达机器学习MATLAB代码笔记(1)梯度下降
吴恩达机器学习MATLAB代码笔记(1)梯度下降 单变量线性回归 1.标记数据点(Plotting the Date) fprintf('Plotting Data') data = load('D: ...
- Transformer课程 第8课NER案例代码笔记-部署简介
Transformer课程 第8课NER案例代码笔记 BERT微调器 NER是信息提取的子任务,旨在将非结构化文本中提到的命名实体定位并分类为预定义类别,如人名.组织.位置.医疗代码.时间表达式.数量 ...
- 【SFND_Lidar_Obstacle_Detection】代码笔记
源代码链接: https://github.com/williamhyin/SFND_Lidar_Obstacle_Detection 激光雷达数据: x,y,z,indensity(可用于评价物体的 ...
最新文章
- 学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...
- 机器学习一 -- 什么是监督学习和无监督学习?
- oracle用户登录的认证方式
- httppost数据上传 unity_Unity中国增强版发布
- unity3d的执行顺序
- POJ - 2987 Firing(最大权闭合图)
- JDK环境变量配置(一次性成功)
- std::string的resize()与reserve()的区别
- 16产品经理需要具备的做事能力
- 鸿蒙历程及路标没有适配手机,鸿蒙2.0来了?华为开发者大会时间确认:Mate40会不会首发?...
- 随想录(以项目为中心的学习)
- 第七届蓝桥杯省赛--四平方和
- 详解汽轮机的TSI系统
- 致远项目管理SPM系统五大技术平台层-CMP能力概述
- 皇家彩世界教程iOS性能优化系列篇之“优化总体原则”
- 计算机电子表格编辑栏,#wps显示不出来excle#WPSexcel怎么把表格里的内容全部显示在编辑栏里...
- ESP8266开发之旅 阿里云物联网平台篇⑥ LED智能灯控制系统 全面讲解,上手一个小项目(MQTT客户端直连 + Web配网 + WebSocket局域网通信)
- jeeplus-一款款可一键生成前后端代码的开发平台
- 墨天轮沙龙 | 麦杰科技卢学东:openPlant 实时数据库系统及应用
- 使用构造方法 重载 Scanner键盘录入的方式,做一个两个int类型的相加 和三个double类型的计算器
热门文章
- Facebook母公司:混合现实走向市场还需要数年时间
- 芯片行业常用英文术语最详细总结(图文快速掌握)
- 搜索引擎基本工作原理
- 工作两三年了,整不明白架构图都画啥?
- input标签属性详解大全
- 各种深度摄像头的使用经验粗谈
- 无法启动程序因为计算机中丢失msvcr100,Win7系统计算机中Msvcr100.dll丢失的解决办法(两种方法)...
- 关于Linux UDP/TCP reuseport 二三事
- 松弛型内存模型(Relaxed memory models)的一个有趣的例子
- 恩尼格玛模拟器_用C语言编的恩格尼码模拟器