OpenCV实例(九)基于深度学习的运动目标检测(二)YOLOv2概述
基于深度学习的运动目标检测(二)YOLOv2&YOLOv3概述
- 1.YOLOv2概述
- 2.YOLOv3概述
- 2.1 新的基础网络结构:
- 2.2 采用多尺度预测机制。
- 2.3 使用简单的逻辑回归进行分类
1.YOLOv2概述
对YOLO存在的不足,业界又推出了YOLOv2。YOLOv2主要通过以下方法对模型进行优化:
(1)使用Batch Normalization方法对模型中每一个卷积层的输入进行归一化,缓解梯度消失,加快收敛速度,减少了训练时间,同时提高了平均检测准确率。
(2)增加Anchors机制,借助训练集的边框标签值,使用k-means聚类的方法生成几种不同尺寸的Anchors。YOLOv2去掉了YOLO网络中的全连接层和最后一个池化层,以提高特征的分辨率;在最后一层卷积采样后使用Anchors机制,旨在提高IoU。训练时,在每个网格上预置Anchors,以这些Anchors为基准计算损失函数。
(3)提出一个新的基础网络结构:Darknet-19。Darknet-19是一个全卷积网络,相比YOLO的主体结构,它用一个average pooling层代替全连接层,有利于更好地保留目标的空间位置信息。
(4)采用优化的直接位置预测方法,根据设定的Anchors,在网络最后一个卷积层输出的特征图上,对每个网格进行边框预测,先预测tx、ty、tw、th、to这5个值,然后根据这5个值计算预测边框的位置信息和置信度。
通过以上改进,YOLOv2在平均检测准确率和训练检测速度方面较YOLO均有明显的提高。作为一个中间版本,我们了解即可。
2.YOLOv3概述
为了进一步提高性能,人们又提出了YOLOv3。相比前两个版本,YOLOv3在分类方法、网络结构方面做了较大改进,具体实现如下:
2.1 新的基础网络结构:
Darknet-53。Darknet-53共有75层,使用了一系列3×3、1×1的卷积,其中包括53层卷积层,其余为res层,借鉴ResNet(Residual Network,残差网络)的思想,采用跳层连接的方式进一步优化网络性能。Darknet-53的网络结构如图所示。

在深度学习中,越是深层次的网络越容易出现梯度消失,导致网络退化,即使使用了Batch Normalization等方法,效果依然不太理想。2015年,Kaiming He等人提出ResNet,在当年的ILSVRC比赛中获得了冠军。ResNet的主要思想是在网络结构中增加了“直连通道”,将某层的原始输出直接传递到后面的层中,这种跳层连接结构能减少原始信息在传递过程中的损耗,在一定程度上缓解了深度神经网络中的梯度消失问题。ResNet的原理如图所示。

在ResNet中,如果用xl和xl+1分别表示第l层的输入和输出,Wl表示第l层的权重,F表示该层的残差函数,则xl和xl+1之间的关系可以表示为:xl+1=xl+F(xl,Wl)。如果网络以这样的结构学习到第L层,以xL表示第L层的输入xL和xl之间的关系可表达为:

从而求得在此反向传递过程中损失函数的梯度:

从上面公式括号里的两项可以看出,1保证了梯度可以无损地传递,第二项的大小由网络权重决定,并且该项再小也不会导致梯度消失的问题。由此可见,ResNet对原始输入信息的学习更容易、更准确。
Darknet-53通过引入res层,将整个网络分成若干个小的ResNet结构单元,通过逐级对残差的学习来控制梯度的传播,以此来缓解训练中的梯度消失。
2.2 采用多尺度预测机制。
YOLOv3沿用了YOLOv2中的Anchors机制,使用k-means方法聚类出9种大小不同的Anchors。为了充分利用这些Anchors,YOLOv3进一步细化网格划分,将Anchors按大小平均分配给3种scale。
· scale1:在Darknet-53后添加6层卷积层,直接得到用以检测目标的特征图,维度为13×13×(B×5+C),对应最大的3种Anchors,适用于大目标检测。
· sale2:对网络第79层的输出进行上采样,生成26×26×(B×5+C)的特征图,同时与第61层输出的特征图合并,再进行一系列的卷积操作,最终得到的特征图对应3个中等大小的Anchors,适用于中目标检测。
· scale3:对网络第91层的输出进行上采样,生成52×52×(B×5+C)的特征图,先与第36层输出的特征图合并,再进行系列卷积,最终得到与3个最小的Anchors对应的特征图,适用于小目标检测。通过这样的改进,YOLOv3相比YOLOv2,在小目标检测效果上有了较为明显的提高。
2.3 使用简单的逻辑回归进行分类
分类损失函数采用了binary cross-entropy loss(二值交叉熵损失),而且不再使用softmax进行分类。在softmax分类中,得分最高的预测边框获得一个分类,但是在很多情况下(尤其是在对有遮挡或重叠的多目标检测时)softmax并不适合。
通过不断的改进与创新,YOLOv3使基于回归思想的YOLO系列模型的性能达到了一个峰值,最大限度地兼顾了检测的实时性和准确率,为危险物品的实时检测和跟踪、自动驾驶的环境信息采集等对实时性和准确率要求都较高的应用领域提供了非常有参考、研究价值的可靠模型。
相关文章:
OpenCV实例(九)基于深度学习的运动目标检测(二)YOLOv2概述
基于深度学习的运动目标检测(二)YOLOv2&YOLOv3概述 1.YOLOv2概述2.YOLOv3概述2.1 新的基础网络结构:2.2 采用多尺度预测机制。2.3 使用简单的逻辑回归进行分类 1.YOLOv2概述 对YOLO存在的不足,业界又推出了YOLOv2。YOLOv2主要…...
【Docker】已经创建好的Docker怎么设置开机自启
已经创建好的Docker怎么设置开机自启 1.使用命令Docker update来完成2.查看是否开启3.验证是否开启 1.使用命令Docker update来完成 操作步骤: docker update --restartalways 容器ID2.查看是否开启 docker inspect 容器Id看到这里RestartPolicy设置为如图&#…...
E - Excellent Views
Problem - E - Codeforces 问题描述:数组H大小都不相同。从i到j是可行的,当且仅当 不存在 k ,使 ∣ i − k ∣ ≤ ∣ i − j ∣ , H k > H j 不存在k,使 \\ |i - k| \leq |i - j|, \quad H_k > H_j 不存在k,使…...
WiFi天线和NB-IoT天线不通用
表面看起来完全一样。但是把WiFi天线插到NB-IoT设备后,信号弱了很多。还导致设备反复重启...
IoT DC3 是一个基于 Spring Cloud 的开源的、分布式的物联网(IoT)平台本地部署步骤
dc3 windows 本地搭建步骤: 必要软件环境 进入原网页# 务必保证至少需要给 docker 分配:1 核 CPU 以及 4G 以上的运行内存! JDK : 推荐使用 Oracle JDK 1.8 或者 OpenJDK8,理论来说其他版本也行; Maven : 推荐…...
VBA Excel自定义函数的使用 简单的语法
一个简单的教程,实现VBA自定义函数。 新建模块 复制后面的代码放进来 函数的入口参数不定义,则认为是一块区域; 反之,如FindChar1 As String,则认为是输入的单值。 循环和分支如下例子,VB比较接近自然语…...
字节跳动 从需求到上线全流程 软件工程流程 需求评估 MVP
走进后端开发流程 整个课程会带大家先从理论出发,思考为什么有流程 大家以后工作的团队可能不一样,那么不同的团队也会有不同的流程,这背后的逻辑是什么 然后会带大家按照走一遍从需求到上线的全流程,告诉大家在流程的每个阶段&am…...
线性代数-矩阵的本质
线性代数-矩阵的本质 线性代数-矩阵的本质...
React基础入门之虚拟Dom
React官方文档:https://react.docschina.org/ 说明 重要提示:本系列文章基础篇总结自尚硅谷课程,且采用类式写法!!最新的函数式组件写法见高级篇。 本系列文档旨在帮助vue同学更快速的学习react,如果你很…...
C++基础Ⅰ编译、链接
目录儿 1 C是如何工作的1.1 预处理语句1.2 include1.3 main()1.4 编译单独编译项目编译 1.5 链接 2 定义和调用函数3 编译器如何工作3.1 编译3.1.1 引入头文件系统头文件自定义头文件 3.1.2 自定义类型3.1.3 条件判断拓展: 汇编 3.2 链接3.2.1 起始函数3.2.2 被调用的函数 3.3 …...
VMware和ubuntu配置Hadoop环境
目录 一、获取VMware安装包 1、官网获取 1)首先先进入官网,官网首页是下面这样: 2)接着点击产品选项 3)进入后点击查看所有产品,然后在右上角选择排序方式为Z到A,然后向下滑动找到Workstation…...
uview2.0自定义tabbar
tabbar组件 <template><u-tabbar :value"tab" change"changeTab" :fixed"true" :border"true" :placeholder"true":safeAreaInsetBottom"true"><u-tabbar-item text"消息" icon"c…...
Star History 月度开源精选|Llama 2 及周边生态特辑
7 月 18 日,Meta 发布了 Llama,大语言模型 Llama 1 的进阶版,可以自由免费用于研究和商业,支持私有化部署。 所以本期 Star History 的主题是:帮助你快速把 Llama 2 在自己机器上跑起来的开源工具,无论你的…...
修改电脑上路由表使笔记本默认走无线
如果笔记本上即连接了有线,也连接了无线,默认电脑会走有线的,通过route print命令查看路由表就可以看出来,因为无线的“metric”跳数要比有线的高 解决方法: 如果想实现让默认走无线,就需要修改自己电脑的…...
Spring Cache的介绍以及怎么使用(redis)
Spring Cache 文章目录 Spring Cache1、Spring Cache介绍2、Spring Cache常用注解2.1、EnableCaching注解2.2、CachePut注解2.3、CacheEvict注解2.4、Cacheable注解 3、Spring Cache使用方式--redis 1、Spring Cache介绍 Spring Cache是一个框架,实现了基于注解的缓…...
软考高级系统架构设计师系列论文六十九:论信息系统的安全风险评估
一、信息系统相关知识点 软考高级信息系统项目管理师系列之四十三:信息系统安全管理软考高级系统架构设计师:系统安全分析与设计...
Ubuntu系统安装之后首需要做的事情
Ubuntu系统的初步环境搭建 1、换源2、显卡3、浏览器4、输入法5、终端6、ROS7、VSCode8、设置时间与win一致9、 TimeShift10、 Anaconda(考虑装不装) 1、换源 点开Software&&Update,找到Ubuntu Software中的Download from,…...
Qt——QPushButton控件的常见属性、方法和信号
Qt中QPushButton控件的常见属性、方法和信号 一、QPushButton控件常见属性 一、QPushButton控件常见方法 一、QPushButton控件常见信号 一、QPushButton控件常见属性(Properties) 1. text: 描述:按钮上显示的文本。 用法: butto…...
AUTOSAR规范与ECU软件开发(实践篇)5.5 基于ISOLAR-A的系统级设计与配置方法(上)
目录 前言 1 系统配置输入文件创建与导入 2、 Composition SWC建立 前言 如前所述, AUTOSAR支持整车级别的软件架构设计, 开发人员可以进行整车级别的软件组件定义, 再将这些软件组件分配到各个ECU中, 这就是AUTOSAR系统级设计需要完成的主要任务。 下面结合AUTOSAR方法论…...
mongoDB的CRUD
...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7
在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤: 第一步: 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为: // 改为 v…...
工厂方法模式和抽象工厂方法模式的battle
1.案例直接上手 在这个案例里面,我们会实现这个普通的工厂方法,并且对比这个普通工厂方法和我们直接创建对象的差别在哪里,为什么需要一个工厂: 下面的这个是我们的这个案例里面涉及到的接口和对应的实现类: 两个发…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
ffmpeg(三):处理原始数据命令
FFmpeg 可以直接处理原始音频和视频数据(Raw PCM、YUV 等),常见场景包括: 将原始 YUV 图像编码为 H.264 视频将 PCM 音频编码为 AAC 或 MP3对原始音视频数据进行封装(如封装为 MP4、TS) 处理原始 YUV 视频…...
Docker环境下安装 Elasticsearch + IK 分词器 + Pinyin插件 + Kibana(适配7.10.1)
做RAG自己打算使用esmilvus自己开发一个,安装时好像网上没有比较新的安装方法,然后找了个旧的方法对应试试: 🚀 本文将手把手教你在 Docker 环境中部署 Elasticsearch 7.10.1 IK分词器 拼音插件 Kibana,适配中文搜索…...
