为什么yolov8使用torch.zeros(1, ch, s, s)作为前向传递的输入来计算模型步幅?

问题描述 投票:0回答:1

这是来自 yolov8 代码库的 task.py 的一部分。

m = self.model[-1] # Detect()
if isinstance(m, (Detect, Segment, Pose)):
 s = 256 # 2x min stride
 m.inplace = self.inplace
 forward = lambda x: self.forward(x)[0] if isinstance(m, (Segment, Pose)) else self.forward(x)
 m.stride = torch.tensor([s / x.shape[-2] for x in forward(torch.zeros(1, ch, s, s))]) # forward
 self.stride = m.stride
 m.bias_init() # only run once
else:
 self.stride = torch.Tensor([32]) # default stride for i.e. RTDETR

那么为什么 yolov8 使用 torch.zeros(1, ch, s, s)(在本例中为 (1,3,256,256))作为前向传递的输入来计算模型步幅? yolov8 不是有默认的 stride 32 吗? 有人可以解释一下不同的任务,比如检测、分割和姿势,会有不同的步幅吗?

我在 yolov8 repo 中问过同样的问题https://github.com/orgs/ultralytics/discussions/4492

pytorch object-detection yolov8
1个回答
0
投票

步幅大小不同的原因是针对各种任务,如果您正在进行对象检测,则需要显着的步幅来检测图像中更好的对象,对于分割,您需要识别每个对象的边界,因此我们需要小步幅,对于姿势估计,中等步幅的大小小于目标检测,但大于分割任务的步幅,这就是为什么它会有不同大小的步幅

© www.soinside.com 2019 - 2024. All rights reserved.