yolov5算法,训练模型,模型检测
嘟嘟嘟嘟!工作需要,所以学习了下yolov5算法。是干什么的呢?
通俗来说,可以将它看做是一个小孩儿,通过成年人(开发人员)提供的大量图片的学习,让自己知道我看到的哪些场景需要提醒给成年人(开发人员)。也算是一个脚指头踩在了人工智能的门口。
我们使用时可以对他做的呢,有以下几点(就想象成孩子已经出来了):
- 寻找他可能遇到的场景,成年人在场景上标注“没戴口罩的”、“没戴安全帽的”、“貌似是火源的”…在给孩子找这些场景时,成年人也会精心选择,将其分为标准的很简单看出来的(训练集train)、不很容易的需要仔细学习的(验证集val)、用来测试学习成果的(测试集test)
- 孩子的大脑驱动着,记录这些图片的标准参数(训练集图片)、超参数(验证集图片)
- 孩子学完之后,成年人可以用测试集中的图片对训练出来的成果做验收,验收成功后,成年人就可以让孩子自己去玩
- 孩子在玩的过程中,发现了自己学习中的场景,至于是要孩子回来报告给成年人,还是只是孩子自己知道就可以,这就看开发者了。
源码
如果没看懂,可以看下这个链接,超详细
https://blog.csdn.net/ECHOSON/article/details/121939535?ops_request_misc
接触到了两个,一个是口罩检测模型,一个是安全帽检测模型,源码嘛,都是人家自己的。下面就是下载地址
口罩模型检测源码
安全帽模型检测源码
只是得到源码,其实做不了什么的,除非特有耐心还要有GPU,否则只是在训练模型阶段,就已经…dddd
训练模型
资源已经上传
这是地址
所需安装的程序
- anaconda
- pycharm
其他的程序只在虚拟环境中安装就可以了
环境配置
一、Anaconda、pycharm安装
anaconda官网:https://www.anaconda.com/products/distribution#Downloads

pycharm官网:https://www.jetbrains.com/pycharm/

二、环境安装验证
- 桌面右击,显示“open folder as pycharm project”,就表示pycharm安装成功了
- 任意一个文件夹,使用cmd打开。执行“conda activate”,在下一命令行前出现了base就是anaconda安装成功了。

三、换源(可以省略)
使用过程中,需要在虚拟环境中下载各种源,换源的目的是可以使下载速度快些。此处是换了中科大的源。直接复制粘贴到命令行执行就行
conda config --remove-key channels
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/
conda config --set show_channel_urls yes
pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple
四、虚拟环境
我们已经有yolov5的源码了,可以直接在项目中,打开cmd。
还有另一种选择,直接用anaconda prompt执行也可以,可以使用cd命令跳转文件夹。

执行
conda create -n 环境名
conda create -n 环境名 python=3.8 后面最好是写下Python版本,不然后面有个依赖叫pycocotools的,很恶心,没有对应python3.9的版本
这样就创建了一个虚拟环境,创建后环境的查看
conda info --env
或者conda env list
创建成功后,激活,就相当于虚拟环境的入口指令,每次要使用虚拟环境中的包都需要执行
conda activate 环境名 或者 activate 环境名
五、安装依赖
下面的依赖都要在虚拟环境中安装,使用时,直接使用这个虚拟环境,如果使用其他虚拟环境或者base环境,是检测不到依赖的
1、pytorch
pytorch是用python语言打造的一款深度学习框架,既可实现强大的GPU加速,也可支持动态神经网络。yolov5算法在GPU和CPU情况下都可以使用,但是pytorch要区分是在GPU下使用还是CPU使用,而且提醒一下CPU去训练模型时,会让你感动到哭
安装pytorch,要注意自己是GPU还是CPU,此处以CPU为例哈,GPU和他差不多
pytorch官网获取安装命令
官网:https://pytorch.org/get-started/locally/

这个命令直接在虚拟环境中执行就可以了,如果要带着后面的 -c pytorch ,表示是从国外的源下载,那么前面配置源的地方就没用。看自己,想用哪个用哪个
conda install pytorch torchvision torchaudio cpuonly -c pytorch
2、pycocotools
pip insatll pycocotools-windows
3、其他包
yolov5算法项目中包含一个requirement.txt文件,里面就标注了需要的依赖。
pip install -r requirement.txt
pip insatll pyqt5
pip install labelme

六、pycharm的配置
这一步是对pycharm打开的项目配置虚拟环境,所以前提就是要有虚拟环境和项目。
pycharm打开项目,右下角的初始状态应该是NO interpreter,点击就会出现设置和添加。

第一次的话直接添加就可以了

后面其他项目要使用同一虚拟环境时,点击设置-show all就可以展示之前的虚拟环境


七、训练模型

数据集分为三部分,训练集train、验证集val、测试集test。之前看过的一个分配比例是60%、20%、20%。数据集标注的位置文件就在与images同级的labels文件夹中,且这个文件夹中结构与images相同,有train/val/test。

首先,要训练模型就要先找数据集,人工去标注图片,让程序学习。
标注的工具就是labelimg
安装命令
pip install labelimg
安装成功后,使用时,在虚拟环境中执行 labelimg 命令,就可以打开界面。这里要注意,一定要将文件类型改成yolo类型,就是下图中yolo的位置。

标注后生成的文件如下

每一行就是一个目标的数据,分别是目标的类别id(戴口罩或没带口罩)、归一化处理后的中心点X坐标、y坐标、框的w和h。

数据集配置文件,名字可以随意,内容一定要包含这几项。

模型配置文件

预训练模型

训练的执行文件

训练模型命令:
python train.py --data 数据集配置文件名称 --cfg 模型配置文件名称 --weights 预训练权重文件 --epoch 100 --batch-size 4 --device cpu
不使用命令执行的话,train.py文件中有配置的位置,只要对应修改就可以了

之后直接执行 python train.py即可
执行之后,等待即可,生成的文件可在runs/train文件夹中查看。
八、模型检测
模型检测,使用的是detect.py文件,运行命令如下:
python detect.py --source 要检测的图片或mp4文件位置 --weights 训练出来的模型/runs/train/exp_yolov5s/weights/best.pt
python detect.py --source 0 检测摄像头,这个没成功
python detect.py --source 'rtsp地址' 根据rtsp地址检测摄像头
不想要那么长的命令,可以直接修改detetct.py文件中的位置

然后直接执行 python detect.py 即可
相关文章:
yolov5算法,训练模型,模型检测
嘟嘟嘟嘟!工作需要,所以学习了下yolov5算法。是干什么的呢? 通俗来说,可以将它看做是一个小孩儿,通过成年人(开发人员)提供的大量图片的学习,让自己知道我看到的哪些场景需要提醒给成…...
linux系统防火墙开放端口
linux系统防火墙开放端口 在外部访问CentOS中部署应用时,需要通过防火墙管理软件,开端口,或者直接关闭防火墙进行解决(不建议) 加粗样式 常用命令: systemctl start firewalld #启动 systemctl stop firewalld #停止 systemctl status firewalld #查看…...
CSAPP第九章 虚拟内存
理解虚拟内存的原因 本章前部分描述虚拟内存是如何工作的,后一部分描述应用程序如何使用和管理虚拟内存 物理和虚拟寻址 虚拟内存作为缓存的工具 页表 页命中 缺页 虚拟内存作为内存管理的工具 简化链接,简化加载,简化共享,简化…...
numpy数组与矩阵运算(二)
文章目录矩阵生成与常用操作矩阵生成矩阵转置查看矩阵特性矩阵乘法计算相关系数矩阵计算方差、协方差、标准差计算特征值与特征向量计算逆矩阵求解线性方程组奇异值分解函数向量化矩阵生成与常用操作 矩阵生成 扩展库numpy中提供的matrix()函数可以用来把列表、元组、range对…...
Dubbo 中 Zookeeper 注册中心原理分析
Dubbo 中 Zookeeper 注册中心原理分析 文章目录Dubbo 中 Zookeeper 注册中心原理分析一、ZooKeeper注册中心1.1 ZooKeeper数据结构1.2 ZooKeeper的Watcher机制1.3 ZooKeeper会话机制1.4 使用ZooKeeper作为注册中心二、源码分析2.1 AbstractRegistry2.2 FailbackRegistry2.2.1 核…...
素数产生新的算法(由筛法减法改为增加法)--哥德巴赫猜想的第一次实际应用
素数产生新的算法(由筛法减法改为增加法)--哥德巴赫猜想的第一次实际应用 摘要:长期以来,人们认为哥德巴赫猜想没有什么实际应用的。 现在,我假设这个不是猜想,而是定理或公理,就产生了新的应用…...
递归-需要满足三个条件
一,概述 递归是一种应用非常广泛的算法(或者编程技巧)。很多数据结构和算法的编码实现都要用到递归,比如 DFS 深度优先搜索、前中后序二叉树遍历等。 去的过程叫“递”,回来的过程叫“归”。基本上所有的递归问题都可…...
【剑指Offer-Java】两个栈实现队列
题目 用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ) 输入: [“CQueue”,“appendT…...
Allegro如何将Waived掉的DRC显示或隐藏操作指导
Allegro如何将Waived掉的DRC显示或隐藏操作指导 在用Allegro做PCB设计的时候,如果遇到正常的DRC,可以用Waive的命令将DRC不显示,如下图 当DRC被Waive掉的时候,如何将DRC再次显示出来。类似下图效果 具体操作如下 点击Display...
MATLAB——数据及其运算
MATLAB数值数据数值数据类型的分类1.整型整型数据是不带小数的数,有带符号整数和无符号整数之分。表中列出了各种整型数据的取值范围和对应的转换函数。2.浮点型浮点型数据有单精度(single)和双精度((double)之分&…...
【微信小程序】-- 页面导航 -- 声明式导航(二十二)
💌 所属专栏:【微信小程序开发教程】 😀 作 者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…...
gdb查看汇编代码的例子
gdb查看汇编代码的例子 操作步骤 用 gdb 启动可执行文件:gdb executable_file在 gdb 中设置断点:break function_name 或者 break *memory_address运行程序:run当程序停止在断点处时,使用 disassemble 命令来查看汇编代码&#…...
第四讲:如何将本地代码与服务器代码保持实时同步
一、前言 在我们进行 Ambari 二次开发时,通常会先在服务器上部署一套可以使用的 Ambari 环境。 二次开发,就肯定是要改动代码的,我们不能老是在服务器上用vim编辑文件,那样效率太低,始终不是长久之计。 所以我们需要在本地打开我们的Ambari源码项目,比如用idea工具,可…...
cuda调试(一)vs2019-windows-Nsight system--nvtx使用,添加nvToolsExt.h文件
cuda调试 由于在编程过程中发现不同的网格块的结构,对最后的代码结果有影响,所以想记录一下解决办法。 CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid cuda context (上下文) context类似于CPU进程上下,表示由管理层 Drive …...
向Spring容器中注入bean有哪几种方式?
文章前言: 写这篇文章的时候,我正在手机上看腾讯课堂的公开课,有讲到 Spring IOC 创建bean有哪几种方式,视频中有提到过 set注入、构造器注入、注解方式注入等等;于是,就想到了写一篇《Spring注入bean有几种…...
如何用 Python采集 <豆某yin片>并作词云图分析 ?
嗨害大家好鸭!我是小熊猫~ 总有那么一句银幕台词能打动人心 总有那么一幕名导名作念念不忘 不知道大家有多久没有放松一下了呢? 本次就来给大家采集一下某瓣电影并做词云分析 康康哪一部才是大家心中的经典呢? 最近又有哪一部可能会成为…...
Python装饰器的具体实用示例
示例1:普通装饰器 def name(n):def func(x):res n(xx)return resreturn funcname def run(x): # run name(run)print(x)if __name__ __main__:run(1) # 2def name(n):def func(*x):res n(xx)return resreturn funcname def run(x): # run name(run)pr…...
谈谈我对Retrofit源码的理解
文章目录一、Retrofit简介二、使用介绍2.1 app / build.gradle添加依赖2.2 创建 Retrofit 实例2.3 创建 API 接口定义文件2.4 使用 Retrofit 进行网络请求三、源码分析3.1 创建 Retrofit 实例: 建造者模式创建Retrofit3.2 实例化API接口: 动态代理模式3.3 获取Observable返回值…...
八股文(三)
目录 一、 如何理解原型与原型链 二、 js继承 三、 vuex的使用 1.mutation和action的区别 mutation action 2.Vuex都有哪些API 四、 前端性能优化方法 五、 类型判断 题目 (1)typeof判断哪个类型会出错(即结果不准确)&…...
2023最新实施工程师面试题
1、两电脑都在同一个网络环境中,A 电脑访问不到 B 电脑的共享文件。此现象可能是哪些 方面所导致?怎样处理? 答:首先你要确定是不是在一个工作组内,只有在一个工作组内才可以共享文件,然后看一个看一看有没有防火墙之类的,然后确定文件是不是已经共享 2、 电脑开机时风扇…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
JAVA后端开发——多租户
数据隔离是多租户系统中的核心概念,确保一个租户(在这个系统中可能是一个公司或一个独立的客户)的数据对其他租户是不可见的。在 RuoYi 框架(您当前项目所使用的基础框架)中,这通常是通过在数据表中增加一个…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...
【堆垛策略】设计方法
堆垛策略的设计是积木堆叠系统的核心,直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法,涵盖基础规则、优化算法和容错机制: 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则: 大尺寸/重量积木在下…...
消息队列系统设计与实践全解析
文章目录 🚀 消息队列系统设计与实践全解析🔍 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡💡 权衡决策框架 1.3 运维复杂度评估🔧 运维成本降低策略 🏗️ 二、典型架构设计2.1 分布式事务最终一致…...
