简介
在训练一些复杂模型时候,通常会考虑读取backbone的预训练权重,这种方法有以下好处:
初始化网络参数:在深度学习模型训练过程中,通常需要随机初始化神经网络的参数。然而,如果采用Backbone预训练权重进行初始化,模型就能从一个已经学习过大量数据的权重开始,而不是从零开始。这可以大大提高模型在初始阶段的性能,因为它已经具备了一定的特征提取能力。
加速模型收敛:由于Backbone预训练权重已经包含了大量的通用特征表示,这些特征表示对于许多计算机视觉任务都是有用的。因此,当使用这些预训练权重进行模型训练时,模型可以更快地适应新的任务,并加速收敛。
提高模型性能:通过使用Backbone预训练权重,模型能够利用已经在大型数据集上学习到的特征表示,从而在新任务上获得更好的性能。这可以体现在更高的准确率、更低的错误率等方面。
减少过拟合:在深度学习中,过拟合是一个常见的问题。然而,通过使用Backbone预训练权重,模型已经具备了一定的泛化能力,因此在新的任务上更不容易出现过拟合现象。
节省计算资源:从头开始训练一个深度学习模型通常需要大量的计算资源和时间。然而,通过使用Backbone预训练权重,模型可以更快地收敛,并节省大量的计算资源。这对于那些计算资源有限的研究者或开发者来说是非常有用的。
实验测试:
利用mmdet工程进行实验,读取backbone的预训练权重,并将这部分学习率设置为其他权重的0.05倍:
修改配置文件:
pts_backbone=dict(
type='XXX',
......
pretrained='work_dirs/pretrain_xxx.pth'),
......
optimizer = dict(type='AdamW',
lr=0.001,
paramwise_cfg=dict(
custom_keys={
'pts_backbone': dict(lr_mult=0.05),
}),
weight_decay=0.01)
对比测试效果如下:
不读取预训练权重:
读取预训练权重:
又实验可知:读取预训练权重可以有效提高收敛速度,所以现在市面上的transfomer检测都会读取预训练模型。