YOLOv5项目调试与实战

拥有青春的时候

你就要感受它

不要浪费你的黄金时代

把宝贵的内在生命活出来

什么都别错过

一、项目介绍与环境配置

github地址

选择5.0版本的tag,并下载源码

使用Pycharm打开代码

选择解释器,我选择的是之前conda创建的pytorch环境

安装项目所需要用到的包

打开项目的requirements.txt文件,里面有运行项目所需要的包,这是一个好的编码习惯,自己写的代码也可以这样做。

然后在终端运行下载代码

二、利用YOLOv5进行预测

找到detect.py文件,运行代码

可能出现的错误1:

AttributeError: Can't get attribute 'SPPF' on <module 'models.common' from '

解决方案:

1. 自己在官网下载对应的yolov5s.pt模型,然后放到项目里去(推荐)。

2. 按下面方式修改项目代码

 增加代码

class SPPF(nn.Module):
    def __init__(self, c1, c2, k=5):
        super().__init__()
        c_ = c1 // 2
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c_ * 4, c2, 1, 1)
        self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
 
    def forward(self, x):
        x = self.cv1(x)
        with warnings.catch_warnings():
            warnings.simplefilter('ignore')
            y1 = self.m(x)
            y2 = self.m(y1)
            return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))

可能出现的错误2:

  File "/Users/lihui/Documents/ai/anaconda3/envs/pytorch/lib/python3.8/site-packages/torch/nn/modules/upsampling.py", line 157, in forward
    recompute_scale_factor=self.recompute_scale_factor)
  File "/Users/lihui/Documents/ai/anaconda3/envs/pytorch/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1614, in __getattr__
    raise AttributeError("'{}' object has no attribute '{}'".format(
AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'

随着路径找到对应的文件

找到出问题的代码,删掉

应该是python版本导致的问题。

修改完报错之后,再次运行代码

使用不同的模型进行训练,得出的效果不一样。

如我下载下面四个模型,进行测试

训练顺序依次为5s、5m、5l、5x

可以看出选择复杂度更高的模型,训练时间更久,但是效果更好。

检测视频

检测模型会将视频一帧一帧地进行检测,最后将结果输出出来。

进阶玩法

手机下载APP ip摄像头

然后让服务和手机在同一个局域网下,代码的路径改为

http://admin:admin@手机上打开之后显示的IP地址,就能通过手机进行实时的物体检测。

同样,如果要实时检测摄像头拍摄的物体,可以将路径改为摄像头推过来的RTSP流。

参数解释

--weights:模型权重文件的路径。就是使用什么模型来跑,可以指定一个或多个路径,用空格分隔。

--source:数据源的路径或URL。可以是文件夹路径、视频文件路径或者网络摄像头的URL。

--img-size:推理时输入图像的大小(像素)。默认为640。

--conf-thres:目标置信度阈值。检测到的目标的置信度必须大于此阈值才会被接受。比如你检测人的置信度设置为0.8,那么在检测中只有大于0.8概率的才会被检测框框出来。

--iou-thres:非最大值抑制(NMS)的IOU阈值。交并集,取检测最接近的一个检测框。

--device:设备选择,可以是CUDA设备的索引(如0)或者多个设备的索引(如0,1,2,3),也可以是cpu。默认为空字符串,表示使用默认设备。

--view-img:显示结果图像。如果设置了该参数,在跑代码的时候会实时显示检测结果的图像。

--save-txt:保存结果到.txt文件。如果设置了该参数,则会将检测结果保存为文本文件。

--save-conf:在保存的.txt标签中保存置信度。如果设置了该参数,则会在保存的文本标签中包含目标的置信度。

--nosave:不保存图像/视频。如果设置了该参数,则不会保存检测结果的图像或视频。

--classes:按类别过滤。可以指定一个或多个类别的索引,用空格分隔。例如,--classes 0表示只保留类别索引为0的目标。每一个类别的值,比如人的类别是0,如果你设置了classes 0,那么只会检测人。

--agnostic-nms:类别不可知的NMS。如果设置了该参数,则使用类别不可知的非最大值抑制。

--augment:增强推理。如果设置了该参数,则在推理过程中使用数据增强技术,更准确。

--update:更新所有模型。如果设置了该参数,则会更新所有模型。没啥用。

--project:结果保存的项目路径。默认为runs/detect。

--name:结果保存的名称。默认为exp。

--exist-ok:允许覆盖现有的项目/名称。如果设置了该参数,则不会增加项目/名称的后缀。

参数设置tips:

在这里设置你需要的参数,这样每次跑项目你就不用每次在命令行手敲了。

三、训练YOLOv5神经网络

打开train.py训练文件

参数解释

- `--weights`:初始权重文件的路径。选择训练模型,默认为`yolov5s.pt`。

- `--cfg`:模型配置文件(`model.yaml`)的路径。

- `--data`:数据集配置文件(`data.yaml`)的路径。默认为`data/coco128.yaml`。

- `--hyp`:超参数文件的路径。默认为`data/hyp.scratch.yaml`。

- `--epochs`:训练的总轮数,默认为300。

- `--batch-size`:每个批次的样本数。默认为16。

- `--img-size`:训练和测试图像的尺寸。可以指定一个或两个整数值作为列表,例如`--img-size 640 640`。默认为`[640, 640]`。

- `--rect`:使用矩形训练。如果设置了该参数,则训练过程中使用矩形图像而不是正方形图像。不是矩阵的会自动进行填充。

- `--resume`:恢复最近的训练。如果设置了该参数,则会恢复最近一次的训练。

- `--nosave`:只保存最终的检查点。如果设置了该参数,则只保存最后一个轮次的模型检查点。

- `--notest`:只测试最终的轮次。如果设置了该参数,则只在最后一个轮次进行测试。

- `--noautoanchor`:禁用自动锚框检查。

- `--evolve`:演化超参数。如果设置了该参数,则会根据训练过程中的结果自动调整超参数。

- `--bucket`:Google Cloud Storage(GCS)存储桶的路径。

- `--cache-images`:缓存图像以加快训练速度。

- `--image-weights`:使用加权的图像选择进行训练。

- `--device`:设备选择,可以是CUDA设备的索引(如`0`)或者多个设备的索引(如`0,1,2,3`),也可以是`cpu`。

- `--multi-scale`:变化的图像尺寸。如果设置了该参数,则训练过程中会随机调整图像尺寸的大小。

- `--single-cls`:将多类别数据作为单一类别进行训练。

- `--adam`:使用`torch.optim.Adam()`优化器。

- `--sync-bn`:使用`SyncBatchNorm`,只在DDP模式下可用。

- `--local_rank`:DDP参数,不要修改。

- `--workers`:最大数据加载器的工作进程数。

- `--project`:保存结果的项目路径。默认为`runs/train`。

- `--entity`:W&B实体。

- `--name`:保存结果的名称。默认为`exp`。

- `--exist-ok`:允许覆盖现有的项目/名称。

- `--quad`:使用四分之一的数据加载器。

- `--linear-lr`:使用线性学习率。

- `--label-smoothing`:标签平滑的ε值。

- `--upload_dataset`:将数据集上传为W&B的artifact表格。

- `--bbox_interval`:设置W&B的边界框图像日志记录间隔。

- `--save_period`:每隔多少轮保存一次模型。

- `--artifact_alias`:数据集artifact的版本别名。

云端GPU训练模型

谷歌提供的免费网站

官网地址 

将项目打包上传(把不需要的模型与视频删了再打包)

解压缩命令

!unzip /content/yolov5-5.0.zip

删除文件命令

!rm -rf /content/__MACOSX

安装运行代码所需要的环境

%cd /content/yolov5-5.0

!pip install -r requirements.txt

使用tensorboard实时查看运行情况

%load_ext tensorboard

%tensorboard --logdir=runs/train

运行训练代码

!python train.py --rect

训练完之后可以将模型进行导出 best.pt

四、制作和训练自己的数据集

查看下面这篇文章

最后只需要将自己标注好的数据集放到指定的路径,随后在yaml文件中修改需要训练的路径位置即可。

猜你喜欢

转载自blog.csdn.net/2301_76354366/article/details/132127890