贴出一张最近更新的网络结构图,方便读者理解。
这部分属于代码中的配置文件。该代码是xxxx.yaml使用配置文件,通过./models/yolo.py解析文件加了一个输入构成的网络模块。
与config设置的网络不同,不需要进行叠加,只需要在配置文件中对number进行修改即可。
特别说明是2020.7.4更新的那一版。
注意,在yaml文件中空格数其实也是重要的!在建立YAML 对象时,对象键值对使用冒号结构表示 key: value,冒号后面要加一个空格。
depth_multiple 是用在backbone中的number≠1的情况下, 即在Bottleneck层使用,控制模型的深度,yolov5s中设置为0.33,假设yolov5l中有三个Bottleneck,那yolov5s中就只有一个Bottleneck。 因为一般number=1表示的是功能背景的层,比如说下采样Conv、Focus、SPP(空间金字塔池化)。 —————————————————————————————————————— width_multiple 主要是用于设置arguments,例如yolov5s设置为0.5,Focus就变成[32, 3],Conv就变成[64, 3, 2]。 以此类推,卷积核的个数都变成了设置的一半。
yolov5提供了s、m、l、x四种,所有的yaml文件都设置差不多,只有上面2和3的设置不同,作者团队很厉害,只需要修改这两个参数就可以调整模型的网络结构。
根据你的检测层相应增加anchors。
head检测头:一般表示的是经过主干网后输出的特征图,特征图输入head中进行检测,包括类别和位置的检测。
这里改成了PANet head。
# YOLOv5 head head: [[-1, 3, BottleneckCSP, [1024, False]], # 9 [-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, BottleneckCSP, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 4], 1, Concat, [1]], # cat backbone P3 [-1, 3, BottleneckCSP, [256, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]], # 18 (P3/8-small) [-2, 1, Conv, [256, 3, 2]], [[-1, 14], 1, Concat, [1]], # cat head P4 [-1, 3, BottleneckCSP, [512, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]], # 22 (P4/16-medium) [-2, 1, Conv, [512, 3, 2]], [[-1, 10], 1, Concat, [1]], # cat head P5 [-1, 3, BottleneckCSP, [1024, False]], [-1, 1, nn.Conv2d, [na * (nc + 5), 1, 1]], # 26 (P5/32-large) [[], 1, Detect, [nc, anchors]], # Detect(P5, P4, P3) ]贴出一张解析图,与上面的模型不太一样。 更新于2020.7.10
torch.nn.modules.upsampling.Upsample [None, 2, 'nearest']
torch.nn.Upsample(size=None, scale_factor=None, mode=‘nearest’, align_corners=None)
size (int or Tuple[int] or Tuple[int, int] or Tuple[int, int, int], optional) – 根据不同的输入类型制定的输出大小scale_factor (float or Tuple[float] or Tuple[float, float] or Tuple[float, float, float], optional) – 指定输出为输入的多少倍数。如果输入为tuple,其也要制定为tuple类型mode (str, optional) – 可使用的上采样算法,有’nearest’, ‘linear’, ‘bilinear’, ‘bicubic’ and ‘trilinear’. 默认使用’nearest’Detect [15, [[116, 90, 156, 198, 373, 326], [30, 61, 62, 45, 59, 119], [10, 13, 16, 30, 33, 23]]]
对应于./models/yolov5l.yaml的Detect,nc=15, anchors = [[116, 90, 156, 198, 373, 326], [30, 61, 62, 45, 59, 119], [10, 13, 16, 30, 33, 23]]。 [116, 90, 156, 198, 373, 326]代表large anchors(P5),[30, 61, 62, 45, 59, 119]代表medium anchors,[10, 13, 16, 30, 33, 23]代表small anchors。
觉得好的话,记得给个赞哦~ 有什么错误,请在评论区指出。转载请注明出处,谢谢啦!