yolov5中两处scale讨论

本文探讨了YoloV5中hyp文件的scale参数和train文件的multi-scale选项对训练的影响。当hyp.scale=0.5时,输入图片大小可能在320~640之间。实验表明,启用--multi-scale训练可能导致mAP下降,但train_batch0图片质量不受影响。通过对比不同设置下的train_batch0图片,分析了参数变化对模型训练的视觉效果。
摘要由CSDN通过智能技术生成

第一处:hyp文件中的scale: 0.5;

第二处:train文件中multi-scale(if opt.multi_scale: sz = random.randrange(imgsz * 0.5, imgsz * 1.5 + gs) // gs * gs # size)。

结论1:hyp.scale = 0.5(假如input=640)就代表着参与训练的图片的输入可能是320~640×1.5(小于640的部分会被补上黑边,大于640的部分会被裁掉)。

结论2:train的时候选择--multi-scale,我的mAP会降低,但是train_batch0里的图片和不选择--multi-scale一样.(需要继续探讨,已经issuehttps://github.com/ultralytics/yolov5/issues/7659)

jocher的回复如下。

实验过程(mosaic均 = 0):

1.hyp.scale = 0;multis_cale = 0 时,train_batch0图片如下所示:

2.hyp.scale = 0;multis_cale = 0.2 时,train_batch0图片如下所示:

3.hyp.scale = 0.2;multis_cale = 0 时,train_batch0图片如下所示:

4.hyp.scale = 0.2;multis_cale = 0.2 时,train_batch0图片如下所示:

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
Yolov5CSP是Yolov5的一种改进版本,它采用了CSP(Cross Stage Partial)结构,可以在保证精度的情况下大幅提升检测速度。CSP结构是一种跨阶段部分连接的结构,可以减少参数数量和计算量,同时提高模型的表现力。在Yolov5CSP,CSP结构被应用于骨干网络和特征金字塔网络,使得模型在速度和精度上都有了很大的提升。 以下是Yolov5CSP的网络结构示意图: ```python # CSPDarknet53 def cspdarknet53(pretrained, **kwargs): model = CSPDarknet([1, 2, 8, 8, 4], **kwargs) if pretrained: if isinstance(pretrained, str): model.load_state_dict(torch.load(pretrained)) else: raise Exception("darknet request a pretrained path. got [{}]".format(pretrained)) return model # YOLOv5 CSP class YOLOv5CSP(nn.Module): def __init__(self, num_classes=80, width_mult=1.0, **kwargs): super(YOLOv5CSP, self).__init__() self.backbone = cspdarknet53(pretrained=True, **kwargs) self.neck = nn.Sequential( SPPBottleneck(c3=self.backbone.out_channels[-1], c4=512, k=5, s=1, p=2, e=0.5), nn.Conv2d(512, 256, kernel_size=1, stride=1, padding=0), nn.BatchNorm2d(256), nn.LeakyReLU(0.1, inplace=True) ) self.heads = nn.ModuleList([ YOLOv5Head(c=1024, n=3, num_classes=num_classes), YOLOv5Head(c=512, n=3, num_classes=num_classes), YOLOv5Head(c=256, n=3, num_classes=num_classes) ]) self.num_classes = num_classes self.width_mult = width_mult def forward(self, x): x = self.backbone(x) x = self.neck(x) z = [] for i, head in enumerate(self.heads): z.append(head(x)) if i < len(self.heads) - 1: x = self._upsample(x) x = torch.cat([x, self.backbone.out[i]], 1) x = self.neck(x) return z def _upsample(self, x): return F.interpolate(x, scale_factor=2, mode='nearest') ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值