OpenCV实例(九)基于深度学习的运动目标检测(一)YOLO运动目标检测算法

基于深度学习的运动目标检测(一)

  • 1.YOLO算法检测流程
  • 2.YOLO算法网络架构
  • 3.网络训练模型
    • 3.1 训练策略
    • 3.2 代价函数的设定

2012年,随着深度学习技术的不断突破,开始兴起基于深度学习的目标检测算法的研究浪潮。

2014年,Girshick等人首次采用深度神经网络实现目标检测,设计出R-CNN网络结构,实验结果表明,在检测任务中性能比DPM算法优越。同时,何恺明等人针对卷积神经网络(Convolutional Neural Network,CNN)计算复杂度高的问题,引入空间金字塔池化层,设计出基于SPP-Net的目标检测网络,不但提高了目标检测速度,而且支持任意尺寸大小的图像输入。

2015年,Girshick在R-CNN目标检测网络的基础上针对候选框特征重复提取进行优化,提出了Fast R-CNN(Fast Regions with CNN,Fast R-CNN)网络结构,实现了端对端式的训练,并且所有网络层的参数在不断更新。任少卿和何恺明等人采用区域建议网络(Region Proposal Network,RPN)和Fast R-CNN网络结合的方式,设计出新的目标检测网络,该网络使得目标检测精度和速度得到很大的提升。

传统的目标检测算法的基本思路一般都是先对图像进行预处理,然后使用滑动窗口策略在整个图像均匀间隔的区域上提取特征,最后利用机器学习中的分类器判断是否存在目标,比如之前的DMP系统不但检测流程复杂,而且检测过程中卷积计算量较大,无法满足现实生活中检测的实时性。对于该算法的不足,Joseph Redmon等人提出了YOLO算法,主要利用的是将目标检测任务的问题转换为回归问题,其设计的网络只要进行一次计算,就能直接得到完整图像中目标的边界框和类别概率。同时,该网络结构单一,实现端对端式的训练。因此,YOLO检测算法的检测速度可满足实际的检测需求。下面我们从检测流程、网络架构、网络训练模型3个角度来分析YOLO算法。

基于YOLO算法的目标检测流程大致可分为3个步骤:

(1)把待检测的图像调整大小为448×448。

(2)将图像放到CNN输出待检测目标边界框的坐标信息和类别概率。

(3)使用非极大抑制算法去除冗余的标注框,筛选出最终的目标检测结果。

在这里插入图片描述

1.YOLO算法检测流程

YOLO算法的整体检测思路为:首先将待检测图像划分为S×S个网格,然后对每个网格都预测B个边界框(bounding boxes)和这些边界框所对应的自信得分(confidence scores)。YOLO算法具体的检测示意图如图所示。

在这里插入图片描述

此时,若有目标的中心点落在某个格子单元中,则该格子将负责检测这个目标,而confidence score负责检测该网络模型的单元格中是否有目标,以及对预测位置的精确度。当单元格中没有目标时,confidence score为0,如果存在目标,则为预测的boxes与真实的boxes之间的IoU值。
在这里插入图片描述

每个边界框都包含了5个预测值:x,y,w,h,confidence。其中,坐标(x,y)代表边界框的中心坐标,与网格单元对齐(相当于当前网格单元的偏移值),使得范围变成[0,1];坐标(w,h)代表预测的边框相对于整个图像的高度和宽度的比例。每个网格还要预测一个类别信息,记为C类,则C个类别条件概率值为Pr( | )。在测试阶段,每个边界框的具体类别的自信得分计算公式如下:

在这里插入图片描述

上式得到的结果中既包含了边界框中预测类别的概率信息,也反映了边界框中是否含有目标和边界框位置的精确度。

2.YOLO算法网络架构

通过上述分析YOLO的检测流程可以看出,YOLO算法将格子数S设置为7×7的大小,网络方面采用GooleNet的思想,其中包含了24个卷积层和2个全连接层,如图所示。卷积层主要用来提取特征,全连接层主要用来预测类别概率和坐标,与GooleNet的不同之处在于YOLO检测网络没有采用Inception结构,而采用1×1和3×3的卷积层代替了Inception。从上述网络检测流程的分析可以看出,每个单元需要预测(B×5+C)值,假设将输入图像划分为S×S个网格单元,那么最终的预测值为S×S×(B×5+C)大小的张量,对于PASCAL VOC数据,最终的预测结果为7×7×30大小的张量。

在这里插入图片描述
可以看出,网络的最终输出为7×7×30大小的张量,这和前面的分析一致。该张量所代表的具体含义如图所示。对于每一个单元格,最后20个元素代表类别概率值,其中前面10个中有两个是边界框置信度,两者的乘积就是类别置信度,剩下8个元素代表边界框的(x,y,w,h)。

在这里插入图片描述

3.网络训练模型

3.1 训练策略

在训练之前,先在ImageNet上进行预训练,其预训练的分类模型采用图15-12中前20个卷积层,然后添加一个average-pool层和全连接层。预训练之后,在预训练得到的20层卷积层之上加上随机初始化的4个卷积层和2个全连接层。由于检测任务一般需要更高清的图片,因此将网络的输入从224×224增加到448×448。整个网络的流程如图所示。

在这里插入图片描述
YOLO算法开始并没有像Goole Net那样直接构建24层的卷积网络,而是构建20层的卷积网络,然后在ImageNet数据集上预训练了前面的20层卷积层。Ren等人采用将卷积层和全连接层添加到预训练网络中的策略,进一步提高了网络的性能。因此,YOLO采用基于该原理在初始的20层卷积网络基础上,随机初始化后面的4层卷积层和2层全连接层。由于在检测中需要更详细的视觉信息,因此YOLO将网络模型的输入图像大小由224×224调整为448×448。网络最终预测输出结果的边界框的信息是(x,y,w,h),但是坐标(x,y)用对应网格的偏移量表示,然后归一化到(0,1)之间,坐标(w,h)用图像width和height归一化到(0,1)之间。由于在训练的过程中一般的激活函数Sigmoid会出现梯度消失、梯度爆炸的现象,因此YOLO采用LeakyReLU线性激活函数作为激活函数,其函数表达式如下:

在这里插入图片描述

3.2 代价函数的设定

YOLO算法的最终输出结果包含边界框的坐标、置信度得分、类别概率值3个部分,代价函数的设计目标是让这三方面达到很好的平衡。刚开始,YOLO简单地采用平方和误差作为代价函数,通过梯度下降法很容易达到最优化,但是这种代价函数的设计最终导致的结果是模型的拟合能力很差,主要原因在于代价函数的设定不合适,同时造成的不足之处有以下两个方面:

(1)8维的坐标误差和20维的类别概率误差,采用平方差误差时,两者视为同等重要,这显然是不合理的。

(2)在一幅图像中,如果一个网络中没有目标,就将这些网络中的格子单元的置信度设置为0。相比于较少的有目标的网络,这种方法是不可取的,会导致网络不稳定甚至不收敛。基于上述的不足,YOLO进一步改进代价函数,更重视8维坐标预测的误差损失,对其赋予更大的权值,同时减小不包含目标的单元格的置信度预测的权值。对于包含目标的单元格的置信度和类别概率预测的误差损失保持不变,同时将其权值设定为1。平方和误差同时对大边界框和小边界框中的误差采用相同的权值,改进后小边界框中的微小偏差显得尤为重要。因此,网络的代价函数将原来的w、h分别用[插图]和[插图]代替,这样做的好处在于进一步降低了敏感度之间的差异。最终,代价函数设计如下:

在这里插入图片描述

其中,第一项是边界框中心坐标的误差项,[插图]用于判断第i个网格中第j个边界框是否检测该目标,λcoord表示边界框坐标误差损失的权值,[插图]用于判断目标是否出现在网格中,λnoobj表示不包含目标边界框的置信度预测的误差权值。在上述代价函数中,只有当某个网络中有目标时才对预测误差进行惩罚,即增加权重系数。

总之,YOLO算法的缺点有两个方面:一方面,难以检测小目标,导致对视频中运动目标的检测出现漏检的现象;另一方面,对目标的定位不准,检测到的目标与实际目标之间存在偏差。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Leetcode】155. 最小栈、JZ31 栈的压入、弹出序列

作者:小卢 专栏:《Leetcode》 喜欢的话:世间因为少年的挺身而出,而更加瑰丽。 ——《人民日报》 155. 最小栈 155. 最小栈 题目描述; 设计一个支持 push ,pop ,top …

【Java学习】System.Console使用

背景 在自学《Java核心技术卷1》的过程中看到了对System.Console的介绍,编写下列测试代码, public class ConsoleTest {public static void main(String[] args) {Console cs System.console();String name cs.readLine("AccountInfo: ");…

【正点原子STM32连载】 第二章 APM32简介摘自【正点原子】APM32F407最小系统板使用指南

1)实验平台:正点原子stm32f103战舰开发板V4 2)平台购买地址:https://detail.tmall.com/item.htm?id609294757420 3)全套实验源码手册视频下载地址: http://www.openedv.com/thread-340252-1-1.html# 第二…

excel将主信息和明细信息整理为多对多(每隔几行空白如何填充)

excel导出的数据是主信息和明细信息形式。 方法如下:1、首先,从第一个单元格开始选中要填充的数据区域。2、按CtrlG或者F5调出定位对话框,点击左下角的【定位条件】。3、在【定位条件】中选择【空值】,然后点击【确定】按钮。4、按照上述操作…

Vue输入框或者选择框无效,或者有延迟

问题剖析 使用Vue这种成熟好用的框架,一般出现奇奇怪怪的问题都是因为操作不当导致的,例如没有合理调用组件、组件位置不正确、没有合理定义组件或者变量、样式使用不当等等... 解决方案 如果你也出现了输入框输入东西,但是没有效果…

【idea】点击idea启动没反应

RT 点击idea启动的时候没反应,接着百度报错,基本跟他们的也不一样。 首先我是做版本升级。其次,我之前是破解的。如果你也是跟我一样的话,那问题可能就处在破解上了 解决方式 首先,是跟大部分解决思路一样。先找到项…

项目部署(前后端分离)

1、前端项目 (打包成dist文件,放到nginx的html目录下面),然后配置nginx 2、后端项目部署 使用之前的shell脚本(然后赋予用户权限),最后运行脚本 查看进程

网络安全 Day28-运维安全项目-加密隧道

运维安全项目-加密隧道 1. 加密隧道服务概述2. openVPN应用场景3. 虚拟机环境准备3.0 准备知识3.1 添加网卡![请添加图片描述](https://img-blog.csdnimg.cn/f155ca2804d84118b89a69da3688911e.png)3.2 配置内网(LAN区段)3.3 虚拟机选择LAN区段3.4 书写eth1网卡配置…

Mysql 和Oracle的区别

、mysql与oracle都是关系型数据库,Oracle是大型数据库,而MySQL是中小型数据库。但是MySQL是开源的,但是Oracle是收费的,而且比较贵。 1 2 mysql默认端口:3306,默认用户:root oracle默认端口&…

Vue.js2+Cesium1.103.0 九、淹没分析效果

Vue.js2Cesium1.103.0 九、淹没分析效果 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"><spanid"button"style"position: absolute; right: 50px; top: 50px; z-index: 999; font-size: 24px…

使用gewe框架进行微信群组管理(一)

友情链接&#xff1a;geweapi.com 点击访问即可。 管理员操作 小提示&#xff1a; 添加、删除、转让多个wxid时仅限于添加/删除管理员&#xff0c;1添加 2删除 3转让 请求URL&#xff1a; http://域名地址/api/group/admin 请求方式&#xff1a; POST 请求头&#xff1a…

c#设计模式-行为型模式 之 观察者模式

定义&#xff1a; 又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者 对象同时监听某一个主题对象。这个主题对象在状态变化时&#xff0c;会通知所有的观察者对象&#xff0c;使他们能够自 …

使用Git进行项目版本控制

文章目录 1、什么是Git&#xff1f;2、安装Git3、Git汉化3.1 Git Bash汉化3.2 Git GUI汉化(了解) 4、快速上手Git基本命令5、Git是怎么运作的&#xff1f;6、工作区、暂存区、本地仓库、远程仓库的区别6.1 工作区6.2 暂存区6.3 本地仓库6.4 远程仓库6.4 总结 7、 Git具体工作流…

[QT编程系列-41]:Qt QML与Qt widget 深入比较,快速了解它们的区别和应用场合

目录 1. Qt QML与Qt widget之争 1.1 出现顺序 1.2 性能比较 1.3 应用应用领域 1.4 发展趋势 1.5 QT Creator兼容上述两种设计风格 2. 界面描述方式的差别 3. QML和Widgets之间的一些比较 4. 选择QML和Widgets之间的Qt技术时&#xff0c;可以考虑以下几个因素&#xff…

纯前端 -- html转pdf插件总结

一、html2canvasjsPDF&#xff08;文字会被截断&#xff09;&#xff1a; 将HTML元素呈现给添加到PDF中的画布对象&#xff0c;不能仅使用jsPDF&#xff0c;需要html2canvas或rasterizeHTML html2canvasjsPDF的具体使用链接 二、html2pdf&#xff08;内容显示不全文字会被截断…

Linux:Shell编程之正则表达式

目录 绪论 1、正则表达式 1.1 通配符 1.2 正则表达式分类 1.3 基本正则 1.4 正则表达式中表示次数的表达式 1.5 位置锚定 1.5.1 词首锚定和词尾锚定 1.6 分组&#xff08;&#xff09; 1.7 逻辑或 1.8 扩展正则 绪论 正则表达式&#xff1a;有一类特殊字符以及文本…

Apache Paimon 流式数据湖 V 0.4 与后续展望

摘要&#xff1a;本文整理自阿里云开源大数据表存储团队负责人、阿里巴巴高级技术专家&#xff0c;Apache Flink PMC&#xff0c;Paimon PPMC 李劲松&#xff08;之信&#xff09;在 Apache Paimon Meetup 的分享。本篇内容主要分为四个部分&#xff1a; 湖存储上的难点深入 Ap…

STM32 LL库+STM32CubeMX--LED呼吸灯

一、前期准备 硬件&#xff1a;STM32F103C8T6开发板调试工具&#xff1a;DAPLink(本次使用)或USB-TTL开发环境&#xff1a;STM32CubeMX、Keil、Vscode(可选)LED&#xff1a;使用PA0(TIM2_CH1)输出PWM&#xff0c;LED的阴极接GND 二、使用定时器中断产生PWM STM32F103C8T6在72…

图像的平移变换之c++实现(qt + 不调包)

1.基本原理 设dx为水平偏移量&#xff0c;dy为垂直偏移量&#xff0c;则平移变换的坐标映射关系为下公式&#xff0c;图像平移一般有两种方式。 1.不改变图像大小的平移&#xff08;一旦平移&#xff0c;相应内容被截掉&#xff09; 1&#xff09;当dx > width、dx < -wi…

《华为认证》L2TP VPN配置

配置接口ip地址&#xff0c;并且将防火墙的接口加入对应的安全区域 。 LNS的G1/0/0 IP为202.1.1.1 1、配置LNS的缺省路由&#xff1a; ip route-static 0.0.0.0 0.0.0.0 202.1.1.2 2、通过WEB 界面配置防火墙的 L2TP VPN 浏览器输入&#xff1a; https://202.1.1.1:8443/def…