YOLOv7(目标检测)入门教程详解---检测,推理,训练-程序员宅基地

技术标签: python  目标检测  深度学习  人工智能  

目录

一.前言

二.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果的博客-程序员宅基地_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检测。

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_64524066/article/details/126845366

智能推荐

php ajax操作成功刷新页面,Ajax+php数据交互并且局部刷新页面的实现详解-程序员宅基地

文章浏览阅读83次。什么是Ajax?国内翻译常为“阿贾克斯”和阿贾克斯足球队同音,AJAX 是一种用于创建快速动态网页的技术,他不是新语言,而是一种使用现有标准的新方法。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新,这样就可以在不重新加载整个网页的情况下,对网页的某部分进行更新。XMLHttpRequest 是 AJAX 的基础,用于和服务器交换数据。所有现代浏览器均支持 XMLHttpReq..._php ajax刷新页面

自定义el-select多选下拉框,添加搜索全选等功能,解决搜索无数据时搜索框消失问题_el-select下拉框新增搜索input-程序员宅基地

文章浏览阅读508次。在自定义多选可搜索下拉框的时候,当搜索无匹配数据的时候,下拉框内自定义的搜索框等元素都会消失,该组件完美地解决了这个问题!特此记录一下。_el-select下拉框新增搜索input

I2C介绍及verilog实现(主机/从机可综合)_i2c怎么实现主机和从机一体-程序员宅基地

文章浏览阅读2.1w次,点赞37次,收藏290次。I2C介绍及verilog实现(主机/从机)一、简介:I2C是一种只有2条线的串行通信协议。可用于IC内部通信,也可以用于IC间的通信,广泛用于开关电源、触控芯片、简单的显示芯片等。基本特征:2条通信线,SDA数据线,SCL时钟线。 串行的8-bit双向数据传输,速率分为: a.低速模式/标准模式(standard-mode),100 kbit/s; b.快速模式(fast-mode),400 kbit/s; c.加强快速模式(Fast-mode..._i2c怎么实现主机和从机一体

SPRING框架中ModelAndView、Model、ModelMap区别-程序员宅基地

文章浏览阅读744次。SPRING框架中ModelAndView、Model、ModelMap区别_modelmap

keil5新建STM32工程文件--理论篇(以STM32F103为例)_keil 5中startup文件夹是什么-程序员宅基地

文章浏览阅读8.2k次,点赞44次,收藏266次。Keil5新建工程模板(理论基础篇)_keil 5中startup文件夹是什么

Jetson Nano - 实现VNC远程桌面控制_no such key enabled-程序员宅基地

文章浏览阅读1w次,点赞6次,收藏60次。[Jetson Nano]如何实现VNC远程桌面控制本文教你如何实现VNC到你的Jetson Nano,这样就不需要连接屏幕来实现远程桌面控制啦。树莓派官方系统默认是安装了RealVNC的服务,只需在电脑上到RealVNC官方下载软件VNC Viewer,即可方便VNC实现树莓派远程桌面控制。然而……Jetson Nano就没这么直接了。事不宜迟,以下是搭建VNC服务的正式教程:1. 安装..._no such key enabled

随便推点

一文详解|老阳分享的Temu电商项目赚钱容易吗?-程序员宅基地

文章浏览阅读305次,点赞2次,收藏2次。同时,全托管模式为商家提供了全方位的运营支持和售后服务,降低了商家的运营成本和风险。老阳分享的项目信息,为我们提供了宝贵的经验和指导,但真正的成功还需靠个人的运营能力和市场洞察力。综上所述,老阳分享的Temu电商项目赚钱并不容易,但只要商家具备足够的运营能力和市场洞察力,结合Temu项目的优势,完全有可能在这个平台上取得成功。在当今跨境电商风起云涌的时代,Temu作为拼多多推出的跨境电商平台,引起了广泛关注。此外,售后服务和物流配送也是不可忽视的环节,它们直接影响着消费者的购物体验和商家的口碑。

FOJ2013-最大子段和-程序员宅基地

文章浏览阅读861次。FOJ2013限定子段长度最短为m,,贴个我的超时代码Time Limit Exceed 哈哈方法和 hdu1003 一样#include#includeusing namespace std;int num[1000001],n,m;int getn(int x){ int i,ret=0; for(i=x;i>x-m;i--) ret+=n_foj2013

html表格数据按自定义公式自动计算,Word表格中进行数据自动计算教程-程序员宅基地

文章浏览阅读2.6k次。方法一:直接输入域代码将插入点置于要存放结果的单元格中,按CTRL+F9插入域标识“{}”(注意:不能直接用键盘输入),在里面输入由“=”、函数、数值和单元格名称所组成的公式,然后在其上单击右键,选择“切换域代码”即可显示公式所计算的结果。方法二:“插入”→“域…”→“公式…”可以通过“插入”→“域…”,保持默认的域名选项,单击右侧的“公式…”按钮,同样也会出现“公式”对话框。方法三:利用“表格”..._html input 表格怎么设置计算公式

基于MPC的分布式驱动电动汽车变道轨迹跟踪控制及转矩分配的仿真效果分析-程序员宅基地

文章浏览阅读124次。通过联合使用Carsim和Matlab,我们能够精确地建立车辆模型,并实现有效的轨迹跟踪控制。在仿真过程中,我们设置了不同的环境条件和车辆参数,并评估了该方法在各种情况下的性能表现。通过这种分布式控制模型,我们能够实现多辆电动汽车之间的协同变道,以及良好的轨迹跟踪性能。MPC算法能够根据车辆的动态模型,预测未来一段时间内的车辆状态,并计算出最优的控制输入。在变道轨迹跟踪控制中,我们通过优化转向角、转矩分配等参数,使得车辆能够顺利变道,并且轨迹跟踪误差最小化。

Ubuntu18.04编译配置SGX-SSL(SGX支持的openssl函数库)_intel sgx ssl-程序员宅基地

文章浏览阅读1.2k次。预备PerlToolchain(正常这一步应该在编译SGX SDK和PSW准备阶段就完成了的,容易忽略,搭建SGX开发环境的时候最好别跳过)$ sudo cp external/toolset/{current_distr}/{as,ld,ld.gold,objdump} /usr/local/bin$ which as ld ld.gold objdumpIntel SGX driver、SDK和PSW准备好OpenSSL源码压缩包openssl-${version}.tar.gz。截_intel sgx ssl

vue跨域 使用 http-proxy-middleware 代理解决(项目使用vue-cli3.0搭建)_vue http-proxy-middleware-程序员宅基地

文章浏览阅读3.9k次。vue跨域 使用 http-proxy-middleware 代理解决(项目使用vue-cli3.0搭建)最近在模仿用Vue来搭建一个音乐播放器,用的是最新Vue.cli3来进行搭建的,要从QQ音乐来获取数据,那在之前的方法是用node的express框架起了一个服务设置了跨域,这种方法适用于vue2.x,那么在vux.3.0中呢,项目结构的目录是这样滴所以呢,不能像在vue2.0里面有个b..._vue http-proxy-middleware

推荐文章

热门文章

相关标签