如何查看yolov5模型中的参数

参考chatgpt给出的关于深度学习模型的步骤如下:
要查看已经训练好的目标检测模型中设置的可学习权重的参数,可以使用以下步骤:

首先,导入您正在使用的深度学习框架库,如PyTorch、TensorFlow等。

然后,在代码中初始化一个目标检测模型实例,并将其加载到所需的设备上(通常是CPU或GPU)。

接下来,您可以通过访问模型的“parameters”属性来获取模型中的所有可学习参数。不同的目标检测模型具有不同的参数结构,但大多数目标检测模型都包含了预测框、分类器和特征提取器等子模型的参数。

对于使用PyTorch的目标检测模型,可以使用以下代码来检索模型中所有可学习参数的值:

python
import torch
import torchvision

初始化目标检测模型并加载已经训练好的权重到设备上

model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
device = torch.device(“cuda:0” if torch.cuda.is_available() else “cpu”)
model.to(device)

加载预训练的权重

checkpoint = torch.load(‘path/to/checkpoint.pth’, map_location=device)
model.load_state_dict(checkpoint[‘model_state_dict’])

获取模型中所有可学习参数的值

params = list(model.parameters())
for param in params:
print(param.size(), param)
在以上代码中,我们使用预先训练的Faster R-CNN ResNet-50-FPN模型作为示例。然后,我们将该模型加载到所需的设备上,并使用已经训练好的权重文件来更新模型参数。最后,我们使用“parameters”属性获取它的所有可学习参数,并打印这些参数的尺寸和值。

如果您想查看特定子模型的参数,例如预测框或分类器,可以通过访问相应的属性来实现。例如,以下代码演示了如何检索Faster R-CNN ResNet-50-FPN模型中骨干网络ResNet50的conv1层的所有参数:

python

检索骨干网络ResNet50的conv1层的所有参数

backbone_params = list(model.backbone.conv1.parameters())
for param in backbone_params:
print(param.size(), param)
以上代码将输出Faster R-CNN ResNet-50-FPN模型中骨干网络ResNet50的conv1层的所有参数及其值。
总之,要查看已经训练好的目标检测模型中设置的可学习权重的参数,请导入相应的深度学习框架库,初始化目标检测模型实例并将其加载到所需的设备上,然后通过访问模型的“parameters”属性获取这些参数。要加载已经训练好的权重,您可以使用PyTorch中的“load_state_dict”方法。

-*******************************************************************************************************************

简单来说就是用torch.load把模型中的参数保存到checkpoint当中,然后再提取checkpoint字典当中的参数去查看就ok。
但是yolov5train.py的代码中对模型保存数据有所更改,故步骤如下:
在这里插入图片描述
图1.

这块是保存权重参数的,由代码可知可学习的权重都放到pg1这个列表了。

这里再看一下下面保存模型的代码:
在这里插入图片描述
发现,保存的模型数据只有epoch、best_fitness、…注意:模型的权重参数最后被保存在了optimizer这个词里头,而且, 如果是最后一轮保存的结果,是会被删除的,为此,这里可以修改一下代码,设定为我永久不删除,然后我权重文件****.pt当中就有了可学习权重的参数了,我们就能直接用chatgpt的方法看到了。又或者我们可以直接拿其他轮次的去查看,都可以。

具体改进:
1.改进train.py的保存的部分

            if (not opt.nosave) or (final_epoch and not opt.evolve):  # if save
                ckpt = {'epoch': epoch,
                        'best_fitness': best_fitness,
                        'training_results': results_file.read_text(),
                        'model': deepcopy(model.module if is_parallel(model) else model).half(),
                        'ema': deepcopy(ema.ema).half(),
                        'updates': ema.updates,
                        'optimizer': optimizer.state_dict(),
                        'optimizer_param_groups': optimizer.param_groups,
                        'wandb_id': wandb_logger.wandb_run.id if wandb_logger.wandb else None,
                        'model_state_dict': model.state_dict(),
                        'model_pram': model.parameters(),
                        }

注意:optimizer.state_dict(),保存的形式如下:
optimizer.state_dict():返回一个dict对象,其中储存了优化器的状态信息,包括学习率、动量、weight_decay等参数的值以及每个参数对应的梯度信息。
optimizer.param_groups:返回一个包含优化器参数组(Param Group)的列表,每个Param Group中包含了一些参数和超参数,如学习率lr、权重衰减参数weight_decay、梯度的归一化系数momentum等。
model.state_dict():返回一个dict对象,其中储存了模型的状态信息,包括模型权重和偏差值的参数值,以及每一层的其他超参数设置。
model.parameters():返回一个包含模型所有参数(权重和偏差)的迭代器。
它们的区别在于:

  • optimizer.state_dict()和model.state_dict()都是返回模型的状态信息,但是optimizer.state_dict()中储存的是优化器的具体参数,而model.state_dict()中储存的是模型中的具体参数。
  • optimizer.param_groups是一个列表,其中每个参数组都是优化器的一个子模块,包含了一些参数和超参数。而model.parameters()是一个可迭代对象,包括模型中的所有参数,包括权重和偏差。

为此,我们要查看参数的具体值的时候,可以从model.state_dict()或者model.parameters()或者optimizer.param_groups查看,optimizer.state_dict()则看不了。
在改好以上代码以后,我们再去训练的时候,权重文件就会保存各项参数的具体值了。

2.拿到权重文件在yolo.py中进行查看

    checkpoint = torch.load(r'F:\GuoZhoupeng\训练日志\2023-4-12 yolov5 Ta-conv_w[of 1除以3] have 13(...)\train\exp6\weights\best.pt', map_location=device)
    # model.load_state_dict(checkpoint['model_state_dict'])
    # params = model.state_dict()
    state_dict = checkpoint['state_dict']
    model.load_state_dict(state_dict)
    print(state_dict)
model.load_state_dict(state_dict)
在这里加断点,进行debug,我们查看checkpoint的的内置参数如下:

在这里插入图片描述
可以看到需要的数值都有了,直接在这里面看就ok了

查看权重的具体值,有助于我们分析这个模型,并作出相应改进,非常有用!

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用YOLO(You Only Look Once)来训练自己想要的模型YOLO是一种实时目标检测算法,它可以同时预测图像多个对象的位置和类别。 下面是一个基本的步骤来使用YOLO训练自己的模型: 1. 数据收集:收集包含你想要检测的对象的图像数据集。确保数据集的图像具有各种不同的场景和角度。 2. 标注数据:为每个图像标注对象的边界框和类别。可以使用一些标注工具,如LabelImg或RectLabel来辅助完成这个任务。 3. 数据准备:将数据集划分为训练集和验证集。通常使用80%的数据作为训练集,20%的数据作为验证集。 4. 模型配置:选择一个YOLO的变体(如YOLOv3或YOLOv4)作为基础模型,并进行相应的配置。配置包括设置模型的超参数,如学习率、批量大小等。 5. 模型训练:使用标注好的数据集对模型进行训练。可以使用已经实现好的YOLO框架,如Darknet或YOLOv5,或者自己实现YOLO算法。 6. 模型评估:使用验证集评估训练好的模型的性能。这可以帮助你了解模型的准确度和召回率等指标。 7. 模型优化:根据评估结果来调整模型的超参数或数据集,以提高模型的性能。 8. 模型部署:将训练好的模型部署到你想要应用目标检测的环境,并进行实时检测。 请注意,YOLO算法的训练需要大量的数据和计算资源,并且需要一定的技术知识来处理和训练模型。确保你有足够的时间和资源来完成这个任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值