YOLOv5 网络架构与组件(yolov5s.yaml)

网络可视化工具:netron

在线版本:https://lutzroeder.github.io/netron/

netron 对 pt 格式的权重文件兼容性不好,直接使用 netron 工具打开,无法显示整个网络。

可使用YOLOv5代码中models/export.py脚本将pt权重文件转换为onnx格式,再用netron工具打开,就可以看到YOLOv5网络的整体架构。

# 导出onnx文件
pip install onnx>=1.7.1 -i https://pypi.tuna.tsinghua.edu.cn/simple # for ONNX export
pip install coremltools==4.0 -i https://pypi.tuna.tsinghua.edu.cn/simple # for CoreML export
python models/export.py --weights weights/yolov5s.pt --img 640 --batch 1 

 yolov5s.yaml 解析(YOLOv5 的配置文件)

nc: 80  # number of classes, 数据集上的类别数
# 以下两个参数为缩放因子, 通过这两个参数就可以实现不同复杂度的模型设计
depth_multiple: 0.33  # model depth multiple, 控制网络深度(即控制 BottleneckCSP 的数目)
width_multiple: 0.50  # layer channel multiple, 控制网络宽度, 控制 Conv 通道个数(卷积核数量)
# depth_multiple 表示 BottleneckCSP 模块层的缩放因子,将所有的 BottleneckCSP 模块的 Bottleneck 乘上该参数得到最终个数。控制子模块数量=int(number*depth)
# width_multiple 表示卷积通道的缩放因子,就是将配置里面的 backbone 和 head 部分有关 Conv 通道的设置,全部乘以该系数。控制卷积核的数量=int(number*width)

以上三个参数,会用于模型搭建 yolo.py 文件中

# 读取 yaml 中的 anchors 和 parameters
anchors, nc, gd, gw = d['anchors'], d['nc'], d['depth_multiple'], d['width_multiple'] 

通过深度参数 depth gain, 在搭建每层时, 实际深度 = 理论深度(每一层的参数n)* depth_multiple,起到动态调整模型深度的作用

n = max(round(n * gd), 1) if n > 1 else n  # depth gain

在模型中间层的每一层的实际输出 channel = 理论channel(每一层的参数c2)* width_multiple,起到动态调整模型宽度的作用。

# 控制宽度(卷积核个数)的代码
c2 = make_divisible(c2 * gw, 8) if c2 != no else c2
# anchors  先验框的配置
anchors:
  # 三个不同尺度的先验框
  - [10,13, 16,30, 33,23]  # P3/8  检测小目标,第一个先验框宽为10,高为13
  - [30,61, 62,45, 59,119]  # P4/16  检测中目标,P4即stride=16(经过了16倍的下采样以后尺度上的anchor的大小)
  - [116,90, 156,198, 373,326]  # P5/32 检测大目标,对应原图上 anchor 的大小也是最大的

yolov5 初始化了 9 个 anchors,在三个 Detect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值