YOLOv5项目调试与实战

news2024/11/27 4:24:30

拥有青春的时候

你就要感受它

不要浪费你的黄金时代

把宝贵的内在生命活出来

什么都别错过

一、项目介绍与环境配置

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文件中修改需要训练的路径位置即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/844392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

map 比较(两个map的key,value 是否一样)

1. 用equals 比较 public static void main(String[] args) {List<Map<String,Object>> list new ArrayList<>();Map<String,Object> map1 new HashMap<>();map1.put("name","郭");map1.put("objId","1&quo…

Linux jq 命令讲解与实战操作(json字符串解析工具)

文章目录 一、概述二、jq 命令安装三、jq 命令语法与示例详解1&#xff09;基本用法2&#xff09;常用选项3&#xff09;查询和过滤1、选择字段2、过滤3、遍历数组4、组合操作 4&#xff09;修改和创建1、修改字段值&#xff1a;2、创建新字段&#xff1a;3、组合操作&#xff…

视频基础知识简介

视频 由一组图像组成&#xff0c;且图像一般为了方便传输或者减少占用空间而被压缩(如H264,265等格式)&#xff0c;最终在显示设备上进行显示。 图像 图像由像素组成&#xff0c;像素又是由RGB组成&#xff0c;每个点的颜色由红绿蓝进行组合形成新的颜色&#xff1b; 分辨率…

[Flask]SSTI1

根据题目提示&#xff0c;这关应该是基于Python flask的模版注入&#xff0c;进入靶场环境后就是一段字符串&#xff0c;而且没有任何提示&#xff0c;有点难受&#xff0c;主要是没有提示注入点 随机尝试一下咯&#xff0c;首先尝试一下guest&#xff0c;GET传参 但是没有反应…

基于Java+SpringBoot+Vue的篮球论坛系统设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

第2章 图像变换

第2章 图像变换 **写得比较粗错&#xff0c;详解后续跟上。**第2章 图像变换2.1 反色变换2.1.1 基本原理2.1.2 源码2.1.3 样例 2.2 线性变换2.2.1 基本原理2.2.2 源码2.2.3 样例加入滚动条 2.3 对数变换2.3.1 基本原理2.3.2 源码2.3.3 样例加入滚动条 2.4 gamma变换2.4.1 基本原…

锐捷VSU技术理论与实验

目录 VSU涉及的相关基础概念 VSU的2种工作模式 VSU的3种设备角色 VSU的4种设备状态 VSU的分裂与合并 VSU建立过程 双主检测 VSU报文转发原理 VSU命令配置 配置VSU 配置双主检测 VSU涉及的相关基础概念 域编号&#xff08;Domain ID&#xff09; Domain ID是VSU的标…

2019年09月 Python(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题 第1题 关于Python的编程环境,下列的哪个表述是正确的? A:Python的编程环境是图形化的; B:Python只有一种编程环境ipython; C:Python自带的编程环境是IDLE; D:用windows自带的文本编辑器也可以给Python编程?,并且也可以在该编辑器下运行; 正确答案…

介绍一个.Net远程日志组件

对于软件开发的阶段和正式运行阶段&#xff0c;我们都需要查看日志来诊断出现的问题。不过&#xff0c;在查看日志时需要登录服务器&#xff0c;找到特定的日志文件&#xff0c;再查看其中的内容&#xff0c;这显然不是很方便。 为了解决这个问题&#xff0c;我们可以使用远程…

按轨迹运行

文章目录 import math import timeimport numpy as np import matplotlib.pyplot as pltdef plot_arrow(x, y, yaw, length=5, width=1):dx = length * math.cos(yaw)dy = length * math.sin(yaw)plt.arrow(x, y, dx, dy, head_length=width, head_width=width)plt.plot([x, x …

9、Kubernetes核心技术 - Volume

目录 一、概述 二、卷的类型 三、emptyDir 四、hostPath 五、NFS 5.1、master服务器上搭建nfs服务器 5.2、各个slave节点上安装nfs客户端 5.3、创建Pod 六、PV和PVC 6.1、PV 6.1.1、PV资源清单文件示例 6.1.2、PV属性说明 6.1.3、PV的状态 6.2、PVC 6.2.1、PVC资…

2023 年实验班选拔试题

比赛链接&#xff0c;邀请码&#xff1a;2023qsb A Zlz’s problem(Easy Version) 题目描述 This is the easy version of this problem. The only difference between the easy and hard versions is the constraints on n n n and m m m. So I won’t even take a glan…

P1049 [NOIP2001 普及组] 装箱问题(背包)(内附封面)

[NOIP2001 普及组] 装箱问题 题目描述 有一个箱子容量为 V V V&#xff0c;同时有 n n n 个物品&#xff0c;每个物品有一个体积。 现在从 n n n 个物品中&#xff0c;任取若干个装入箱内&#xff08;也可以不取&#xff09;&#xff0c;使箱子的剩余空间最小。输出这个最…

【C#学习笔记】数组和索引器

文章目录 数组单维数组多维数组交错数组 索引器类上的索引器方法1方法2 接口中的索引器 数组 数组具有以下属性&#xff1a; 数组可以是一维、多维或交错的。创建数组实例时&#xff0c;将建立纬度数量和每个纬度的长度。 这些值在实例的生存期内无法更改。数值数组元素的默认…

Llama 2:开放基础和微调聊天模型

介绍 大型语言模型(llm)作为高能力的人工智能助手,在复杂的推理任务中表现出色,这些任务需要广泛领域的专家知识,包括编程和创意写作等专业领域。它们可以通过直观的聊天界面与人类进行交互,这在公众中得到了迅速而广泛的采用。 法学硕士的能力是显著的考虑到训练的表面上…

挑战Open AI!!!马斯克宣布成立xAI.

北京时间7月13日凌晨&#xff0c;马斯克在Twitter上宣布&#xff1a;“xAI正式成立&#xff0c;去了解现实。”马斯克表示&#xff0c;推出xAI的原因是想要“了解宇宙的真实本质”。Ghat GPT横空出世已有半年&#xff0c;国内外“百模大战”愈演愈烈&#xff0c;AI大模型的现状…

计算机图形学一:数学基础

数学基础&#xff08;变换矩阵&#xff0c;向量运算等&#xff09; 1.变换矩阵总结 一切物体&#xff08;包括模型&#xff0c;向量等&#xff09;的缩放&#xff0c;旋转&#xff0c;平移&#xff0c;切变等&#xff0c;都可以通过变换矩阵得到。在投影(projection&#xff…

【云原生】kubernetes在Pod中init容器的作用和使用

目录 Pod 中 init 容器 1 init 容器特点 2 使用 init 容器 Pod 中 init 容器 Init 容器是一种特殊容器&#xff0c;在Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本。 1 init 容器特点 init 容器与普通的容器非常像&#xf…

Vue2 第二十节 vue-router(三)

1.路由跳转的replace方法 2.编程式路由导航 3.缓存路由组件 4.两个新的生命周期钩子 一.路由跳转的replace方法 1.作用&#xff1a;控制路由跳转时操作浏览器历史记录的模式 2.浏览器的历史记录模式有两种写入方式&#xff0c;分别为push和replace,push是追加历史记录&am…

监控Redis的关键指标

Redis 也是一个对外服务&#xff0c;所以 Google 的四个黄金指标同样适用于 Redis。 1、延迟 在软件工程架构中&#xff0c;之所以选择 Redis 作为技术堆栈的一员&#xff0c;大概率是想要得到更快的响应速度和更高的吞吐量&#xff0c;所以延迟数据对使用 Redis 的应用程序至…