YOLO-V5轻松上手
之前介绍了YOLO-V1~V4版本各做了哪些事以及相较于之前版本的改进。有的人或许会想“直接学习最近版本的算法不好吗”,在我看来,每一个年代的版本/算法都凝聚着当年学术界的智慧,即便是它被淘汰了也依旧有值得思考的地方,或是可以使我们对后续算法的改进/提出的缺点有更深的理解,进而“凝百家之长”真正开出道花结出道果有自己的感悟。
V4出现后,紧接着V5版本就出现了,相比于之前版本,V5出现时没有论文去介绍它怎么做的。V5像是把V4做了更好的实现,即思想算法上没有太大的变化,更像是一个“实际的偏工程的项目”。直到如今YOLO-V5也十分经典。
![](https://img-blog.csdnimg.cn/img_convert/07061108069b8e45b894f4ef71a13f47.png)
本文与前几篇主讲算法不同,本文教大家如何下载和使用YOLO-V5。
有时间的话我会从其源码的角度进行一遍梳理(或许吧不懒的话)。
前面也说过了具体算法和流程与V4无太大区别,主要是更好的实现。
一、YOLO-V5下载
ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite (github.com)
点击上方链接直接下载即可,下载完成后解压,打开Pycharm新建一个目录,
![](https://img-blog.csdnimg.cn/img_convert/b8fbcc8e74a78d607eb545a2b5da6356.png)
下载requirements里面的依赖
pip install -r requirements.txt
值得一提的是YOLO-V5要配合python>=3.7,pytorch>=1.7的版本使用,会用到里面的优化算法,所以大家自行选择一个更高的版本吧。
比如我这里直接选择anaconda里之前下载的torch1.10。
![](https://img-blog.csdnimg.cn/img_convert/6470868524824da09b02b34a3632537c.png)
二、下载、配置数据集和下载预训练模型
2.1 下载数据集
他这里用的是COCO数据集,这玩意比较大我们也没必要下载了,下载个小的玩一玩
![](https://img-blog.csdnimg.cn/img_convert/cf72df7368f867f3c193923c7c889739.png)
可以去这里:Computer Vision Datasets (roboflow.com),下载物体检测相关的数据集,样式比较丰富,如检测汽车的、象棋的、动物的、人脸的等等。
![](https://img-blog.csdnimg.cn/img_convert/04846acec96678c59a342ea82c332452.png)
以口罩数据集为例,大家也可以下载自己喜欢的,点击Mask Wearing Dataset,进去下载就行了。
![](https://img-blog.csdnimg.cn/img_convert/1be27e536cfee7454bddeab9adad75f6.png)
下载时会提示你选择格式:
![](https://img-blog.csdnimg.cn/img_convert/58d4d2694889c32f18d9359a670f778e.png)
![](https://img-blog.csdnimg.cn/img_convert/e10d98a9ce7f1fe53fe3fecac7cbe924.png)
下载完成后和V5放在同一级目录就行
![](https://img-blog.csdnimg.cn/img_convert/fc23e7c6f74bae541e2ad6a958e7dad3.png)
以train里的文件为例:
images则是训练所需的图片
labels里则是对应名字图片的标签值,如下1表示没戴口罩,戴了就是0,剩下四个则是"框的坐标"。
![](https://img-blog.csdnimg.cn/img_convert/a303fc40c8a7aa41be91ce94c8171b2a.png)
当然有的有很多行,毕竟一张图片里可能有很多人。找的越全recall越高,越精准accuracy越高,整体mAP越高。
后续第一次去读数据的时候还会自动生成labels.cache缓存文件,方便后续读取。
2.2 配置数据集
点开data.yaml,可以看到train和val的相对路径,到时候YOLO代码会直接读取,自己记得确认一下路径是否正确,路径问题比较基础这里就不讲了。
![](https://img-blog.csdnimg.cn/img_convert/60671d523ee20ddd41dde2dd127f1f71.png)
如果要做test就把test路径写进去就行。
nc指类别的个数,戴口罩和不带口罩,['mask', 'no-mask']
2.3 下载预训练模型
咱们简单下载个5s就行了,https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt
![](https://img-blog.csdnimg.cn/img_convert/b195ebb50dabe1f7f27d210a79318f56.png)
下载完成后放到yolov5-master文件夹里。
![](https://img-blog.csdnimg.cn/img_convert/8259d2d01b42361d60897cf985d4ec1d.png)
三、配置demo参数
参考这里:
![](https://img-blog.csdnimg.cn/img_convert/ce21dd3b7f28748393c56ec131b06269.png)
![](https://img-blog.csdnimg.cn/img_convert/1e292e7435fd61912c64046d1f148377.png)
--data ../MaskDataSet/data.yaml
--cfg models/yolov5s.yaml
--weigths ./yolov5s.pt
--batch-size 24
我们之前下载了预训练模型yolov5s.pt,用的话就加上,不用就--weights ''
当然还有一些参数可选,源码里有默认值,我们先用这些。
四、训练
做好上面那些后,在yolov5-master的train.py里直接run就行了。
刚开始可能报错,我看是他第一次执行,会去github上下载标记字体,然后没连接进去。
![](https://img-blog.csdnimg.cn/img_convert/9af047c8f48aae408c5b9ed4cf9b23b0.png)
解决办法就是自己点进去那个报错下载的连接自己下载就行了,下载完放到上面那个文件夹里。
之后再进行run,它默认会跑100个epoch,也可以自己设置。
![](https://img-blog.csdnimg.cn/img_convert/9441a54fac3bdc4123b19eb7a485e0b6.png)
这里就训练完了
![](https://img-blog.csdnimg.cn/img_convert/92debab8ec4deedc3d75a7b342b68948.png)
上图告诉你 结果在runs\train\exp23那里,即最后最新跑的一次。
![](https://img-blog.csdnimg.cn/img_convert/3ff368716129b069e31f8c06910f915f.png)
可见生成了权重文件和一些图片。
results.csv里面是一些标注和统计数据,至于生成的图片这里简单展示几个:
![](https://img-blog.csdnimg.cn/img_convert/eaa4e5ad0bd743ce76b6f593b99da902.png)
![](https://img-blog.csdnimg.cn/img_convert/3775e7bf4ec3477c5081c4b3bbbf2a2e.png)
![](https://img-blog.csdnimg.cn/img_convert/a2d269e4cb45720bf60b2631d39cfeba.png)
五、检测
进入detect.py 直接右键run的话,由于下载的yolov5-master的时候它自带测试图片和权重文件,也填写了默认路径,所以不会报错;
![](https://img-blog.csdnimg.cn/img_convert/5a0615bfa732fd4537b5a88f167086c4.png)
直接跑的话你会看到结果里:
![](https://img-blog.csdnimg.cn/img_convert/f0835f253b44b3185239801602658e6b.png)
![](https://img-blog.csdnimg.cn/img_convert/cde961992ad6221fa7b0faf334703938.png)
![](https://img-blog.csdnimg.cn/img_convert/62031c01a7dd71a5d78e136884ef27fd.png)
这和我们刚刚train那步没有一点关系,都是它自带的一开始不用训练就能玩的。
我们活学活用,刚刚训练的是是否戴口罩,所以我们不妨也自己改一下参数:
其中 -- source 后可以是图片 视频 文件夹 路径url等
我这里让它测试有没有戴口罩,就用上面这两张图片的路径吧即不修改source了;
不过我在里面又加了两张图片
![](https://img-blog.csdnimg.cn/img_convert/ac749fe5871f2b41b01c015f4f2e10b5.png)
修改参数:
![](https://img-blog.csdnimg.cn/img_convert/3d4f3a972458546eff463f7c81ae683b.png)
--weights ./runs/train/exp23/weights/best.pt
--conf 0.4
--data ./MaskDataSet/data.yaml
这里我修改了权重文件 毕竟之前用的是自带的yolov5s.pt,而这个best.pt是我们通过自己下载的预训练模型yolov5s.pt的基础上训练出来的用于检测是否带口罩了的权重文件。 conf是置信度,想改就改。
run完后发现实际效果还行,但黑人那里不行
![](https://img-blog.csdnimg.cn/img_convert/ac902ad0b241743bcdbdb28f785620a5.png)
![](https://img-blog.csdnimg.cn/img_convert/ab8c9688196620ce15089d19be211bf7.png)
不过毕竟我们训练的数据就100多张,里面我看了也没有黑人,情有可原,它可能在面部颜色差异上占比很大。
我又找了几张试了试 发现就是数据的问题
![](https://img-blog.csdnimg.cn/img_convert/3fdce767a00fca10fd19be4cda9aaa50.png)
![](https://img-blog.csdnimg.cn/img_convert/6dff9792bbadd42690dcd427fc09f9f5.png)
不过问题不大,我们本次的目的就是先学会简单使用他们的代码。
可以把source那里换成视频玩一玩试一试。
六、题外话
希望本篇文章能够对你有所帮助,如果你是连GPU版本的torch都还没下载过的小白建议一步步来。
大家也可以换点别的数据集、参数来自己跑一跑玩一玩,同时感兴趣的小伙伴也可以开始在了解其算法的情况下简单读读源码了,我下一期或许会写一篇V5的源码引导文章。
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/6dff9792bbadd42690dcd427fc09f9f5.png)
YOLO-V5轻松上手
之前介绍了YOLO-V1~V4版本各做了哪些事以及相较于之前版本的改进。有的人或许会想“直接学习最近版本的算法不好吗”,在我看来,每一个年代的版本/算法都凝聚着当年学术界的智慧,即便是它被淘汰了也依旧有值得思考的地方,或是可以使…...
![](https://www.ngui.cc/images/no-images.jpg)
CSS的优先级理解
权重 的 4个等级定义我们把特殊性分为4个等级,每一个等级代表一类选择器,每个等级的值相加得出选择器的权重。4个等级的定义如下:第一等级:代表内联样式,如style"",权值为 1000第二等级ÿ…...
![](https://img-blog.csdnimg.cn/118d8290a893420cb421b194577bf17d.png)
前端工程师leetcode算法面试必备-二分搜索算法(中)
一、前言 二分搜索算法本身并不是特别复杂,核心点主要集中在: 有序数组:指的是一个递增或者递减的区间(特殊情况如:【852. 山脉数组的峰顶索引】); 中间数:用来确定搜索目标落在左…...
![](https://img-blog.csdnimg.cn/49f93b943f044785a173f2051e1277d3.png)
【数据库】MySQL 单表查询,多表查询
目录 单表查询 一,创建表worker 1,创建表worker的sql代码如下: 2,向worker表中插入信息 二, 按要求进行单表查询 1、显示所有职工的基本信息。 2、查询所有职工所属部门的部门号,不显示重复的部门号。 …...
![](https://img-blog.csdnimg.cn/e5ba8b04b1b741ad9846701afabc3c18.jpeg)
【c++】vector实现(源码剖析+手画图解)
vector是我接触的第一个容器,好好对待,好好珍惜! 目录 文章目录 前言 二、vector如何实现 二、vector的迭代器(原生指针) 三、vector的数据结构 图解: 四、vector的构造及内存管理 1.push_back() …...
![](https://img-blog.csdnimg.cn/38675a718a1b460bba395ce5220c71f3.png)
VScode查看python f.write()的文件乱码
VScode查看python f.write()的文件乱码 在使用 VScode 编写 python 代码, print(),汉字正常显示, 使用 with open()as f: f.write()文件后, 在 …...
![](https://img-blog.csdnimg.cn/img_convert/a3bae92ca6b459bfde8e067e4eb9091b.webp?x-oss-process=image/format,png)
excel应用技巧:如何用函数制作简易抽奖动图
利用INDEX函数和随机整数函数RANDBETWEEN配合,在Excel中做一个简单的抽奖器,可以随机抽取姓名或者奖品。有兴趣的伙伴可以做出来试试,撞撞2023年好运气。每次年会大家最期待的就是抽奖环节。为了看看自己今年运气怎么样,会不会获奖…...
![](https://csdnimg.cn/release/blog_editor_html/release2.2.2/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N0U7)
CSI Tool 安装及配置记录
一、Ubuntu安装 1.下载Ubuntu 首先安装Ubuntu 14.04 LTS 64位下载地址(页面中第一个链接) 2.制作启动盘(注意备份) 可以使用官方的工具Rufus,下载地址:https://rufus.ie/ 打开Rufus,先备份…...
![](https://www.ngui.cc/images/no-images.jpg)
华为OD机试 - 最低位排序(Python)| 真题+思路+代码
最低位排序 题目 给定一个非空数组(列表),起元素数据类型为整型, 请按照数组元素十进制最低位从小到大进行排序, 十进制最低位相同的元素,相对位置保持不变, 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位。 输入 给定一个非空数组(列表) 其…...
![](https://www.ngui.cc/images/no-images.jpg)
C#开发的OpenRA使用TrimExcess方法
C#开发的OpenRA使用TrimExcess方法 当你在细看OpenRA的代码,就会发现在下面这段代码添加了一个方法: foreach (var nodes in levels) nodes.TrimExcess(); 在上面代码里遍历整个节点列表,把所有节点都调用TrimExcess方法处理一下, 这样做的意义何在?为什么我们在一般的代码…...
![](https://img-blog.csdnimg.cn/img_convert/2f7c0dfec9f9470e58ad261a0bec4265.png)
ImageMagick任意文件读取漏洞(CVE-2022-44268)
0x00 前提 前几天爆出一个 ImageMagick 漏洞 ,可以造成一个任意文件读取的危害比较可观,最近有时间来复现学习一下 主要是影响的范围很大,很多地方都有这个问题,需要来学习一下 0x01 介绍 ImageMagick 是一个免费的开源软件套…...
![](https://www.ngui.cc/images/no-images.jpg)
第十九篇 ResNet——论文翻译
文章目录 摘要1 引言2 相关工作3 深度残差学习3.1 残差学习3.2 快捷恒等映射3.3 网络架构3.4 实现4 实验4.1 ImageNet 分类4.2 CIFAR-10 和分析4.3 PASCAL 和 MS COCO 上的物体检测🐇🐇🐇🐇🐇🐇 🐇 欢迎阅读 【AI浩】 的博客🐇 👍 阅读完毕,可以动动小手赞一…...
![](https://img-blog.csdnimg.cn/img_convert/0ba4eb99ed437109813d0210af657d62.png)
RiProRiProV2主题美化顶部增加一行导航header导航通知
背景: 有些网站的背景顶部有一行罪行公告,样式不错,希望自己的网站也借鉴过来,本教程将指导如何操作,并调整成自己想要的样式。 比如网友搭的666资源站 xd素材中文网...
![](https://img-blog.csdnimg.cn/0b980ea9127b41d4a9a158a0313a3fbd.png)
RT-Thread MSH_CMD_EXPORT分析
RT-Thread MSH_CMD_EXPORT分析 1. 源码分析 在rt-thread中,使用FinSH,可以支持命令行。在源码中,使用MSH_CMD_EXPORT导出函数到对应命令。 extern void rt_show_version(void); long version(void) {rt_show_version();return 0; } MSH_CM…...
![](https://csdnimg.cn/release/blog_editor_html/release2.2.3/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N176)
电脑麦克风没声音怎么办?这3招就可以解决!
最近有用户在使用电脑麦克风进行视频录制时,发现麦克风没有声音。这是什么原因?电脑麦克风没有声音怎么办?关于解决方案,我专门整理了三种方法来帮你们,一起来看看吧! 操作环境: 演示机型&#…...
![](https://img-blog.csdnimg.cn/4e235f7eed1b4001b0ae752507cadeb3.png)
【C++】运算符重载
运算符重载 C为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名以及参数列表。其返回值类型和参数列表与普通的函数类型。 函数名字为:关键字operator后面接需要重载的运算符号…...
![](https://img-blog.csdnimg.cn/76ba08b36d11480999209683f3fa017d.png)
什么是眼图?(扫盲向)
什么是眼图?(扫盲向) Ref: What’s eye diagram? 1 基础图示 眼图 2 用途 常用于评估差分链路中的信号传输质量 "眼睛"张得越开,链路信号质量越好 3 观测原理 眼图是传输信号序列在时域上的叠加 4 观测参数 4…...
![](https://img-blog.csdnimg.cn/2adcb9add60c446fa9a0ae69e6b73f56.png)
【C++】类与对象(二)
前言 在前一章时我们已经介绍了类与对象的基本知识,包括类的概念与定义,以及类的访问限定符,类的实例化,类的大小的计算,以及C语言必须传递的this指针(C中不需要我们传递,编译器自动帮我们实现&…...
![](https://img-blog.csdnimg.cn/8221f110d49f41c58834e3d0baf927d0.jpeg#pic_center)
【软考】系统集成项目管理工程师(二十一)项目收尾管理
1. 项目验收2. 项目总结3. 系统维护4. 项目后评价补充:人员转移和资源遣散广义的系统集成项目收尾管理工作通常包含四类典型的工作:项目验收工作、项目总结工作、系统维护工作 以及 项目后评价工作,此外项目团队成员的后续工作也应在收尾管理时妥善安排;狭义的系统集成项目…...
![](https://www.ngui.cc/images/no-images.jpg)
关于公钥与私钥的一点看法
故事的起源 私密性 之前,用户a想给用户b发消息,a希望他自己发出现的消息,只能被b读懂。也就是说a希望发出去的数据是被加密过的,收到消息的人可以是b,c,d,e等等。但是只有b能被读懂。 这个需求…...
![](https://img-blog.csdnimg.cn/img_convert/61c2ada0fbb7bbc06f230706645ac2cd.webp?x-oss-process=image/format,png)
深入React源码揭开渲染更新流程的面纱
转前端一年半了,平时接触最多的框架就是React。在熟悉了其用法之后,避免不了想深入了解其实现原理,网上相关源码分析的文章挺多的,但是总感觉不如自己阅读理解来得深刻。于是话了几个周末去了解了一下常用的流程。也是通过这篇文章…...
![](https://img-blog.csdnimg.cn/7911a83df130452581578c3dd27e8fd4.png)
32个关于FPGA的学习网站
语言类学习网站 1、HDLbits 网站地址:https://hdlbits.01xz.net/wiki/Main_Page 在线作答、编译的学习Verilog的网站,题目很多,内容丰富。非常适合初学Verilog的人!!! 2、牛客网 网站地址:http…...
![](https://www.ngui.cc/images/no-images.jpg)
5分钟快速上手Promise使用
promise 是处理异步编程的一种处理方式,可以将异步操作按照同步操作的方式编写。是一个对象或者构造函数,里面存放着某个未来才会执行的结果的方法(一般就是异步操作) 自己身上有all、reject、resolve这几个方法,原型上…...
![](https://img-blog.csdnimg.cn/img_convert/23b2f1751a47de741d20dc738a24b759.jpeg)
大客户市场:阿里云、腾讯云、华为云“贴身肉搏”
配图来自Canva可画 近年来,随着中国逐渐进入数字化经济快车道,国内企业数字化、智能化升级已是刻不容缓。而为了帮助自身或其他企业实现数字化转型升级,阿里、腾讯、百度、京东、字节、网易、华为等众多国内知名企业早在多年以前,…...
![](https://www.ngui.cc/images/no-images.jpg)
华为OD机试 - 求字符串中所有整数的最小和(Python)| 真题+思路+代码
求字符串中所有整数的最小和 题目 说明 字符串 s,只包含 a-z A-Z + - ;合法的整数包括 1) 正整数 一个或者多个0-9组成,如 0 2 3 002 102 2)负整数 负号 - 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023输入 包含数字的字符串 输出 所有整数的最小和 …...
![](https://img-blog.csdnimg.cn/a4c5791439de4efe9bff5c2980953150.png)
企业电子招投标采购系统源码之首页设计
功能模块: 待办消息,招标公告,中标公告,信息发布 描述: 全过程数字化采购管理,打造从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通供应商门户具备内外协同的能力,为…...
![](https://img-blog.csdnimg.cn/img_convert/7b0c6d870bd9c2d21a5c2a5ac98019a3.webp?x-oss-process=image/format,png)
浅谈一下前端工作中全流程多层次的四款测试工具
在应届生找工作的时候,我们经常会见到一条招聘要求:要求实习经历。或者 有实习经历者优先。 为什么大部分公司在招聘时,都要求你必须有实习经历? 商业项目与个人项目不同,一段实习经历,能够熟悉公司中成熟…...
![](https://img-blog.csdnimg.cn/4b0d710588194d9d84201874aecf4ab8.gif)
【运算放大器】反相放大电路仿真应用
目录 一、反相放大电路原理(简化电路) 二、反相放大电路电路原理(实际特性) 2.1原理图 2.2实际电路 三、虚短 虚断 3.1 虚短 3.2 虚断 四、作业 4.1 (反相)放大电路设计 4.2 LM741芯片 五、标准…...
![](https://img-blog.csdnimg.cn/09cd0a8f4abc4dfeb8f1eed46717ce6f.png)
数组的操作
1.splice 1.splice 是数组的一个方法,使用这个方法会改变原来的数组结构,splice(index ,howmany , itemX);这个方法接受三个参数,我们在使用的时候可根据自己的情况传递一个参数&…...
![](https://img-blog.csdnimg.cn/img_convert/fc92ad78b1eebb88662266b12bcfe689.jpeg)
Python - 文件基础操作
目录 文件的读取 open()打开函数 read类型 read()方法 readlines()方法 readline()方法 for循环读取文件行 close() 关闭文件对象 with open 语法 文件的写入 文件的追加 文件的读取 操作 功能 文件对象 open(file, mode, encoding) 打开文件获得文件对象 文件…...
![](/images/no-images.jpg)
新会住房建设局网站/举例网络营销的例子
零散知识 主存与cache地址映像有 直接映像、全相连映像、组相连映像 三种方式DMA的三种工作方式为 CPU暂停工作方式、CPU周期窃取工作方式、直接访问存储器工作方式奇偶校验码 是一种开销最小,能发现数据代码中的一位出错情况的编码三层次存储系统包括:…...
![](https://www.oschina.net/img/hot3.png)
建设外贸网站公司/国际免费b站
2019独角兽企业重金招聘Python工程师标准>>> 常用快捷键设置(设置成跟Eclipse差不多) 按照路径:File -> Settings -> Appearance & Behavior -> Keymap -> 可以Copy 一份,方便以后使用 本人觉得IDEA默…...
![](/images/no-images.jpg)
网站营销策略怎么写/网络营销环境
...
![](https://img-blog.csdnimg.cn/img_convert/3c63ea44cd0b8a47fd72e356f56e1ef6.png)
广州网站开发费用/互联网营销策略有哪些
乱码有时候是一个非常让人头疼的问题,这里就总结一下常用的解决乱码的方法。只知道的用法,却不明白为什么这么用……一、在Java代码中:1 request.setCharacterEncoding("UTF-8");用在哪里,为什么这么用……二、String r…...
![](/images/no-images.jpg)
深圳产品型网站建设/百度怎么推广自己的店铺
Android 通过应用设置系统日期和时间的方法 android 2.3 android 4.0 测试可行,不过需要ROOT权限. import java.io.DataOutputStream; import java.io.File; import java.io.IOException; import java.util.Calendar;import android.os.SystemClock;public class SystemDat…...
![](/images/no-images.jpg)
网站设计 中国风/如何优化推广中的关键词
FileReader:用来读取字符文件的便捷类。此类的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的。要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。FileReader 用于读取字符流。要读取原始字节流,请考虑使…...