yolov5中yolo.py的from utils与from models提示报错解决方法

 

 

 

报错原因:pycharm误以为from utils与from models等等是要导入第三方库或包,但是我们yolo.py其实需要导入的是yolov5文件目录下的utils和models文件夹中的已定义好的程序或者函数,也就是两者“重名了”,解决方法就是如上图所示的步骤,将yolov5工程文件夹标记为resource root(源根),如最后一张图所示,报错消失。 

 

yolov5是一个目标检测算法,yolo.py是其的一个核心文件,主要实现了模型的构建和训练。下面是yolo.py的代码详解: 1. 导入必要的库和模块 ```python import torch import torch.nn as nn import numpy as np from collections import OrderedDict from utils.general import anchors, autopad, scale_img, check_anchor_order, check_file, check_img_size, \ check_requirements, non_max_suppression, xyxy2xywh, xywh2xyxy, plot_one_box from utils.torch_utils import time_synchronized, fuse_conv_and_bn, model_info from models.common import Conv, DWConv ``` 2. 定义YOLOv5模型 ```python class YOLOv5(nn.Module): def __init__(self, nc=80, anchors=(), ch=(), inference=False): # model, input channels, number of classes super(YOLOv5, self).__init__() self.nc = nc # number of classes self.no = nc + 5 # number of outputs per anchor self.nl = len(anchors) # number of detection layers self.na = len(anchors[0]) // 2 # number of anchors per layer self.grid = [torch.zeros(1)] * self.nl # init grid a = torch.tensor(anchors).float().view(self.nl, -1, 2) self.register_buffer('anchors', a) # shape(nl,na,2) self.register_buffer('anchor_grid', a.clone().view(self.nl, 1, -1, 1, 1, 2)) # shape(nl,1,na,1,1,2) self.m = nn.ModuleList(nn.Conv2d(x, self.no * self.na, 1) for x in ch) # output conv self.inference = inference # inference flag ``` 3. 定义前向传播函数 ```python def forward(self, x): self.img_size = x.shape[-2:] # store image size x = self.forward_backbone(x) # backbone z = [] # inference output for i in range(self.nl): x[i] = self.m[i](x[i]) # conv bs, _, ny, nx = x[i].shape # x(bs,255,20,20) to x(bs,3,20,20,85) x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous() if not self.training: # inference if self.inference == 'tflite': z.append(x[i].detach().cpu()) # inference tflite else: io = x[i].sigmoid() io[..., 4:] = io[..., 4:] * io[..., 4:].mean(1, keepdim=True) * self.nc # sigmoid obj,class scores bxy = io[..., :2].sigmoid() * 2. - 0.5 + self.grid[i] # xy bwh = io[..., 2:4].exp() * self.anchor_grid[i] # wh xywh = torch.cat((bxy, bwh), -1).view(bs, -1, 4) * self.stride[i] # xywh (center+offset) relative to image size z.append(xywh.view(bs, -1, self.no), ) # xywhn return x if self.training else (torch.cat(z, 1), x) ``` 4. 定义后向传播函数 ```python def forward_backbone(self, x): x = self.conv1(x) x = self.bn1(x) x = self.act1(x) x = self.pool1(x) x = self.layer1(x) x = self.layer2(x) x = self.layer3(x) x = self.layer4(x) x = self.layer5(x) x = self.layer6(x) x = self.layer7(x) x = self.layer8(x) x = self.layer9(x) return x ``` 以上就是yolo.py的代码详解,其包括了YOLOv5模型的定义和前向传播函数的实现。相关问题如下: 相关问题: 1. YOLOv5模型的输入和输出是什么? 2. YOLOv5模型的训练过程是怎样的? 3. YOLOv5模型的anchors是什么?
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值