我想为 YOLO 生成分析,我正在使用ultralytics /yolov5的yolo.py,它们预先构建了所有东西来运行分析,从而获得每一层的延迟。
所以我运行以下命令来获取输出:
import torch
import torchvision
device = torch.device("cuda:0")
model = torch.hub.load('ultralytics/yolov5', 'yolov5s', force_reload=True)
img = torch.rand(8 if torch.cuda.is_available() else 1, 3, 320, 320).to(device)
y = model(img, profile=True)
所以当我运行这个时,我得到以下运行时错误和一些输出
time (ms) GFLOPS params module
1.25 1.44 3520 models.common.Focus
0.66 1.90 18560 models.common.Conv
1.72 1.93 18816 models.common.C3
0.46 1.89 73984 models.common.Conv
1.95 4.02 156928 models.common.C3
0.33 1.89 295424 models.common.Conv
1.31 4.00 625152 models.common.C3
0.39 1.89 1180672 models.common.Conv
0.68 1.05 656896 models.common.SPP
0.69 1.89 1182720 models.common.C3
0.20 0.21 131584 models.common.Conv
0.05 0.00 0 torch.nn.modules.upsampling.Upsample
0.06 0.00 0 models.common.Concat
0.70 2.32 361984 models.common.C3
0.17 0.21 33024 models.common.Conv
0.06 0.00 0 torch.nn.modules.upsampling.Upsample
0.10 0.00 0 models.common.Concat
0.80 2.33 90880 models.common.C3
0.27 0.95 147712 models.common.Conv
0.03 0.00 0 models.common.Concat
0.68 1.90 296448 models.common.C3
0.26 0.94 590336 models.common.Conv
0.03 0.00 0 models.common.Concat
0.60 1.89 1182720 models.common.C3
---------------------------------------------------------------------------
RuntimeError Traceback (most recent call last)
<ipython-input-7-f21874f58c27> in <module>()
1 img = torch.rand(8 if torch.cuda.is_available() else 1, 3, 320, 320).to(device)
----> 2 y = model(img, profile=True)
10 frames
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
887 result = self._slow_forward(*input, **kwargs)
888 else:
--> 889 result = self.forward(*input, **kwargs)
890 for hook in itertools.chain(
891 _global_forward_hooks.values(),
/usr/local/lib/python3.7/dist-packages/torch/autograd/grad_mode.py in decorate_context(*args, **kwargs)
25 def decorate_context(*args, **kwargs):
26 with self.__class__():
---> 27 return func(*args, **kwargs)
28 return cast(F, decorate_context)
29
/root/.cache/torch/hub/ultralytics_yolov5_master/models/common.py in forward(self, imgs, size, augment, profile)
253 if isinstance(imgs, torch.Tensor): # torch
254 with amp.autocast(enabled=p.device.type != 'cpu'):
--> 255 return self.model(imgs.to(p.device).type_as(p), augment, profile) # inference
256
257 # Pre-process
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
887 result = self._slow_forward(*input, **kwargs)
888 else:
--> 889 result = self.forward(*input, **kwargs)
890 for hook in itertools.chain(
891 _global_forward_hooks.values(),
/root/.cache/torch/hub/ultralytics_yolov5_master/models/yolo.py in forward(self, x, augment, profile)
122 return torch.cat(y, 1), None # augmented inference, train
123 else:
--> 124 return self.forward_once(x, profile) # single-scale inference, train
125
126 def forward_once(self, x, profile=False):
/root/.cache/torch/hub/ultralytics_yolov5_master/models/yolo.py in forward_once(self, x, profile)
134 t = time_synchronized()
135 for _ in range(10):
--> 136 _ = m(x)
137 dt.append((time_synchronized() - t) * 100)
138 if m == self.model[0]:
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
887 result = self._slow_forward(*input, **kwargs)
888 else:
--> 889 result = self.forward(*input, **kwargs)
890 for hook in itertools.chain(
891 _global_forward_hooks.values(),
/root/.cache/torch/hub/ultralytics_yolov5_master/models/yolo.py in forward(self, x)
44 self.training |= self.export
45 for i in range(self.nl):
---> 46 x[i] = self.m[i](x[i]) # conv
47 bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85)
48 x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py in _call_impl(self, *input, **kwargs)
887 result = self._slow_forward(*input, **kwargs)
888 else:
--> 889 result = self.forward(*input, **kwargs)
890 for hook in itertools.chain(
891 _global_forward_hooks.values(),
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/conv.py in forward(self, input)
397
398 def forward(self, input: Tensor) -> Tensor:
--> 399 return self._conv_forward(input, self.weight, self.bias)
400
401 class Conv3d(_ConvNd):
/usr/local/lib/python3.7/dist-packages/torch/nn/modules/conv.py in _conv_forward(self, input, weight, bias)
394 _pair(0), self.dilation, self.groups)
395 return F.conv2d(input, weight, bias, self.stride,
--> 396 self.padding, self.dilation, self.groups)
397
398 def forward(self, input: Tensor) -> Tensor:
RuntimeError: Expected 4-dimensional input for 4-dimensional weight [255, 128, 1, 1], but got 5-dimensional input of size [8, 3, 40, 40, 85] instead
你能告诉我如何才能没有错误地获得这个输出吗?要接收的输出:
time (ms) GFLOPS params module
0.93 1.44 3520 models.common.Focus
0.52 1.90 18560 models.common.Conv
1.31 1.93 18816 models.common.C3
0.38 1.89 73984 models.common.Conv
1.58 4.02 156928 models.common.C3
0.37 1.89 295424 models.common.Conv
1.48 4.00 625152 models.common.C3
0.51 1.89 1180672 models.common.Conv
0.79 1.05 656896 models.common.SPP
0.98 1.89 1182720 models.common.C3
0.18 0.21 131584 models.common.Conv
0.03 0.00 0 torch.nn.modules.upsampling.Upsample
0.05 0.00 0 models.common.Concat
0.87 2.32 361984 models.common.C3
0.16 0.21 33024 models.common.Conv
0.05 0.00 0 torch.nn.modules.upsampling.Upsample
0.09 0.00 0 models.common.Concat
0.81 2.33 90880 models.common.C3
0.35 0.95 147712 models.common.Conv
0.03 0.00 0 models.common.Concat
0.80 1.90 296448 models.common.C3
0.35 0.94 590336 models.common.Conv
0.03 0.00 0 models.common.Concat
1.04 1.89 1182720 models.common.C3
0.69 1.47 229245 Detect
14.4 ms total