深度学习——R-CNN目标检测原理

R-CNN系列算法需要先产生候选区域,再对候选区域做分类和位置坐标的预测,这类算法被称为两阶段目标检测算法。近几年,很多研究人员相继提出一系列单阶段的检测算法,只需要一个网络即可同时产生候选区域并预测出物体的类别和位置坐标。与R-CNN系列算法不同,YOLOv3使用单个网络结构,在产生候选区域的同时即可预测出物体类别和位置,不需要分成两阶段来完成检测任务。

另外,YOLOv3算法产生的预测框数目比Faster R-CNN少很多。Faster R-CNN中每个真实框可能对应多个标签为正的候选区域,而YOLOv3里面每个真实框只对应一个正的候选区域。这些特性使得YOLOv3算法具有更快的速度,能到达实时响应的水平。Joseph Redmon等人在2015年提出YOLO(You Only Look Once,YOLO)算法,通常也被称为YOLOv1;2016年,他们对算法进行改进,又提出YOLOv2版本;2018年发展出YOLOv3版本。

YOLOv3模型设计思想

YOLOv3算法的基本思想可以分成两部分:

1.按一定规则在图片上产生一系列的候选区域,然后根据这些候选区域与图片上物体真实框之间的位置关系对候选区域进行标注。跟真实框足够接近的那些候选区域会被标注为正样本,同时将真实框的位置作为正样本的位置目标。偏离真实框较大的那些候选区域则会被标注为负样本,负样本不需要预测位置或者类别。

2.使用卷积神经网络提取图片特征并对候选区域的位置和类别进行预测。这样每个预测框就可以看成是一个样本,根据真实框相对它的位置和类别进行了标注而获得标签值,通过网络模型预测其位置和类别,将网络预测值和标签值进行比较,就可以建立起损失函数。
YOLOv3算法训练过程的流程图如 图8 所示:

image.png

图8 左边是输入图片,上半部分所示的过程是使用卷积神经网络对图片提取特征,随着网络不断向前传播,特征图的尺寸越来越小,每个像素点会代表更加抽象的特征模式,直到输出特征图,其尺寸减小为原图的1/32。

图8 下半部分描述了生成候选区域的过程,首先将原图划分成多个小方块,每个小方块的大小是32×32,然后以每个小方块为中心分别生成一系列锚框,整张图片都会被锚框覆盖到。在每个锚框的基础上产生一个与之对应的预测框,根据锚框和预测框与图片上物体真实框之间的位置关系,对这些预测框进行标注。

将上方支路中输出的特征图与下方支路中产生的预测框标签建立关联,创建损失函数,开启端到端的训练过程。

产生候选区域

如何产生候选区域,是检测模型的核心设计方案。目前大多数基于卷积神经网络的模型所采用的方式大体如下:

  • 按一定的规则在图片上生成一系列位置固定的锚框,将这些锚框看作是可能的候选区域。

  • 对锚框是否包含目标物体进行预测,如果包含目标物体,还需要预测所包含物体的类别,以及预测框相对于锚框位置需要调整的幅度。

image.png

image.png

YOLOv3算法会在每个区域的中心,生成一系列锚框。为了展示方便,我们先在图中第十行第四列的小方块位置附近画出生成的锚框,如 图10 所示。注意:这里为了跟程序中的编号对应,最上面的行号是第0行,最左边的列号是第0列。

image.png

图11 展示在每个区域附近都生成3个锚框,很多锚框堆叠在一起可能不太容易看清楚,但过程跟上面类似,只是需要以每个区域的中心点为中心,分别生成3个锚框。

image.png

生成预测框

在前面已经指出,锚框的位置都是固定好的,不可能刚好跟物体边界框重合,需要在锚框的基础上进行位置的微调以生成预测框。预测框相对于锚框会有不同的中心位置和大小,采用什么方式能得到预测框呢?我们先来考虑如何生成其中心位置坐标。

image.png

image.png

image.png

为什么是的选择Sigmoid函数来这位这样的一个的预测的函数?由于Sigmoid的函数值在0∼10 \thicksim 10∼1之间,因此由上面公式计算出来的预测框的中心点总是落在第十行第四列的小区域内部。

image.png

对候选区域进行标注

每个区域可以产生3种不同形状的锚框,每个锚框都是一个可能的候选区域,对这些候选区域我们需要了解如下几件事情:

  • 锚框是否包含物体,这可以看成是一个二分类问题,使用标签objectness来表示。当锚框包含了物体时,objectness=1,表示预测框属于正类;当锚框不包含物体时,设置objectness=0,表示锚框属于负类。

  • 如果锚框包含了物体,那么它对应的预测框的中心位置和大小应该是多少,或者说上面计算式中的tx,ty,tw,tht_x, t_y, t_w, t_htx,ty,tw,th应该是多少,使用location标签。

  • 如果锚框包含了物体,那么具体类别是什么,这里使用变量label来表示其所属类别的标签。
    选取任意一个锚框对它进行标注,也就是需要确定其对应的objectness, (tx,ty,tw,th)(t_x, t_y, t_w, t_h)(tx,ty,tw,th)和label,下面将分别讲述如何确定这三个标签的值。

标注锚框是否包含物体

如 图13 所示,这里一共有3个目标,以最左边的人像为例,其真实框是(40.93,141.1,186.06,374.63)(40.93, 141.1, 186.06, 374.63)(40.93,141.1,186.06,374.63)。

image.png

image.png

image.png

标注预测框的位置坐标标签

image.png

标注锚框包含物体类别的标签

image.png

image.png

卷积神经网络提取特征

们已经学习过了通过卷积神经网络提取图像特征。通过连续使用多层卷积和池化等操作,能得到语义含义更加丰富的特征图。在检测问题中,也使用卷积神经网络逐层提取图像特征,通过最终的输出特征图来表征物体位置和类别等信息。YOLOv3算法使用的骨干网络是Darknet53。Darknet53网络的具体结构如 图16 所示,在ImageNet图像分类任务上取得了很好的成绩。在检测任务中,将图中C0后面的平均池化、全连接层和Softmax去掉,保留从输入到C0部分的网络结构,作为检测模型的基础网络结构,也称为骨干网络。YOLOv3模型会在骨干网络的基础上,再添加检测相关的网络模块。

image.png

根据输出特征图计算预测框位置和类别

image.png

建立输出特征图与预测框之间的关联

现在观察特征图,经过多次卷积核池化之后,其步幅stride=32,640×480640 \times 480640×480大小的输入图片变成了20×1520\times1520×15的特征图;而小方块区域的数目正好是20×1520\times1520×15,也就是说可以让特征图上每个像素点分别跟原图上一个小方块区域对应。这也是为什么我们最开始将小方块区域的尺寸设置为32的原因,这样可以巧妙的将小方块区域跟特征图上的像素点对应起来,解决了空间位置的对应关系。

image.png

面需要将像素点(i,j)(i,j)(i,j)与第i行第j列的小方块区域所需要的预测值关联起来,每个小方块区域产生K个预测框,每个预测框需要(5+C)(5 + C)(5+C)个实数预测值,则每个像素点相对应的要有K(5+C)K(5 + C)K(5+C)个实数。为了解决这一问题,对特征图进行多次卷积,并将最终的输出通道数设置为K(5+C)K(5 + C)K(5+C),即可将生成的特征图与每个预测框所需要的预测值巧妙的对应起来。当然,这种对应是为了将骨干网络提取的特征对接输出层来形成Loss。实际中,这几个尺寸可以随着任务数据分布的不同而调整,只要保证特征图输出尺寸(控制卷积核和下采样)和输出层尺寸(控制小方块区域的大小)相同即可。

多尺度检测

目前我们计算损失函数是在特征图P0的基础上进行的,它的步幅stride=32。特征图的尺寸比较小,像素点数目比较少,每个像素点的感受野很大,具有非常丰富的高层级语义信息,可能比较容易检测到较大的目标。为了能够检测到尺寸较小的那些目标,需要在尺寸较大的特征图上面建立预测输出。如果我们在C2或者C1这种层级的特征图上直接产生预测输出,可能面临新的问题,它们没有经过充分的特征提取,像素点包含的语义信息不够丰富,有可能难以提取到有效的特征模式。在目标检测中,解决这一问题的方式是,将高层级的特征图尺寸放大之后跟低层级的特征图进行融合,得到的新特征图既能包含丰富的语义信息,又具有较多的像素点,能够描述更加精细的结构。

具体的网络实现方式如 图19 所示:

image.png

image.png

开启端到端训练

训练过程如 图20 所示,输入图片经过特征提取得到三个层级的输出特征图P0(stride=32)、P1(stride=16)和P2(stride=8),相应的分别使用不同大小的小方块区域去生成对应的锚框和预测框,并对这些锚框进行标注。

P0层级特征图,对应着使用32×32大小的小方块,在每个区域中心生成大小分别为[116,90], [156,198], [373,326]的三种锚框。
P1层级特征图,对应着使用16×16大小的小方块,在每个区域中心生成大小分别为[30,61], [62,45] [59,119]的三种锚框。
P2层级特征图,对应着使用8×8大小的小方块,在每个区域中心生成大小分别为[10,13], [16,30], [33,23]的三种锚框。
将三个层级的特征图与对应锚框之间的标签关联起来,并建立损失函数,总的损失函数等于三个层级的损失函数相加。通过极小化损失函数,可以开启端到端的训练过程。

image.png

** 预测**

image.png

预测过程可以分为两步:

1.通过网络输出计算出预测框位置和所属类别的得分。

2.使用非极大值抑制来消除重叠较大的预测框。

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

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

相关文章

开源C语言库Melon:I/O线程模型

本文展示开源C语言库Melon中的I/O线程模型。在Melon中存在三种线程模型,本篇仅对I/O线程模型进行说明。 关于 Melon 库,这是一个开源的 C 语言库,它具有:开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github …

如何创建容器搭建节点

1.注册Discord账号 https://discord.com/这是登录网址: https://discord.com/ 2.点击startnow注册,用discord注册或者邮箱注册都可,然后登录tickhosting Tick Hosting这是登录网址:Tick Hosting 3.创建servers 4.点击你创建的s…

欧洲编程语言四巨头

从左往右,依次是 尼克劳斯沃斯 (Niklaus Wirth),迪杰斯特拉(Edsger Dijkstra),霍尔(Tony Hoare) 尼克劳斯沃斯 (Niklaus Wirth) 瑞士人,一生发明了8种编程语言,其中最著…

暖冬志愿服务在行动

1月7日,为了传递温暖与关爱,由雅安市群团中心指导,雅安市志愿服务联合会支持,雅安市雨城区梦飞翔公益社会服务中心执行的“暖冬志愿服务行动”在雨城区上里镇、碧峰峡镇、八步镇等乡镇,走访慰问困境儿童,为…

淘宝搜索指定店铺所有商品接口API调用介绍-含请求key代码示例

接口名称:item_search_shop 请求地址:taobao.item_search_shop 接口说明:此接口用于获取指定淘宝/天猫店铺的所有商品,通过传入shop_id或者seller_id可以获取到该店铺的所有商品,支持翻页展示。每页返回60个商品&…

1.4~1.5链表复习,代码操作(反转链表(用栈解决,双指针),删除链表指定元素),链表选择题,广义表

删除链表内指定范围的数 思路是双指针,定义两个指针,一个去找当前这个数满不满足要求,然后另一个定义为删除区间的起点 , 当不满足时,两个指针同时向后移动;当满足时,前驱指针就不动了&#xf…

sqlmap性能优化

sqlmap性能优化 🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🎈🌭🌭&#…

SpringBoot多环境配置以及热部署

多环境配置 使用多环境配置的原因: 在SpringBoot项目的生命周期中,存在不同的环境,例如开发时的环境,测试时的环境,交付使用后的生产环境,每种环境的配置可能不一样,这种情况下可以通过多环境…

百元蓝牙耳机推荐有哪些?百元平价的开放式蓝牙耳机推荐

无论是通勤、运动还是休闲时刻,一款好的蓝牙耳机都能为我们带来优质的听觉体验,特别是在预算有限的情况下,如何选择一款性价比高的百元蓝牙耳机变得尤为重要,那么我就根据我的使用经验给大家伙推荐几款百元平价的开放式蓝牙耳机&a…

11.文件和异常

文件和异常 实际开发中常常会遇到对数据进行持久化操作的场景,而实现数据持久化最直接简单的方式就是将数据保存到文件中。说到“文件”这个词,可能需要先科普一下关于文件系统的知识,但是这里我们并不浪费笔墨介绍这个概念,请大…

轻松搞定!微信快速导出好友数据备份

作为一款集聊天、朋友圈、支付等功能于一身的应用,微信中存储了我们与朋友、家人和同事以及客户之间的重要沟通记录和联系方式。然而,如果不小心丢失了手机或者账号出现问题,这些宝贵的数据可能会永远丢失。为了避免这种情况的发生&#xff0…

【HarmonyOS4.0】第三篇-类web开发模式

【HarmonyOS4.0】第三篇-类web开发模式 一、鸿蒙介绍 课程核心 为什么我们需要学习鸿蒙? 哪些人适合直接转鸿蒙? 鸿蒙系统优势是什么? 课程内容 (1)为什么要学习鸿蒙 从行情出发: 美国商务部长访问中国,2023年…

工程部设备巡检管理的必要性!使用智能化设备巡检系统有什么好处?

随着科技的发展,智能化管理已逐渐成为企业提升效率、确保设备运行安全的重要手段。工程部作为企业内维护设施运行的关键部门,其巡检工作的重要性不言而喻。本文将探讨如何利用智能化技术优化工程部的设备巡检工作,以确保设备的及时有效维护。…

华媒舍:溯源媒体发稿,助推品牌快速突破

在当今残酷竞争的市场环境中,品牌的快速突破变成了公司发展的关键之一。溯源新闻媒体发稿作为一项强有力营销推广方式,为品牌快速建立名气、提升口碑品牌形象提供了重要适用。下面我们就详细介绍如何给品牌订制溯源新闻媒体发稿对策,并探讨其…

*5.1 Global Memory Bandwidth

并行程序的执行速度可能因计算硬件的资源限制而有很大差异。虽然管理并行代码和硬件资源约束之间的交互对于在几乎所有并行编程模型中实现高性能很重要,但这是一种实用技能,最好通过为高性能设计的并行编程模型中的实践练习来学习。在本章中,…

Springboot3(一、lambda、::的应用)

文章目录 一、使用lambda简化实例创建1.语法:2.示例:3.Function包3.1 有入参,有返回值【多功能函数】3.2 有入参,无返回值【消费者】3.3 无入参,有返回值【提供者】3.4 无入参,无返回值 二、类::方法的使用…

如何彻底卸载Edge

要彻底卸载Edge浏览器,你可以按照以下几种方法操作: 方法一:使用控制面板 点击任务栏的“开始”按钮,打开“控制面板”。在控制面板中,选择“程序和功能”。在程序列表中找到Edge浏览器,右键点击它并选择…

web左侧伸缩菜单栏/导航栏

效果展示&#xff1a; 百度网盘链接下载全部资源&#xff1a; http://链接&#xff1a;https://pan.baidu.com/s/1ZnKdWxTH49JhqZ7Xd-cJIA?pwd4332 提取码&#xff1a;4332 html/JQuery代码&#xff1a; <!DOCTYPE html> <html lang"zh"> <head&g…

网络通信(11)-C#TCP服务端封装帮助类实例

本文使用Socket在C#语言环境下完成TCP服务端封装帮助类的实例。 实例完成的功能: 服务器能够连接多个客户端显示在列表中,实现实时刷新。 服务器接收客户端的字符串数据。 选中列表中的客户端发送字符串数据。 在VS中创建C# Winform项目,编辑界面,如下: UI文件 name…

Java中SpringBoot组件集成接入【MQTT中间件】

Java中SpringBoot组件集成接入【MQTT中间件】 1.MQTT介绍2.搭建MQTT服务器1.Windows2.Ubuntu3.Docker4.其他方式3.mqtt可视化客户端MQTTX及快速使用教程4.SpringBoot接入MQTT1、maven依赖2、MQTT配置3、MQTT组件具体代码1.定义通道名字2.消息发布器3.MQTT配置、生产者、消费者4…