代码基于yolov5 v6.0
目录:
模型配置文件一般放在 models
文件夹下的 XXX.yaml
文件中,以 yolov5s.yaml
为例:
# YOLOv5 by Ultralytics, GPL-3.0 license
# Parameters
nc: 80 # 类别个数,一定要与使用的数据集保持一致
depth_multiple: 0.33 # 深度倍数,对数量大于1个模块进行数量控制,具体看 yolo.py 中的 parse_model 函数
width_multiple: 0.50 # 宽度倍数,卷积操作中控制卷积核数量,具体看 yolo.py 中的 parse_model 函数
# 检测框的大小
anchors:
- [ 10,13, 16,30, 33,23 ] # P3/8 检测小目标的三个检测框尺寸
- [ 30,61, 62,45, 59,119 ] # P4/16 检测中等目标的三个检测框尺寸
- [ 116,90, 156,198, 373,326 ] # P5/32 检测大目标的三个检测框尺寸
# 1. P3 代表浅层的特征图,浅层的特征图较大包含更多的小目标
# 2. P5 代表深层的特则图,深层的特征图较小包含更多的大目标
# 3. YOLOv5 根据工程经验得到了这3组anchors,可以用于大多数数据集
# 4. 在源代码中是针对 coco 数据集使用 K++ 算法求解出的大、中、小三种大小检测框
# 5. 如果需要修改检测框大小,建议也是用 K++ 算法进行求解
# YOLOv5 v6.0 backbone
# 主干网络使用的模块,用于特征提取,可以替换为其他特征提取网络
# 由于没有分neck模块,故spp写在了backbone部分
backbone:
# 模块格式如下:[from, number, module, args]
# form: 当前的输入来自哪一层的输出, -1 表示上一层
# number: 当前模块的理论重复次数,当该值大于 1 时,与 depth_multiple 共同决定实际重复次数
# module: 模块名字,通过这个类名去 common.py 中寻找相应的类,进行模块化的搭建网络
# args: 搭建模块需要的参数,具体看 common.py 中对应的类的要求
[ [ -1, 1, Conv, [ 64, 6, 2, 2 ] ], # 0-P1/2,模块编号为0
[ -1, 1, Conv, [ 128, 3, 2 ] ], # 1-P2/4
[ -1, 3, C3, [ 128 ] ],
[ -1, 1, Conv, [ 256, 3, 2 ] ], # 3-P3/8
[ -1, 6, C3, [ 256 ] ],
[ -1, 1, Conv, [ 512, 3, 2 ] ], # 5-P4/16
[ -1, 9, C3, [ 512 ] ],
[ -1, 1, Conv, [ 1024, 3, 2 ] ], # 7-P5/32
[ -1, 3, C3, [ 1024 ] ],
[ -1, 1, SPPF, [ 1024, 5 ] ], # 9,模块编号为0
]
# YOLOv5 v6.0 head
# 参数解释同backbone
# 没有区分neck模块,所以head部分包含了PANet+Detect部分
head:
[ [ -1, 1, Conv, [ 512, 1, 1 ] ],
[ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ],
[ [ -1, 6 ], 1, Concat, [ 1 ] ], # cat backbone 接受两层的输出作为输入:[ -1, 6 ] 表示上一层以及编号为 6 的层
[ -1, 3, C3, [ 512, False ] ], # 13,模块编号为13
[ -1, 1, Conv, [ 256, 1, 1 ] ],
[ -1, 1, nn.Upsample, [ None, 2, 'nearest' ] ],
[ [ -1, 4 ], 1, Concat, [ 1 ] ], # cat backbone P3
[ -1, 3, C3, [ 256, False ] ], # 17 (P3/8-small)
[ -1, 1, Conv, [ 256, 3, 2 ] ],
[ [ -1, 15 ], 1, Concat, [ 1 ] ], # cat head P4
[ -1, 3, C3, [ 512, False ] ], # 20 (P4/16-medium)
[ -1, 1, Conv, [ 512, 3, 2 ] ],
[ [ -1, 11 ], 1, Concat, [ 1 ] ], # cat head P5
[ -1, 3, C3, [ 1024, False ] ], # 23 (P5/32-large)
[ [ 18, 21, 24 ], 1, Detect, [ nc, anchors ] ], # Detect(P3, P4, P5)
]