YOLOv7(目标检测)入门教程详解---检测,推理,训练

目录

一.前言

二.yolov7源码下载

三.detect(检测)

四.Train(训练)

数据准备:

labellmg:

配置训练的相关文件

 配置数据集文件

正式训练:

推理:

推理效果:

五.总结


一.前言

    上篇文章:YOLOv7(目标检测)入门教程详解---环境安装 我们将yolov7外部需要的环境已经全部安装完成,那么这篇文章我们直接进行yolov7的实战----检测,推理,训练。

二.yolov7源码下载

下载网址:GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors

点击Code,Download ZIP  把yolov7的源码包下载下来 

 下载好后打开yolov7源码包

在文件路径输入cmd进入终端

 之后在终端activate进入之前创建的环境,并且输入

pip install -r requirements.txt

强调:关掉电脑VPN 

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple,输入这个指令可能会更快一点

我是之前安装过后,所有再输入安装指令后就会显示全部满足,你们也可以通过这样查看自己是否安装成功

 此时我们来到官网下载权重,一个是Test用的yolov7.pt

一个是之后 Train 用的yolov7_training.pt

 在yolov7的文件夹路径下建一个weights文件夹,然后把刚刚下载好的两个权重放进去。

 此刻基本需要的环境和文件都已经准备完成了,接下来我们就可以进行detect(检测了)

三.detect(检测)

进入虚拟环境,输入以下指令 

python detect.py --weights weights/yolov7.pt --source inference/images 

 --weights 指令就是代表权重 --source 是照片存在的路径

 检测过程如下

 这里可以使用GPU和CPU两种方式进行检测,因为我们之前装了cuda和cudnn所以可以用GPU

只不过我们需要输入--device 0 这个指令,不输入则默认为CPU,我是改了detect源码里面的指令

还有更多操作,我们可以打开detect.py进行查看

 

 如果你只有cpu就默认cpu,如果是一个gpu就选择--device 0 两块cpu就--deivce 1,以此类推。

我们来看看我们训练之后的结果,进入runs-->detect-->exp 里面有所有预测好的照片

 

四.Train(训练)

参考博客:【小白教学】如何用YOLOv7训练自己的数据集 - 知乎

数据准备:

我们生成/datasets/文件夹,把数据都放进这个文件夹里进行统一管理。训练数据用的是yolo数据格式,不过多了两个.txt文件,这两个文件存放的,是每个图片的路径,后面会具体介绍。

那么接下来yolo数据集的整体格式如下:

 Helmet是你想检测的东西名称,我检测的是圆环所以命名为circle

 进入circle文件夹之后,会看到有images 和labels的文件夹,一个是拿来放图片的,一个是拿来存images文件夹中处理jpg图片之后的txt数据

打开images文件夹,我们又要建两个文件夹:train 和 val,并且把想要训练的照片放进去,两个都放差不多数量

 打开labels文件夹,同样建两个文件train和val,然后就ok了

接下来我们就要用到一个软件去处理我们的图片,将其转化为yolo格式

labellmg:

参考博客:labelImg使用教程_G果的博客-CSDN博客_labelimg

 进入终端,输入指令进行下载

输入labellmg打开软件 

 然后我们使用labellmg进行对图片的处理,首先open dir选择图片路径,我们先选择刚刚创建的datasets/circle/images/train  然后change save dir选择datasets/circle/labels/train,这样我们对image的每张图片的处理都会储存进label中  之后val也是同理。

之后就把每一个你想训练的目标给框出来然后进行命名,但是必须要改成YOLO格式

之后打开我们的labels就能发现里面储存了images中每张图片对应的txt文件

然后我们进入datasets/circle文件夹下面,建立两个txt文件,train.txt  val.txt,这两个文件分为写入所有images中train和val中的照片路径

配置训练的相关文件

  总共有两个文件需要配置,一个是/yolov7/cfg/training/yolov7.yaml,这个文件是有关模型的配置文件;一个是/yolov7/data/coco.yaml,这个是数据集的配置文件。

第一步,复制yolov7.yaml文件到相同的路径下,然后重命名,我们重命名为yolov7-Helmet.yaml

第二步,打开yolov7-circle.yaml文件,进行如下图所示的修改,这里修改的地方只有一处,就是把nc修改为我们数据集的目标总数即可。然后保存。

 配置数据集文件

第一步,复制coco.yaml文件到相同的路径下,然后重命名,我们命名为circle.yaml

第二步,打开circle.yaml文件,进行如下所示的修改,需要修改的地方为5处。第一处:把代码自动下载COCO数据集的命令注释掉,以防代码自动下载数据集占用内存;第二处:修改train的位置为train.txt的路径;第三处:修改val的位置为val.txt的路径;第四处:修改nc为数据集目标总数;第五处:修改names为数据集所有目标的名称。然后保存。

我的参照上图改好如下 

之后我们就可以进行训练了!!!

正式训练:

此时我们在yolov7文件夹路径下cmd,并且进入虚拟环境,输入指令

python train.py --weights weights/yolov7_training.pt --cfg cfg/training/yolov7-circlr.yaml --data data/circlr.yaml --device 0 --batch-size 8 --epoch 300

这里对里面的参数进行解释

--cfg 接受模型配置的参数

--data 接收数据配置的参数

--device 0  训练类型,我是一块GPU 所以用0

--batch-size 8  GPU内存大小决定

--epoch 训练次数,建议300

--weights 训练的权重

训练到最后我们就会得到一个last 和best的pt文件,那么我们直接把best.pt拿出来使用就ok了

推理:

我们已经获得了自己训练出来的权重了,那么这个时候推理,其实跟之前检测的道理是一样的,唯一变换的就是我们的权重文件和自己检测的照片 。

这个时候我们在datasets文件夹下面建立一个textimages文件夹和textvideo文件夹,分别用来储存要被检测的图片和视频

 

 跟detect一样,进入虚拟环境输入权重路径和图片路径就ok了,指令如下

我是把best.pt直接拉到了yolov7文件夹路径下面,你们刚刚训练出来的在runs/train/circle/weights/best.pt

python detect.py --weights best.pt --source datasets/textimages --device 0

 

 可以看到用gpu训练的yolov7是相当的快,我显卡是3070的,大概一张照片15ms左右的样子,如果用CPU的话,速度要慢十倍左右

推理效果:

我打开runs/detect/exp查看我们的训练效果

 

 可以说效果是非常好的,方框上面的数值就是置信度了,只要训练的好,yolov7的处理能力非常的强大。

五.总结

  那么yolov7的检测,训练,推理的全部流程都已经可以实现了,但是这个是基于python环境下的,如果有特殊的需求需要在c++环境下去进行yolo检测的话,那就又另有一方折腾了,我会在之后的博客中说到如何在c++中去使用yolov7检测。

有相关问题可以私信我进行讨论

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis Generator 插件 详解自动生成代码

MyBatis Generator(MBG)是MyBatis和iBATIS的代码生成器。可以生成简单CRUD操作的XML配置文件、Mapper文件(DAO接口)、实体类。实际开发中能够有效减少程序员的工作量,甚至不用程序员手动写sql。 它将为所有版本的MyBatis以及版本2.2.0之后的i…

如何在3dMax中使用Python按类型选择对象?

如何在3dMax中使用Python按类型选择对象? 3dMax提供了pymxs API,这是MAXScript的Python包装器,可帮助您扩展和自定义3dMax,并更轻松地将其集成到基于Python的管道中。 pymxs模块包含一个运行时成员,该成员提供对MAXSc…

2021秋招-数据结构-栈、队列、数组、列表

栈、队列、数组、列表 实现方式 队列 class Queue:def __init__(self):self.items []def enqueue(self, item):self.items.append(item)def dequeue(self):return self.items.pop(0)def empty(self):return self.size() 0def size(self):return len(self.items)应用: 约瑟…

redis的数据类型的增删改查

redis的高可用 在集群中有一个非常重要的指标,提供服务的时间的百分比(365天)99.9% redis的高可用含义更加宽泛,正常服务是指标之一,数据容量的扩展,数据的安全性 在redis中实现高可用技术 持久化&…

【Flink】Process Function

目录 1、ProcessFunction解析 1.1 抽象方法.processElement() 1.2 非抽象方法.onTimer() 2、Flink中8个不同的处理函数 2.1 ProcessFunction 2.2 KeyedProcessFunction 2.3 ProcessWindowFunction 2.4 ProcessAllWindowFunction 2.5 CoProcessFunction 2.6 ProcessJo…

CentOS7安装Docker遇到的问题笔记

笔记/朱季谦 以下是笔者本人学习搭建docker过程当中记录的一些实践笔记,过程当中也遇到了一些坑,但都解决了,就此记录,留作以后再次搭建时可以直接参考。 一、首先,先检查CentOS版本,保证在CentOS7版本以…

智能座舱架构与芯片 - (3) 硬件篇 上

一、介绍 在了解智能座舱的基本架构之后,我们有必要针对智能座舱域的硬件平台,软件平台,SOC等进行逐一介绍。从它们的整体结构中去认识最新的智能座舱组成部件,以及主要功能等。 如上图,是中央计算-区域控制架构下的智…

《白帽子讲web安全》

第十四章 PHP安全 文件包含漏洞是“代码注入”的一种。“代码注入”这种攻击,其原理就是注入一段用户能控制的脚本或代码,并让服务器端执行。“代码注入”的典型代表就是文件包含(File Inclusion)。文件包含可能会出现在JSP、PHP…

基于霍克斯过程的限价订单簿模型下的深度强化学习做市策略

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学,点击下方链接报名: 量化投资速成营(入门课程) Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

import.meta.glob() 如何导入多个目录下的资源

import.meta.glob() 如何导入多个目录下的资源 刚开始用 vite,在做动态路由的时候遇到了这个问题,看到其它教程上都是只引用了一个目录层级的内容,比如这样: let RouterModules import.meta.glob("/src/view/*/*.vue"…

网络运维与网络安全 学习笔记2023.11.21

网络运维与网络安全 学习笔记 第二十二天 今日目标 端口隔离原理与配置、路由原理和配置、配置多路由器静态路由 配置默认路由、VLAN间通信之路由器 端口隔离原理与配置 端口隔离概述 实现报文之间的2层隔离,除了使用VLAN技术以后,还可以使用端口隔…

蓝桥杯每日一题2023.11.21

题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 思路&#xff1a; 1.去重排序将其进行预处理 2.用gcd得到最简比值 3.用gcd_sub分别计算分子、分母的指数最大公约数 #include<bits/stdc.h> using namespace std; const int N 110; typedef long long ll; ll…

图Graph的存储、图的广度优先搜索和深度优先搜索(待更新)

目录 一、图的两种存储方式 1.邻接矩阵 2.邻接表 生活中处处有图Graph的影子&#xff0c;例如交通图&#xff0c;地图&#xff0c;电路图等&#xff0c;形象的表示点与点之间的联系。 首先简单介绍一下图的概念和类型&#xff1a; 图的的定义&#xff1a;图是由一组顶点和一…

11.21序列检测,状态机比较与代码,按键消抖原理

序列检测 用一个atemp存储之前的所有状态&#xff0c;即之前出现的七位 含无关项检测 要检测011XXX110 对于暂时变量的高位&#xff0c;位数越高就是越早出现的数字&#xff0c;因为新的数字存储在TEMP的最低位 不重叠序列检测 &#xff0c;一组一组 011100 timescale 1ns…

合肥中科深谷嵌入式项目实战——基于ARM语音识别的智能家居系统(三)

基于ARM语音识别的智能家居系统 我们上一篇&#xff0c;我们实现在Linux系统下编译程序&#xff0c;我们首先通过两个小练习来熟悉一下如何去编译。今天&#xff0c;我们来介绍一下LCD屏幕基本使用。 一、LCD屏幕基本使用 如何使用LCD屏幕&#xff1f; 1、打开开发板LCD设…

JSP编写自己的第一个WebServlet实现客户端与服务端交互

我们在项目中找到java目录 下面有一个包路径 然后 我们在下面创建一个类 我这里叫 TransmissionTest 当然 名字是顺便取的 参考代码如下 package com.example.dom;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet…

【精选】OpenCV多视角摄像头融合的目标检测系统:全面部署指南&源代码

1.研究背景与意义 随着计算机视觉和图像处理技术的快速发展&#xff0c;人们对于多摄像头拼接行人检测系统的需求日益增加。这种系统可以利用多个摄像头的视角&#xff0c;实时监测和跟踪行人的活动&#xff0c;为公共安全、交通管理、视频监控等领域提供重要的支持和帮助。 …

宏集新闻 | 虹科传感器事业部正式更名为宏集科技

致一直支持“虹科传感器”的朋友们&#xff1a; 为进一步整合资源&#xff0c;给您带来更全面、更优质的服务&#xff0c;我们非常荣幸地宣布&#xff0c;虹科传感器事业部已正式更名为宏集科技。这一重要的改变代表了虹科持续发展进程中的新里程碑&#xff0c;也体现了我们在传…

【brpc学习实践四】异步请求案例详解

注意 使用的还是源码的案例&#xff0c;添加个人注解。在前面的篇章我们讲解了客户端、服务端rpc构造的基本流程及同步、异步的案例基础之后&#xff0c;再理解此案例就容易了。 想直接看案例实现请看&#xff1a; server端实现 client端实现 服务端要点概览 controller ser…

同为科技(TOWE)智能机柜PDU助力上海华为数据中心完善机房末端配电

智能时代加速而来&#xff0c;最大的需求是算力&#xff0c;最关键的基础设施是数据中心。作为一家在信息通信领域拥有多年经验和技术积累的公司&#xff0c;华为在全国多个地区都设有数据中心&#xff0c;如知名的贵州贵安华为云全球总部、内蒙古乌兰察布华为数据中心等&#…