文章目录
🌟0.跑yolo为什么要先下一个预训练权重yolov5s.pt?
一直很疑惑预训练权重到底是干嘛用的?所以下面是我查阅的一些关于为什么要用预训练模型的一些理解
🌟1.预训练模型有什么用?
深度学习是需要大量数据支持的
很多数据并没有大数据的支持(小数据)
比如:猫狗分类任务(100张图片),直接训练之后的精度很低,依然还是无法分辨猫狗
但是:前人做过一个10000000张鸡鸭的分类,得到了一个模型A,我们就可以直接用这个模型A
当作预训练模型
🌟2.为什么可以使用模型A作为预训练模型?
模型A是经过鸡鸭分类任务训练得到的,已经学会了如何从图像中提取和识别不同种类的动物特征。即便鸡和鸭与猫狗属于不同类别,
它们在低层次的特征(例如边缘、纹理、形状)上仍有一些相似性
。卷积神经网络(CNN)的特性使得其低层次的卷积层学会的特征是通用的,适用于大多数图像识别任务。因此,模型A的这些低层次特征提取部分(前几层)可能对猫狗分类仍然有用
。
🌟3.使用模型A的好处是什么?
迁移学习的优势:使用预训练模型相当于借用了在其他任务上训练好的特征提取能力。模型A已经在鸡鸭分类任务上学习到了某些通用的图像特征,而猫狗分类任务同样需要这些特征,因此你可以直接迁移这些特征,省去从零开始训练的成本。
节省时间和资源:
节省时间和资源:如果你从头训练一个猫狗分类模型,需要大量数据、时间和计算资源。使用预训练模型可以跳过从头训练的过程,只需要对猫狗分类任务进行微调(fine-tuning),这通常只需要较少的训练时间和较少的数据量。
提高性能:
提高性能:预训练模型已经从大量数据中学会了一些常见的图像特征,这使得模型在新任务中往往能更快收敛,并且可能比从头训练得到的模型表现更好。对于像猫狗分类这样的数据相对较少的任务,使用预训练模型可以帮助防止过拟合
🌟4.如何用这个模型A?
你可以使用模型A的前几层(即卷积层)作为特征提取器,而对最后几层(例如全连接层)进行重新训练。具体步骤通常如下:
冻结前几层:保留模型A的前几层并冻结它们的权重,不需要再训练。
重训练最后几层:替换模型A的最后几层(与分类相关的层),并针对新的猫狗分类数据进行训练。
微调整个模型(可选):在训练的最后阶段,可以选择微调整个模型,包括冻结的前几层,进一步适应猫狗分类任务。
🌟5.现实中的使用场景
比如我们用yolo训练别的物品,我们一般会下载yolov5s.pt这样,这个就是预训练的模型
5.1查看yolov5.pt模型的网络架构
import torch
model = torch.load("yolov5/yolov5s.pt")
print(model)
以下是控制台打印的网络架构的信息
sequential层—>conv层—C3层(等等)
每一层的描述都给出了该层如何处理输入的信息,包括层的类型、尺寸调整(如卷积核大小、步长、填充)、是否有偏置以及如何激活和归一化输出