如何查看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了

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

### 查看 YOLOv8 模型参数及结构详情的方法 在深度学习框架中,了解模型参数和结构对于优化性能至关重要。以下是关于如何查看 YOLOv8 模型参数及结构详情的具体方法。 #### 使用 PyTorch 加载模型并打印摘要 YOLOv8 是由 Ultralytics 提供的一个高效目标检测模型,在 PyTorch 中可以轻松加载该模型并获取其详细信息。以下是一个简单的 Python 脚本用于展示模型架构和参数数量: ```python from ultralytics import YOLO # 加载预训练的 YOLOv8 模型 model = YOLO("yolov8n.pt") # 打印模型概要 print(model.model) # 显示完整的网络层结构 ``` 上述代码会输出模型每一层的信息以及总的参数量[^1]。 #### 利用 `summary` 方法统计参数 如果希望更清晰地看到每层的参数分布情况,可以通过如下方式获得详细的总结表: ```python import torch from torchinfo import summary # 假设输入图像尺寸为 (batch_size, channels, height, width) input_size = (1, 3, 640, 640) # 获取模型参数汇总 summary(model=model, input_size=input_size, verbose=1) ``` 这段脚本利用了第三方库 `torchinfo` 来生成更加直观易读的模型参数报告,其中包括各模块的权重数目、总参数量等重要指标[^2]。 #### 关于 CSPPC 结构的影响分析 CSPPC(Cross Stage Partial Convolution)作为一种改进版卷积操作被引入到 YOLOv8 当中,主要目的是为了提高计算效率同时减少不必要的冗余连接。这种新型组件通过部分卷积机制实现了资源的有效分配,从而使得整体网络能够在维持较高精度的前提下大幅削减所需的浮点运算次数(FLOPs)。 #### INT8 量化对模型参数的作用 当启用 INT8 量化选项时,原始 FP32 或者 BF16 类型的数据会被转换成更低精度的形式存储下来,这样不仅可以压缩文件体积而且还能加快推理速度。不过需要注意的是,这一过程通常伴随着一定程度上的准确性损失;因此实际部署前应当仔细权衡利弊,并考虑是否有必要重新校准某些敏感部位以弥补潜在误差[^3]。 ### 总结 综上所述,借助官方 API 可方便快捷地探索 YOLOv8 的内部组成要素,而针对特定需求则可通过额外工具深入剖析各个维度的表现特征。此外,考虑到不同应用场景下的特殊约束条件(比如移动端设备内存有限),合理运用诸如 CSPPC 架构或者 INT8 技术手段往往能带来意想不到的效果增益。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值