PyTracking训练HOT(二)

本文讲述了对HOT数据集进行transform的过程,包括灰度化移除、亮度抖动、标准化调整,以及ResNet模型中inchannel的修改,以适应HOT数据。同时提到了代码中的错误及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(一)里面代码有错,shutil.move是剪切,应该用copyfile。数据集从HOT2020更新为HOT2023。

一、数据transform

1、函数调用在 /ltr/train_settings/bbreg/atom.py processing.ATOMProcessing()

函数定义在 /ltr/data/processing.py class ATOMProcessing

2、首先进行 joint_transformer,将 train_image 和 test_image 灰度化

对于HOT数据,不需要灰度化,在 /ltr/train_settings/bbreg/atom.py 中 transform_joint = None

3、之后对 train 和 test 的 anno 做一个抖动处理,根据 settings.center_jitter_factor = {'train': 0, 'test': 4.5};settings.scale_jitter_factor = {'train': 0, 'test': 0.5}。train 的 anno 不做抖动,test 会产生抖动。个人理解是 train 作为训练样本,要确保正确。test 不会参与模型参数训练,造成抖动可以加大测试难度。HOT 数据集可以保留这部分操作。

4、之后分别对 train 和 test 做处理(如果与代码变量相对应,应该是train和val,HOT官方不提供test,因此将val当作test和val混着用了)。

transform_train = ToTensorAndJitter(0.2) + Normalize

ToTensorAndJitter 实现的功能是将数据转到 tensor,然后进行亮度抖动。具体来说,是数据整体乘上一个亮度因子,该因子在(1-0.2,1+0.2)区间内随机选取,相乘的结果再做一次截取,只保留(0-255)/(0-1)区间的值。

因为RGB的数据类型是Unit8,而HOT的数据类型我设置的是int32,因此代码需要修改,改变归一区间。注意,因为去掉了灰度化,数据没有进行过norm,因此这里的 self.normalize 应设为 False。

Normalize 实现的功能是数据标准化,用的到mean和std是根据RGB数据(ImageNet?)统计得到的普遍值,不适用HOT数据集。且通道数也不对应。这里需要重新统计HOT数据集的mean和std。这个值在 /ltr/train_settings/bbreg/atom.py 中设定。

transform_val = ToTensor() + Normalize

ToTensor 对于HOT是可以保留的

5、最终选择了更改处理顺序

transform_joint = tfm.Transform(tfm.Normalize_HOT(mean=settings.normalize_mean, std=settings.normalize_std))

先对train、test进行标准化+归一化

transform_train = tfm.Transform(tfm.ToTensorAndJitter_HOT(0.2))

transform_val = tfm.Transform(tfm.ToTensor_HOT())

之后转到tensor

6、inchannel设置

RGB模型直接用于HOT存在初始卷积层维度不一致的问题

修改 /ltr/models/backbone/resnet.py

class ResNet(Backbone)

self.conv1 = nn.Conv2d(3, inplanes, kernel_size=7, stride=2, padding=3, bias=False)

将inchannel从3改为16

7、运行即可正常训练

******遇到了代码卡住的问题,删除/user/.cache/torch_extensions/_prroi_pooling/文件夹,再次运行代码重新生成可以解决,原理不清

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值