目录
上篇文章:YOLOv7(目标检测)入门教程详解---环境安装 我们将yolov7外部需要的环境已经全部安装完成,那么这篇文章我们直接进行yolov7的实战----检测,推理,训练。
点击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(检测了)
进入虚拟环境,输入以下指令
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 里面有所有预测好的照片
参考博客:【小白教学】如何用YOLOv7训练自己的数据集 - 知乎
我们生成/datasets/
文件夹,把数据都放进这个文件夹里进行统一管理。训练数据用的是yolo数据格式,不过多了两个.txt
文件,这两个文件存放的,是每个图片的路径,后面会具体介绍。
那么接下来yolo数据集的整体格式如下:
Helmet是你想检测的东西名称,我检测的是圆环所以命名为circle
进入circle文件夹之后,会看到有images 和labels的文件夹,一个是拿来放图片的,一个是拿来存images文件夹中处理jpg图片之后的txt数据
打开images文件夹,我们又要建两个文件夹:train 和 val,并且把想要训练的照片放进去,两个都放差不多数量
打开labels文件夹,同样建两个文件train和val,然后就ok了
接下来我们就要用到一个软件去处理我们的图片,将其转化为yolo格式
参考博客: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检测。
有相关问题可以私信我进行讨论
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数