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 // 2self.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.rhkb.cn/news/79893.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go-zero超强工具goctl的常用命令api,rpc,model及其构建的服务解析

goctl api 详情移步&#xff1a; go-zero的路由机制解析 基于go-zero的api服务刨析并对比与gin的区别 goctl rpc goctl支持多种rpc&#xff0c;较为流行的是google开源的grpc&#xff0c;这里主要介绍goctl rpc protoc的代码生成与使用。 protoc是grpc的命令&#xff0c;作用…

Flowise AI:用于构建LLM流的拖放UI

推荐&#xff1a;使用NSDT场景编辑器助你快速搭建可二次编辑的3D应用场景 什么是Flowise AI&#xff1f; Flowise AI是一个开源的UI可视化工具&#xff0c;用于帮助开发LangChain应用程序。在我们详细介绍 Flowise AI 之前&#xff0c;让我们快速定义 LangChain。LangChain是…

powershell几句话设置环境变量

设置环境变量比较繁琐&#xff0c;现在用这段话&#xff0c;在powershell中就可以轻松完成。 $existingPath [Environment]::GetEnvironmentVariable("Path", "Machine") $newPath "C:\Your\Path\Here"if ($existingPath -split ";"…

MySQL(1)

MySQL创建数据库和创建数据表 创建数据库 1. 连接 MySQL mysql -u root -p 2. 查看当前的数据库 show databases; 3. 创建数据库 create database 数据库名; 创建数据库 4. 创建数据库时设置字符编码 create database 数据库名 character set utf8; 5. 查看和显示…

Doris(四)-Rollup 使用

1&#xff0c;基本语法 1.1 新增 alter table user_landing_record_newadd rollup succ_login_count_index(user_id,day_succ_login_count); 1.2删除 alter table user_landing_record_newdrop rollup succ_login_count_index; 1.3其他操作&#xff0c;参考官网 传送门 …

【新】通达OA前台反序列化漏洞分析

0x01 前言 注&#xff1a;本文仅以安全研究为目的&#xff0c;分享对该漏洞的挖掘过程&#xff0c;文中涉及的所有漏洞均已报送给国家单位&#xff0c;请勿用做非法用途。 通达OA作为历史上出现漏洞较多的OA&#xff0c;在经过多轮的迭代之后已经很少前台的RCE漏洞了。一般来说…

RabbitMQ的安装

RabbitMQ的安装 1、Windows环境下的RabbitMQ安装步骤 使用的版本&#xff1a;otp_win64_23.2 rabbitmq-server-3.8.16 版本说明&#xff1a;https://www.rabbitmq.com/which-erlang.html#compatibility-matrix 1.1 下载并安装erlang RabbitMQ 服务端代码是使用并发式语言…

探讨|使用或不使用机器学习

动动发财的小手&#xff0c;点个赞吧&#xff01; 机器学习擅长解决某些复杂问题&#xff0c;通常涉及特征和结果之间的困难关系&#xff0c;这些关系不能轻易地硬编码为启发式或 if-else 语句。然而&#xff0c;在决定 ML 是否是当前给定问题的良好解决方案时&#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 …

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本

Spring Boot、Spring Cloud、Spring Alibaba 版本对照关系及稳定兼容版本 引言 在 Java 生态系统中&#xff0c;Spring Boot、Spring Cloud 和 Spring Alibaba 是非常流行的框架&#xff0c;它们提供了丰富的功能和优雅的解决方案。然而&#xff0c;随着不断的发展和更新&…

SSM项目-博客系统

在线体验项目&#xff1a;登陆页面 项目连接&#xff1a;huhublog_ssm: 个人博客系统 技术栈&#xff1a;SpringBoot、SpringMVC、Mybatis、Redis、JQuery、Ajax、Json (gitee.com) 1.项目技术点分析 SpringBoot、SpringWeb(SpringMVC)、MyBatis、MySQL(8.x)、Redis(存储验…

EXCEL, 用if({1,0,0} ...) 实现把给定的区域,输出为任意你想要的矩阵,数组区域!

目录 1 原材料&#xff1a;这样的一个区域 工具 if({1,0,0}) 数组公式 1.1 原始数据 1.2 原理 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.1 if(0/1,t-value,f-value)---变形--->if({},range1,range2) 1.2.2 原理1&#xff1a; if 数组原理&#…

【无标题】云原生在工业互联网的落地及好处!

什么是工业互联网&#xff1f; 工业互联网&#xff08;Industrial Internet&#xff09;是新一代信息通信技术与工业经济深度融合的新型基础设施、应用模式和工业生态&#xff0c;通过对人、机、物、系统等的全面连接&#xff0c;构建起覆盖全产业链、全价值链的全新制造和服务…

【Pycharm2022.2.1】python编辑器最新版安装教程(包含2017-2022的所有版本win/mac/linux)

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 永久安装 Pycharm&#xff08;2017-2022的win/mac/linux所有版本&#xff09;/ IntelliJ IDEA也可以, 按照本文教程所写的&#xff0c;具体步骤跟着下面的图文教程一步一步来就行&#xff0c;一分钟即可搞定&#xff0c;过…

红队钓鱼技术之LNK快捷方式

简介 lnk文件是用于指向其他文件的一种文件。这些文件通常称为快捷方式文件&#xff0c;通常它以快捷方式放在硬盘上&#xff0c;以方便使用者快速的调用。lnk钓鱼主要将图标伪装成正常图标&#xff0c;但是目标会执行shell命令 步骤 1.编写shell命令 首先新建一个文本文件t…

vuejs源码分析之全局API(vm.$off)

vue在初始化的时候会给vue对象本身挂载一些全局的api。今天我们一个一个来看这些api。 vm.$off方法 这个方法是用来移除自定义事件监听器。 他的用法 vm.$off(event, calback)第一个参数event取值可以是string字符串&#xff0c;也可以是Array<string>也就是说既可以删…

无涯教程-Perl - each函数

描述 在列表context中调用此函数时,将返回一个由2个元素组成的列表,该列表由哈希的下一个元素的键和值组成,以便您可以对其进行迭代。在标量context中调用时,仅返回哈希中下一个元素的键。 语法 以下是此函数的简单语法- each HASH返回值 在列表context中调用此函数时,将返…

如何使用 reqwest 包

GET 请求 向连接发起一个 GET 请求&#xff1a;https://hacker-news.firebaseio.com/v0/topstories.json&#xff0c;并解析返回的内容。 尝试发起请求 因为是 GET 请求&#xff0c;可以先在浏览器中进行查看&#xff0c;浏览器可以正常显示一个 id 列表&#xff0c;如下所示…

P1629 邮递员送信(最短路)(内附封面)

邮递员送信 题目描述 有一个邮递员要送东西&#xff0c;邮局在节点 1 1 1。他总共要送 n − 1 n-1 n−1 样东西&#xff0c;其目的地分别是节点 2 2 2 到节点 n n n。由于这个城市的交通比较繁忙&#xff0c;因此所有的道路都是单行的&#xff0c;共有 m m m 条道路。这…

嵌入式:C高级 Day4

一、整理思维导图 二、写一个函数&#xff0c;获取用户的uid和gid并使用变量接收 三、整理冒泡排序、简单选择排序和快速排序的代码 冒泡排序 #include <myhead.h>void output(int arr[], int len); void bubble_sort(int arr[], int len);int main(int argc, const ch…