当前位置: 首页 > news >正文

YOLOv5物体检测

一、环境安装

1.1、anaconda安装 ,根据官方地址一步步安装,此略过。

https://www.anaconda.com/download

创建虚拟环境

conda  create -n yolov5 python=3.8

配置国内源,加速下载 (可选)

pip config set global.index-url https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple

1.2、pytorch安装

https://pytorch.org/index.html
https://pytorch.org/get-started/previous-versions/

# 选择V1.8.2版本下
# CUDA 10.2 (英伟达显卡1650/1600/..选择)
pip3 install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu102
# CUDA 11.1 (英伟达显卡30以上选择)
pip3 install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cu111
# CPU Only (电脑没有GPU选)
pip3 install torch==1.8.2 torchvision==0.9.2 torchaudio==0.8.2 --extra-index-url https://download.pytorch.org/whl/lts/1.8/cpu

1.3、yolov5下载

https://github.com/ultralytics/yolov5/tree/master

下载yolov5 v7.0版本
https://github.com/ultralytics/yolov5/releases/tag/v7.0 AssetsSource code.zip压缩包

1.3.1 requirements.txt文件修改

修改yolov5模型内的requirements.txt文件,主要是

numpy==1.18.5修改 numpy==1.20.3
Pillow==7.1.2修改 Pillow==8.3.0
注释掉torch,torchvision,因为文件内的版本和实际pytorch下载对应的版本可能不同,且已经有下载

1.3.2 下载预训练模型

yolov5有yolov5n、yolov5s、yolov5m、yolov5l、yolov5x五种参数模型,模型对应的参数params依次增加。
在这里插入图片描述
Assets下下载五种模型,放置到yolov5-7.0文件夹下。
在这里插入图片描述

1.3.3 模型测试

通过终端输入以下内容,检验模型检测效果。

python detect.py

二、模型检测

2.1、关键参数

weights:训练好的模型文件

yolov5n、yolov5s、yolov5m、yolov5l、yolov5x五种参数模型。

python detect.py --weights yolov5s.pt
python detect.py --weights yolov5x.pt

source:检测的目标,可以是单张图片、文件夹、屏幕或者摄像头等

python detect.py --weights yolov5s.pt --source 0   #摄像头img.jpg #图片vid.mp4 #视频
python detect.py --weights yolov5s.pt --source data/images/bus.jpg	
python detect.py --weights yolov5s.pt --source screen #整个屏幕检测									   

conf-thres :置信度阈值,越低框越多,越高框越少

python detect.py --weights yolov5s.pt --conf-thres 0.8

iou-thres :iou阈值,越低框越少,越高框越多

三、数据集构建

3.1、标注工具

视频类数据集可以使用opencv进行视频抽帧

import cv2
import matplotlib.pyplot as plt
video = cv2.VideoCapture('./bat.mp4')
ret,frame=video.read()
plt.imshow(frame)
plt.imshow(cv2.cvtcolor(frame,cv2.COLOR_BGR2BGR)) #转换图片通道num=0
save_step=30  #间隔帧
while True:ret,frame=video.read()if not ret:breaknum+=1if num % save_step ==0:cv2.imwrite('./images/'+str(num)+".jpg",frame)

labelimg

pip install labelimg

输入labelimg
(1) 打开文件夹Open Dir,确定文件存储位置Change Save Dir
(2) 点击PascalVOC使图片以YOLO格式存储
(3)点击图片目标,出现Create_RectBox进行标记
(4)图片标记label格式为txt,包括五条数据,第一个为类别,后四个为目标坐标
在这里插入图片描述

四、模型训练

4.1、数据处理

image:存放图片
train:训练集数据
val:验证集数据
label:存放标签
train:训练集标签,与训练集图片命名一一对应
val:验证集标签,与验证集图片命名一一对应
classes.txt不需要放文件内

4.2、关键参数

data:数据集描述文件
weights:预训练权重文件
data默认是选择coco128.yaml,此处复制coco128.yaml文件命名为bvn.yaml。主要根据自己路径修改里面path、train、val参数,其中classes根据实际目标检测对象类别进行修改

path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)
# Classes
names:0: person1: bicycle2: car3: motorcycle4: airplane5: bus6: train7: truck8: boat9: traffic light10: fire hydrant11: stop sign12: parking meter

在这里插入图片描述
weights默认是选择yolov5s.pt模型,此处可以根据实际情况更改为yolov5n、yolov5m、yolov5l、yolov5x四种模型进行训练。

在这里插入图片描述

4.3、模型结果解读

模型训练结果会在run文件夹下的train文件的exp.中,文件内包含很多参数,其中weights中有训练最好的best.pt和最差的last.pt模型。
在这里插入图片描述
可以在终端通过tensorboard --logdir runs进行展示结果

五、模型验证

根据预训练完的模型,得到weights中有训练最好的best.pt,通过终端输入以下参数进行模型验证

python val.py --weights runs/train/exp34/weights/best.pt

可以通过参数将图片/视频/…结果输出到桌面(–view-img)

python val.py --weights runs/train/exp34/weights/best.pt --source datasets/xx.jpg --view-img

在这里插入图片描述
train中包含很多输出,其中包含训练的batch结果,验证集的val_batch0_pred.jpg结果。
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 8086的指令系统
  • 力扣 24.两两交换链表中的节点
  • 华为杯”第十二届中国研究生数学建模竞赛-B题: 数据的多流形结构分析(续)
  • 云岚到家 第一天实战总结
  • 云栖实录 | 阿里云 OpenLake 解决方案重磅发布:多模态数据统一纳管、引擎平权联合计算、数据共享统一读写
  • 高等数学的后续课程
  • vue3开发中易遗漏的常见知识点
  • 公安局软件管理平台建设方案和必要性,论文-3-———未来之窗行业应用跨平台架构
  • HttpServletRequest简介
  • Flat File端口更新:如何实现嵌套结构
  • ubuntu 24.04 输入设备显示没有,系统没有找到电脑麦克风
  • mysql学习教程,从入门到精通,SQL 删除表(DROP TABLE 语句)(20)
  • Gnu Radio抓取WiFi信号,流程图中模块功能
  • Qt QFileDialog使用方法
  • 多重身份验证:保护数字生活的防线
  • Bootstrap JS插件Alert源码分析
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Cumulo 的 ClojureScript 模块已经成型
  • jquery cookie
  • Laravel 菜鸟晋级之路
  • NSTimer学习笔记
  • php中curl和soap方式请求服务超时问题
  • Python学习之路16-使用API
  • React as a UI Runtime(五、列表)
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Vue小说阅读器(仿追书神器)
  • Webpack 4 学习01(基础配置)
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 我有几个粽子,和一个故事
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • # Maven错误Error executing Maven
  • #git 撤消对文件的更改
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (libusb) usb口自动刷新
  • (TOJ2804)Even? Odd?
  • (ZT)薛涌:谈贫说富
  • (补)B+树一些思想
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (十)c52学习之旅-定时器实验
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .Net 6.0--通用帮助类--FileHelper
  • .NET 的程序集加载上下文
  • .net 生成二级域名
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET周刊【7月第4期 2024-07-28】
  • 。Net下Windows服务程序开发疑惑
  • [20161101]rman备份与数据文件变化7.txt
  • [2669]2-2 Time类的定义
  • [Angular] 笔记 9:list/detail 页面以及@Output