【SOT】SiamFC代码笔记

news/2024/7/24 8:07:31 标签: pytorch, 深度学习, python

代码来源:https://github.com/huanglianghua/siamfc-pytorch
结合siamfc-pytorch代码讲解的三篇博客
下面是阅读上述SiamFC代码时的笔记

preprocess data(数据预处理)

dataset.py

概括:通过index索引返回item = (z, x, box_z, box_x),然后经过transforms返回一对pair(z, x)

步骤:

  1. 根据 index 获得视频序列路径、标签、meta(可选)
  2. 滤除噪声图像,获得有效索引
  3. 如果有效索引大于2个的话,就从中随机挑选两个索引(间隔不超过T=100)
  4. 两个索引对应的图像分别作为 x, z (转化为RGB格式)
  5. 两个索引对应的图像所对应的标签分别作为box_z, box_x
  6. 对 (z, x, box_z, box_x) 进行 transforms 操作, 输出为(z, x)

transform.py

  • 输入:(z, x, box_z, box_x)
  • 输出:(z, x)

步骤:

  1. 对于 x 和 z 都进行如下操作:
    1. 将 box 的格式转化为 [y, x, h, w]
    2. crop 一块以 box 中心为中心、以 box 大小为基准稍大的 patch,然后 resize 成255的大小,如果需要的话用颜色的平均值进行 pad
  2. 对于 z :
    1. 随机resize(0.95 ~ 1.05)
    2. 从中间crop一块255-8大小的块,大小不够的话用颜色均值填充
    3. 随机crop一块255-2*8大小的块
    4. 从中间crop一块127大小的块,大小不够的话用颜色均值填充
    5. 转换为tensor
  3. 对于 x :
    1. 随机resize(0.95 ~ 1.05)
    2. 从中间crop一块255-8大小的块,大小不够的话用颜色均值填充
    3. 随机crop一块255-2*8大小的块
    4. 转换为tensor

处理后的效果:

siamfc.py(训练+测试)

train_over(训练过程)

  1. 设置为训练模式
  2. dataloader,本来__getitem__返回一对pair(z, x),经过dataloader的加载,还是z堆叠一起,x堆叠一起,并不是(z, x)绑定堆叠一起
  3. epoch 和 dataloader 的循环,train_step(batch, backward=True), 二值交叉熵损失
  4. 保存 checkpoint

train_step

输入: (z, x)
z: torch.Size([8, 3, 127, 127])
x: torch.Size([8, 3, 239, 239])

    x       z
    |       |
backbone backbone
    \       /
       head
        |
     responses
  ([8, 1, 15, 15])    _create_labels
        |             /
        |            /
            loss

_create_labels

  • exemplar image z 和search image x 都是以目标为中心的,所以labels的中心为1,中心以外为0。
  • 得到的一个batch下某一个通道下的label:

track(测试过程)

  • 输入视频的图像路径序列和第一帧的目标位置

init(self, img, box)

  • 传入第一帧的标签和图片,初始化一些参数,计算一些之后搜索区域的中心等等
  • @torch.no_grad()
  • 预处理类似于训练过程
  • 步骤:
    1. 设置 eval 模式
    2. 将 box 的格式变换为 [y, x, h, w],[y, x]为中心点
    3. 创建大小为272*272的汉宁窗并归一化
    4. 设置3个尺度因子:1.0375**(-1,0,1)
    5. 根据 box 大小设置稍大的z_sz, 而x_sz = z_sz * 255 / 127。这里可以看到,search images在resize之前的边长x_sz大约为target_sz的4倍,如论文中所说we only search for the object within a region of approximately four times its previous size
    6. 只对于 z: crop 一块以 box 中心为中心、以 box 大小为基准稍大(z_sz)的 patch,然后 resize 成 127 的大小,如果需要的话用颜色的平均值进行 pad
    7. 只对于 z: 送入 backbone,输出 self.kernel

update(self, img)

  • 传入后续帧,然后根据SiamFC网络返回目标的box坐标,之后就是根据这些坐标来show,起到一个demo的效果
  • @torch.no_grad()
  • 步骤:
    1. 设置 eval 模式
    2. 只对于 x: crop 一块以 init 中 box 中心为中心、x_sz * f(f 为缩放因子) 为大小的 patch,然后 resize 成 255 的大小,如果需要的话用颜色的平均值进行 pad, 不同的缩放因子对应的 x 拼接起来
    3. 只对于 x: 送入 backbone
    4. 只对于 x: 将 init 中得到的 z 的特征提取结果 self.kernel 和上一步 x 的特征提取结果一起送入 head, 得到 responses
    5. 将 responses 上采样为[3, 272, 272]的大小
    6. 对 responses 的第一个和第三个通道(除中间以外的两种尺度)进行惩罚(* 0.9745), 因为中间的尺度肯定是接近于1,其他两边的尺度不是缩一点就是放大一点,所以给以惩罚
    7. 选出 responses 3个通道里面最大的那个(索引为scale_id), 归一化, 并与汉宁窗加权求和(前者0.824后者0.176),通过 np.unravel_index 找到峰值点
    8. 在response图中找到峰值点后,计算其在原图img中的位置
    9. 调整 target_sz、z_sz、x_sz 的大小(根据尺度因子来调整;如果目标变大,这三个的尺寸也以相同的比例增大)
    10. 将8中得到的位置调整为[left, top, w, h]的格式

http://www.niftyadmin.cn/n/1585479.html

相关文章

wcf服务契约的重载

a. 服务端 1.服务端 契约用OperationContract的Name实现重载 using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text;namespace WCF.Chapter2.Overloading.Host{[ServiceCon…

【SOT】SiamRPN代码笔记

代码来源:https://github.com/laisimiao/siamrpn.pytorch 结合博客关于SiamRPN代码的一些要点 下面是阅读上述SiamRPN代码时的笔记 1、template frame和detection frame经过相同的Siamese Network得到一个feature,然后经过RPN的classification branch和regression b…

android使用Pull解析来自服务器的xml文件时出现错误以及解决方案

直接上代码,代码中有详细注释: 1 public class CheckUpdateManager {2 private static final String TAG "CheckUpdateManager";3 private ProgressDialog mWaitDialog;4 private Context mContext;5 private boolean mIsSho…

【SOT】MDNet(在线更新)代码笔记

论文:Learning Multi-Domain Convolutional Neural Networks for Visual Tracking 代码:https://github.com/hyeonseobnam/py-MDNet 网络整体结构: 论文中的重点: 首先进行多领域学习。学习完成后,当给定一个测试序…

cv2.VideoWriter生成视频无法播放的原因(持续补充)

cv2.VideoWriter的使用方法 cv2.VideoWriter(filename, fourcc, fps, frameSize[, isColor])filename:视频保存路径fourcc:指定编码器fps:视频帧率frameSize:图像大小isColor:黑白画面还是彩色画面 示例 first_fram…

动态SQL实现与注意事项(有返回值与无返回值动态SQL 实现)

1、分类 当执行的SQL语句需传入变量时,必须使用SQL 动态语句实现; 动态语句分两种情况: (1)有返回值动态SQL (2)无返回值动态SQL 2、实现 假设存在一个学生表,具有UserID, UserNam…

NAT2021数据集

NAT2021数据集网站:https://vision4robotics.github.io/NAT2021/,用于夜晚场景的无监督单目标跟踪。 数据解压缩 下载下来的训练数据集直接解压缩会报错(不太明白为什么),所以需要先对压缩包进行修复。我采用的方式是…

Entity Framework Core 2.0的突破性变更

在之前的文章里,我们看到了EF Core 2.0的新特性和槽点。今天,我们来看一看EF Core的突破性变更。\\不支持EF Core 1.x数据库驱动器\\EF通过数据库驱动器为SQL Server、MySQL等数据库生成SQL。EF没有通用的OleDB或ODBC驱动器,所以只能使用专门…