计算机视觉的应用7-利用YOLOv5模型启动电脑摄像头进行目标检测

news2024/10/7 16:17:42

大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用7-利用YOLOv5模型启动电脑摄像头进行目标检测,本文将详细介绍YOLOv5模型的原理,YOLOv5模型的结构,并展示如何利用电脑摄像头进行目标检测。文章将提供样例代码,以帮助读者更好地理解和实践YOLOv5模型。

目录

  1. 引言

  2. YOLOv5模型简介

  3. YOLOv5模型原理

    3.1. 网络结构

    3.2. 损失函数

    3.3. 数学原理

  4. 利用电脑摄像头进行目标检测

    4.1. 环境配置

    4.2. 样例代码

    4.3. 结果展示

  5. 总结

1. 引言

目标检测是计算机视觉领域的一个重要研究方向,它旨在识别图像中的物体并给出其位置信息。YOLO(You Only Look Once)是一种实时目标检测算法,自2016年提出以来,已经发展到第五代(YOLOv5)。本文将详细介绍YOLOv5模型的原理,并展示如何利用电脑摄像头进行目标检测。

2. YOLOv5模型简介

YOLOv5是YOLO系列的最新版本,相较于前几代,YOLOv5在速度和精度上都有显著提升。YOLOv5采用了一种端到端的深度学习方法,可以在单次前向传播中完成目标检测任务。

3. YOLOv5模型原理

3.1. 网络结构

YOLOv5的网络结构主要包括:CSPDarknet53作为骨干网络,PANet和SPP模块作为特征提取器,以及YOLOv5的检测头。
在这里插入图片描述

3.1.1. CSPDarknet53

CSPDarknet53是一种轻量级的骨干网络,它采用了CSP(Cross Stage Partial)结构,可以有效地减少参数数量和计算量。CSPDarknet53的网络结构如下:

CSPDarknet53由一系列卷积层、残差块和CSP模块组成。其中,CSP模块将输入特征图分成两部分,一部分进行卷积操作,另一部分直接输出。这种设计可以减少计算量,同时保持特征图的信息流动。
在这里插入图片描述

3.1.2. PANet

PANet(Path Aggregation Network)是一种特征金字塔网络,用于解决目标检测中的尺度变化问题。

PANet由一系列卷积层、上采样层和下采样层组成。其中,下采样层用于提取高层次的语义信息,上采样层用于恢复低层次的细节信息。PANet将不同尺度的特征图进行融合,可以有效地提高目标检测的精度。
在这里插入图片描述

3.1.3. SPP

SPP(Spatial Pyramid Pooling)是一种空间金字塔池化方法,用于解决目标检测中的尺度变化问题。

SPP由一系列池化层和卷积层组成。SPP将输入特征图分成多个尺度,每个尺度进行不同大小的池化操作,然后将池化结果拼接在一起。这种设计可以使网络对不同尺度的目标具有更好的适应性。

3.1.4. 检测头

YOLOv5的检测头由一系列卷积层和全连接层组成。检测头的输入是特征图,输出是目标的类别、置信度和位置信息。YOLOv5采用了三种不同大小的锚框,每个锚框对应一个预测框。检测头的输出经过解码和非极大值抑制(NMS)处理后,可以得到最终的目标检测结果。

3.2. 损失函数

YOLOv5的损失函数包括分类损失、位置损失和置信度损失。

3.2.1. 分类损失

分类损失采用交叉熵损失,用于衡量模型对目标类的分类准确度。假设有 C C C 个类别, p i p_i pi 表示模型对第 i i i 个类别的预测概率, t i t_i ti 表示第 i i i 个类别的真实标签,则分类损失可以表示为:

L c l s = − 1 N ∑ i = 1 N ∑ c = 1 C t i , c log ⁡ ( p i , c ) L_{cls} = -\frac{1}{N}\sum_{i=1}^{N}\sum_{c=1}^{C}t_{i,c}\log(p_{i,c}) Lcls=N1i=1Nc=1Cti,clog(pi,c)

其中, N N N 表示样本数量。

3.2.2. 位置损失

位置损失采用均方误差损失,用于衡量模型对目标位置的预测准确度。假设有 B B B 个锚框, t i , j t_{i,j} ti,j 表示第 i i i 个样本中第 j j j 个锚框的位置信息, p i , j p_{i,j} pi,j 表示模型对第 j j j 个锚框的位置信息的预测值,则位置损失可以表示为:

L l o c = 1 N B ∑ i = 1 N ∑ j = 1 B 1 , j o b j [ λ c o o r d ∑ n ∈ { x , y , w , h } ( t i , j n − p i , j n ) 2 ] L_{loc} = \frac{1}{N_B}\sum_{i=1}^{N}\sum_{j=1}^{B}1_{,j}^{obj}\left[\lambda_{coord}\sum_{n\in\{x,y,w,h\}}(t_{i,j}^{n}-p_{i,j}^{n})^2\right] Lloc=NB1i=1Nj=1B1,jobj λcoordn{x,y,w,h}(ti,jnpi,jn)2

其中, N B N_B NB 表示样本中包含目标的锚框数量, 1 i , j o b j 1_{i,j}^{obj} 1i,jobj 表示第 i i i 个样本中第 j j j 个锚框包含目标, λ c o o r d \lambda_{coord} λcoord 表示位置损失的权重系数。

3.2.3. 置信度损失

置信度损失采用二值交叉熵损失,用于衡量模型对目标存在性的预测准确度。假设有 B B B 个锚框, t i , j o b j t_{i,j}^{obj} ti,jobj 表示第 i i i 个样本中第 j j j 个锚框是否包含目标, t i , j n o o b j t_{i,j}^{noobj} ti,jnoobj 表示第 i i i 个样本中第 j j j 个锚框是否不包含目标, p i , j o b j p_{i,j}^{obj} pi,jobj 表示模型对第 j j j 个锚框是否包含目标的预测值,则置信度损失可以表示为:

L c o n f = 1 N B ∑ i = 1 N ∑ j = 1 B [ 1 i , j o b j ∑ n ∈ { c o n f } ( t i , j n − p i , j n ) 2 + λ n o o b j 1 i , j n o o b j ∑ n ∈ { c o n f } ( t i , j n − p i , j n ) 2 ] L_{conf} = \frac{1}{N_B}\sum_{i=1}^{N}\sum_{j=1}^{B}\left[1_{i,j}^{obj}\sum_{n\in\{conf\}}(t_{i,j}^{n}-p_{i,j}^{n})^2 + \lambda_{noobj}1_{i,j}^{noobj}\sum_{n\in\{conf\}}(t_{i,j}^{n}-p_{i,j}^{n})^2\right] Lconf=NB1i=1Nj=1B 1i,jobjn{conf}(ti,jnpi,jn)2+λnoobj1i,jnoobjn{conf}(ti,jnpi,jn)2

其中, λ n o o b j \lambda_{noobj} λnoobj 表示不包含目标的锚框的置信度损失的权重系数。

综合上述三种损失,YOLOv5的总损失可以表示为:

L = L c l s + λ c o o r d L l o c + λ c o n f L c o n f L = L_{cls} + \lambda_{coord}L_{loc} + \lambda_{conf}L_{conf} L=Lcls+λcoordLloc+λconfLconf

其中, λ c o o r d \lambda_{coord} λcoord λ c o n f \lambda_{conf} λconf 分别表示位置损失和置信度损失的权重系数。

3.3. 数学原理

YOLOv5的数学原理主要包括锚框生成、预测框解码和非极大值抑制(NMS)。

3.3.1. 锚框生成

假设有 k k k 个聚类中心,每个聚类中心对应一个锚框,锚框的宽度和高度分别为 w i w_i wi h i h_i hi。对于一张输入图像,假设其宽度和高度分别为 W W W H H H,则可以生成 W × H × k W \times H \times k W×H×k 个锚框。每个锚框的中心坐标为 ( x , y ) (x, y) (x,y),其中 x x x y y y 的取值范围分别为 [ 0 , W ] [0, W] [0,W] [ 0 , H ] [0, H] [0,H]。锚框的宽度和高度为 w i w_i wi h i h_i hi

3.3.2. 预测框解码

假设某个锚的中心坐标为 ( x a , y a ) (x_a, y_a) (xa,ya),宽度和高度为 w a w_a wa h a h_a ha,预测框的中心坐为 ( x , y ) (x, y) (x,y),宽度和高度为 w w w h h h。则预测框的坐标可以通过以下公式计算:

x = σ ( t x ) + x a y = σ ( t y ) + y a w = p w e t w h = p h e t h x = \sigma(t_x) + x_a \\ y = \sigma(t_y) + y_a \\ w = p_we^{t_w} \\ h = p_he^{t_h} x=σ(tx)+xay=σ(ty)+yaw=pwetwh=pheth

其中, σ \sigma σ 表示 sigmoid 函数, t x t_x tx t y t_y ty t w t_w tw t h t_h th 分别表示预测框的偏移量, p w p_w pw p h p_h ph 分别表示锚框的宽度和高度。

3.3.3. 非极大值抑制

非极大值抑制(NMS)是一种常用的目标检测后处理方法,用于去除重叠检测框。具体来说,NMS 的过程如下:

  • 对于每个类别,按照置信度从高到低排序。
  • 选择置信度最高的框,将其与所有其他框进行重叠度计算。
  • 去除与置信度最高的框重叠度大于一定阈值的框。
  • 重复上述步骤,直到所有框都被处理。

NMS 的数学原理可以表示为:

S i = { j ∣ j > i , I o U ( b i , b j ) > θ } B = { b i ∣ i ∈ { 1 , 2 , . . . , n } } B ^ = { b i ∣ i ∉ S j , j ∈ S i } S_i = \{j | j > i, IoU(b_i, b_j) > \theta\} \\ B = \{b_i | i \in \{1, 2, ..., n\}\} \\ \hat{B} = \{b_i | i \notin S_j, j \in S_i\} Si={jj>i,IoU(bi,bj)>θ}B={bii{1,2,...,n}}B^={bii/Sj,jSi}

其中, S i S_i Si 表示与第 $i 个框重叠度大于阈值 θ \theta θ 的所有框的集合, B B B 表示所有框的集合, B ^ \hat{B} B^经过 NMS 处理后剩余的框的集合。 I o U ( b i , b j ) IoU(b_i, b_j) IoU(bi,bj) 表示第 i i i 个框和第 j j j 个框的重叠度。

4. 利用电脑摄像头进行目标检测

4.1. 环境配置

为了使用YOLOv5进行目标检测,首先需要配置环境。本文使用的环境为Python 3.7+,需要安装的库包括:torch、torchvision、opencv-python等。

4.2. 样例代码

import cv2
from yolov5 import YOLOv5

# 加载预训练的YOLOv5模型
model = YOLOv5("yolov5s.pt",device='cpu')  # 选择模型

# 打开摄像头
cap = cv2.VideoCapture(0)

while True:
    # 从摄像头读取帧
    ret, frame = cap.read()

    if not ret:
        break

    # 使用YOLOv5进行目标检测
    results = model.predict(frame)

    # 在帧上绘制检测结果
    for *xyxy, conf, cls in results.xyxy[0]:
        label = f'{model.model.names[int(cls)]} {conf:.2f}'
        cv2.rectangle(frame, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (0, 0, 255), 2)
        cv2.putText(frame, label, (int(xyxy[0]), int(xyxy[1]) - 10), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0, 0, 255), 2)

    # 显示帧
    cv2.imshow('YOLOv5 Real-time Object Detection', frame)

    # 按'q'键退出
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放资源并关闭窗口
cap.release()
cv2.destroyAllWindows()

4.3. 结果展示

运行上述代码,可以实时查看摄像头画面中的目标检测结果。YOLOv5能够准确识别出各种物体,并给出其位置信息。

5. 总结

本文到这里就结束了,其中主要详细介绍了YOLOv5模型的原理,并展示了如何利用电脑摄像头进行目标检测。YOLOv5在速度和精度上的优势使其在实时目标检测任务中具有广泛的应用前景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/641882.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【GitLab】-HTTP Basic: Access denied.remote:You must use a personal access token

写在前面 本文简要说明GitLab配置accessToken以及双因子认证(Two-factor authentication)。 目录 写在前面一、场景描述二、具体步骤1.环境说明2.配置accessToken3.克隆项目4.双因子认证 三、参考资料写在后面 一、场景描述 在使用账号和密码的方式拉取公…

数据库的 Schema 变更实现

一、减少元数据变更的措施 元数据变更是数据库管理中不可避免的工作项,减少元数据变更次数可降低数据库维护和管理成本,减轻对业务的影响。这里我们可以优先考虑以下 3 点: 精细计划 在数据库设计和开发阶段,精细设计元数据结构…

月度精华汇总 | 最新XR行业资讯、场景案例、活动都在这一篇里啦!

​ 在过去的一个月中,平行云为您带来了关于XR领域的一系列精彩文章,涵盖了行业资讯、应用案例,市场互动,帮助您掌握XR领域最新动态,了解实时云渲染、Cloud XR技术的价值,以及平行云实时云渲染解决方案LarkX…

【每日算法】【160. 相交链表】

☀️博客主页:CSDN博客主页 💨本文由 我是小狼君 原创,首发于 CSDN💢 🔥学习专栏推荐:面试汇总 ❗️游戏框架专栏推荐:游戏实用框架专栏 ⛅️点赞 👍 收藏 ⭐留言 📝&…

【陈老板赠书活动 - 04期】- 【C++、Linux、算法等系列众书】

陈老老老板🦸 👨‍💻本文专栏:赠书活动专栏(为大家争取的福利,免费送书) 👨‍💻本文简述:与几分醉意.一起搞的赠书活动一次30本书哦!!…

软件项目质量管理的4大注意事项

1、制定质量计划和评估标准 项目质量管理首先需要制定详细的质量计划,明确项目质量目标,制定质量评估标准和验收方案。质量计划需与项目计划密切相关,并确保项目质量管理与项目进度和成本控制相配合。 软件项目质量管理的4大注意事项 2、构建…

Java+Swing+mysql仿QQ聊天工具

JavaSwingmysql仿QQ聊天工具 一、系统介绍二、功能展示1.用户登陆2.好友列表3.好友聊天4.服务器日志 三、系统实现四、其它1.其他系统实现2.获取源码 一、系统介绍 系统主要功能:用户登陆、好友列表、好友聊天、服务器日志 二、功能展示 1.用户登陆 2.好友列表 3…

想要避免计划外停机?预测性维护技术是关键

在现代工业领域,非计划停机是一项令人头疼的问题,它导致生产损失、利润减少,并给运营团队带来巨大的压力。然而,基于时间的维护策略并不能有效应对所有设备故障,因为大部分故障表现出随机模式,难以准确预测…

深入探索基于Webdriver的分层自动化框架搭建

目录 前言: 1、基于webdriver的分层自动化框架及平台搭建,目前刚好在做这一块的工作,对于分层次和平台搭建,想问下大神有什么好的建议? 2、希望大神能自己的工作经历和经验,对初入测试行业的后辈有何建议…

SpringCloudAlibaba环境搭建版本说明

可以通过www.github.com网站搜索alibaba,点击第一个超链接 点击wiki 点击版本说明 里面有对应版本: 也可以通过版本说明 alibaba/spring-cloud-alibaba Wiki GitHub这个链接直接访问

模板学堂|DataEase地图视图功能详解

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场(https://dataease.io/templates/)。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板,方便用户根据自身的业务需求和使用场景选择对应的仪表板模板,并…

【渗透测试学习】RCE漏洞是什么意思?其危害是什么?

RCE漏洞是网络安全中非常常见的漏洞之一,该漏洞又叫做远程代码执行漏洞,属于高危漏洞,其有着巨大的危害和影响。但很多人初识网络安全时,对RCE漏洞并不是很了解,到底是什么是RCE漏洞?RCE漏洞危害是什么?又该如何预防…

全国PMO专业人士年度盛会︱2023第十二届中国PMO大会会议日程

由PMO评论主办的第十二届中国PMO大会拟定于2023年8月12-13日在北京召开,本次大会主题为:“拥抱变革 展现PMO力量”,将特邀知名企业卓有建树的PMO实践精英来演讲,交流经验分享智慧,推动PMO在变革中不断成长、进化&#…

mac bash: python: command not found

问题:今天安装canvas的时候,报错提示python: command not found /bin/bash下不好使 ln -s /usr/bin/python3 /usr/local/bin/python zsh下不好使: 解决办法: # bashMacBook-Pro ~ % echo "alias python/usr/bin/python3&…

Arduino模块化编程

当用Arduino做复杂工程项目时,程序难免会变得很大。这时候要修改个别参数或函数的时候会变得麻烦,简而言之,项目程序管理难度增高了,程序代码维护会变得困难。这时候,就产生了将一个ino文件分解成多个功能相对独立的源…

屏幕录制为什么没有声音?录屏如何录入声音?

案例:我刚刚对电脑屏幕进行了录制,录制完成之后,查看录屏文件,才发现视频没有声音,顿时感觉到很崩溃。 【很多时候录制电脑屏幕的同时,还需要录制声音。那录屏的时候怎么把声音一起录进去?求一…

steam/csgo搬砖全套操作流程之如何选品(第②课)

Steam游戏搬砖项目已经在网赚圈存在好多年了,懂行的朋友一定明白:项目越稳定,赚钱越长久!今天阿阳继续给大家分享这个项目最核心的部分: 第二课 Steam装备选品一直是这个项目的核心,阿阳也罗列了几个的问题…

Pandas+Pyecharts | 中国高校及专业数据分析可视化

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据 🏳️‍🌈 3. Pyecharts数据可视化3.1 全国高校分布地图3.2 全国高校分布城市地图3.3 本科/专科占比3.4 985/211/双一流高校数量占比…

【Python】一文带你认识 异常处理 + 简单操作

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

2023百城巡展杭州站:强合作、深扎根,“浙”里共赢数安蓝海

灵秀杭州,数字经济之城 十年来,以不凡实力 筑就了繁荣的数字经济 成为中国数据要素最为集中的城市之一 6月9日,“新起点 新战略 共赢数安蓝海”,2023美创科技百城巡展来到了“大本营”——杭州。 邀老友,迎新友&…