机器学习周报第34周

news2024/9/28 11:21:09

目录

  • 摘要
  • Abstract
  • 一、CNN复习
  • 二、目标检测
    • 2.1 背景
    • 2.2 目标检测发展脉络
      • 2.2.1传统目标检测算法
      • 2.2.2 Anchor-Based中的Two-stage目标检测算法
  • 三、文献阅读:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
    • 3.1 摘要
    • 3.2 背景
    • 3.3 解决方案
    • 3.4 Faster R-CNN

摘要

Abstract

一、CNN复习

一个卷积神经网络主要由以下5层组成:

数据输入层/ Input layer
卷积计算层/ CONV layer
ReLU激励层 / ReLU layer
池化层 / Pooling layer
全连接层 / FC layer

  1. 数据输入层

该层要做的处理主要是对原始图像数据进行预处理,其中包括:

去均值:把输入数据各个维度都中心化为0,如下图所示,其目的就是把样本的中心拉回到坐标系原点上。
归一化:幅度归一化到同样的范围,如下所示,即减少各维度数据取值范围的差异而带来的干扰,比如,我们有两个维度的特征A和B,A范围是0到10,而B范围是0到10000,如果直接使用这两个特征是有问题的,好的做法就是归一化,即A和B的数据都变为0到1的范围。
PCA/白化:用PCA降维;白化是对数据各个特征轴上的幅度归一化
去均值与归一化效果图:
在这里插入图片描述
去相关与白化效果图:
在这里插入图片描述
2. 卷积计算层

这一层就是卷积神经网络最重要的一个层次,也是“卷积神经网络”的名字来源。
在这个卷积层,有两个关键操作:

局部关联。每个神经元看做一个滤波器(filter)
窗口(receptive field)滑动, filter对局部数据计算

先介绍卷积层遇到的几个名词:

深度/depth(解释见下图)
步幅/stride (窗口一次滑动的长度)
填充值/zero-padding
在这里插入图片描述
还记得我们在第一篇中提到的过滤器、感受野和卷积吗?很好。现在,要改变每一层的行为,有两个主要参数是我们可以调整的。选择了过滤器的尺寸以后,我们还需要选择步幅(stride)和填充(padding)。

步幅控制着过滤器围绕输入内容进行卷积计算的方式。在第一部分我们举的例子中,过滤器通过每次移动一个单元的方式对输入内容进行卷积。过滤器移动的距离就是步幅。在那个例子中,步幅被默认设置为1。步幅的设置通常要确保输出内容是一个整数而非分数。让我们看一个例子。想象一个 7 x 7 的输入图像,一个 3 x 3 过滤器(简单起见不考虑第三个维度),步幅为 1。这是一种惯常的情况。
在这里插入图片描述
在这里插入图片描述
所以,正如你能想到的,感受野移动了两个单元,输出内容同样也会减小。注意,如果试图把我们的步幅设置成 3,那我们就会难以调节间距并确保感受野与输入图像匹配。正常情况下,程序员如果想让接受域重叠得更少并且想要更小的空间维度(spatial dimensions)时,他们会增加步幅。

填充值是什么呢?

在此之前,想象一个场景:当你把 5 x 5 x 3 的过滤器用在 32 x 32 x 3 的输入上时,会发生什么?输出的大小会是 28 x 28 x 3。注意,这里空间维度减小了。如果我们继续用卷积层,尺寸减小的速度就会超过我们的期望。在网络的早期层中,我们想要尽可能多地保留原始输入内容的信息,这样我们就能提取出那些低层的特征。比如说我们想要应用同样的卷积层,但又想让输出量维持为 32 x 32 x 3 。为做到这点,我们可以对这个层应用大小为 2 的零填充(zero padding)。零填充在输入内容的边界周围补充零。如果我们用两个零填充,就会得到一个 36 x 36 x 3 的输入卷。
在这里插入图片描述
如果我们在输入内容的周围应用两次零填充,那么输入量就为 32×32×3。然后,当我们应用带有 3 个 5×5×3 的过滤器,以 1 的步幅进行处理时,我们也可以得到一个 32×32×3 的输出

如果你的步幅为 1,而且把零填充设置为
在这里插入图片描述
K 是过滤器尺寸,那么输入和输出内容就总能保持一致的空间维度。

计算任意给定卷积层的输出的大小的公式是

在这里插入图片描述
其中 O 是输出尺寸,K 是过滤器尺寸,P 是填充,S 是步幅。

二、目标检测

2.1 背景

目标检测任务是找出图像或视频中人们感兴趣的物体,并同时检测出它们的位置和大小。不同于图像分类任务,目标检测不仅要解决分类问题,还要解决定位问题,是属于Multi-Task的问题。如下图1-1所示:
在这里插入图片描述
作为计算机视觉的基本问题之一,目标检测构成了许多其它视觉任务的基础,例如实例分割,图像标注和目标跟踪等等;从检测应用的角度看:行人检测、面部检测、文本检测、交通标注与红绿灯检测,遥感目标检测统称为目标检测的五大应用。

2.2 目标检测发展脉络

目标检测的发展脉络可以划分为两个周期:传统目标检测算法时期(1998年-2014年)和基于深度学习的目标检测算法时期(2014年-至今)。而基于深度学习的目标检测算法又发展成了两条技术路线:Anchor based方法(一阶段,二阶段)和Anchor free方法。下图2-1展示了从2001年至2021年目标检测领域中,目标检测发展路线图。
在这里插入图片描述

2.2.1传统目标检测算法

不同于现在的卷积神经网络可以自动提取高效特征进行图像表示,以往的传统目标检测算法主要基于手工提取特征。传统检测算法流程可概括如下:

选取感兴趣区域,选取可能包含物体的区域
对可能包含物体的区域进行特征提取
对提取的特征进行检测分类
Viola Jones Detector
VJ[1] (Viola Jones)检测器采用滑动窗口的方式以检查目标是否存在窗口之中,该检测器看起来似乎很简单稳定,但由于计算量庞大导致时间复杂度极高,为了解决该项问题,检测器通过合并三项技术极大提高了检测速度,这三项技术分别是:1)特征的快速计算方法-积分图,2)有效的分类器学习方法-AdaBoost,以及3)高效的分类策略-级联结构的设计。
HOG Detector
HOG[2](Histogram of Oriented Gradients)检测器于2005年提出,是当时尺度特征不变性(Scale Invariant Feature Transform)和形状上下文(Shape Contexts)的重要改进,为了平衡特征不变性(包括平移,尺度,光照等)和非线性(区分不同的对象类别),通过在均匀间隔单元的密集网格上计算重叠的局部对比度归一化来提高检测准确性,因此检测器是基于本地像素块进行特征直方图提取的一种算法,它在目标局部变形和受光照影响下都有很好的稳定性。为后期很多检测方法奠定了重要基础,相关技术被广泛应用于计算机视觉各大应用。
DPM Detector
作为VOC 2007-2009目标检测挑战赛的冠军,DPM[3] (Deformable Parts Model)是目标检测传统算法中当之无愧的SOTA(State Of The Art)算法。于2008年提出,相比于,作了很多改进,因此该算法可以看作的延申算法。算法由一个主过滤器(Root-filter)和多个辅过滤器(Part-filters)组成,通过硬负挖掘(Hard negative mining),边框回归(Bounding box regression)和上下文启动(Context priming)技术改进检测精度。作为传统目标检测算法的SOTA,方法运算速度快,能够适应物体形变,但它无法适应大幅度的旋转,因此稳定性差。
局限性
基于手工提取特征的传统目标检测算法主要有以下三个缺点:

识别效果不够好,准确率不高
计算量较大,运算速度慢
可能产生多个正确识别的结果

2.2.2 Anchor-Based中的Two-stage目标检测算法

基于手工提取特征的传统目标检测算法进展缓慢,性能低下。直到2012年卷积神经网络(Convolutional Neural Networks, CNNs)的兴起将目标检测领域推向了新的台阶。基于CNNs的目标检测算法主要有两条技术发展路线:anchor-based和anchor-free方法,而anchor-based方法则包括一阶段和二阶段检测算法(二阶段目标检测算法一般比一阶段精度要高,但一阶段检测算法速度会更快)。
二阶段检测算法主要分为以下两个阶段
Stage1:从图像中生成region proposals
Stage2:从region proposals生成最终的物体边框。

RCNN
在这里插入图片描述
【简介】 RCNN[4]由Ross Girshick于2014年提出,RCNN首先通过选择性搜索算法Selective Search从一组对象候选框中选择可能出现的对象框,然后将这些选择出来的对象框中的图像resize到某一固定尺寸的图像,并喂入到CNN模型(经过在ImageNet数据集上训练过的CNN模型,如AlexNet)提取特征,最后将提取出的特征送入到分类器来预测该对象框中的图像是否存在待检测目标,并进一步预测该检测目标具体属于哪一类。
【性能】 RCNN算法在VOC-07数据集上取得了非常显著的效果,平均精度由33.7%(DPM-V5, 传统检测的SOTA算法)提升到58.5%。相比于传统检测算法,基于深度学习的检测算法在精度上取得了质的飞跃。
【不足】 虽然RCNN算法取得了很大进展,但缺点也很明显:重叠框(一张图片大2000多个候选框)特征的冗余计算使得整个网络的检测速度变得很慢(使用GPU的情况下检测一张图片大约需要14S)。
SPPNet
在这里插入图片描述
【简介】 SPPNet[5]提出了一种空间金字塔池化层(Spatial Pyramid Pooling Layer, SPP)。它的主要思路是对于一副图像分成若干尺度的图像块(比如一副图像分成1份,4份,8份等),然后对每一块提取的特征融合在一起,从而兼顾多个尺度的特征。SPP使得网络在全连接层之前能生成固定尺度的特征表示,而不管输入图片尺寸如何。当使用SPPNet网络用于目标检测时,整个图像只需计算一次即可生成相应特征图,不管候选框尺寸如何,经过SPP之后,都能生成固定尺寸的特征表示图,这避免了卷积特征图的重复计算。
【性能】 相比于RCNN算法,SPPNet在Pascal-07数据集上不牺牲检测精度(VOC-07, mAP=59.2%)的情况下,推理速度提高了20多倍。
【不足】 和RCNN一样,SPP也需要训练CNN提取特征,然后训练SVM分类这些特征,这需要巨大的存储空间,并且多阶段训练的流程也很繁杂。除此之外,SPPNet只对全连接层进行微调,而忽略了网络其它层的参数。
为了解决以上存在的一些不足,2015年R. Girshick等人提出Fast RCNN

Fast RCNN
在这里插入图片描述
【简介】 Fast RCNN[6]网络是RCNN和SPPNet的改进版,该网路使得我们可以在相同的网络配置下同时训练一个检测器和边框回归器。该网络首先输入图像,图像被传递到CNN中提取特征,并返回感兴趣的区域ROI,之后再ROI上运用ROI池化层以保证每个区域的尺寸相同,最后这些区域的特征被传递到全连接层的网络中进行分类,并用Softmax和线性回归层同时返回边界框。
【性能】 Fast RCNN在VOC-07数据集上将检测精度mAP从58.5%提高到70.0%,检测速度比RCNN提高了200倍。
【不足】 Fast RCNN仍然选用选择性搜索算法来寻找感兴趣的区域,这一过程通常较慢,与RCNN不同的是,Fast RCNN处理一张图片大约需要2秒,但是在大型真实数据集上,这种速度仍然不够理想。
那么问题来了: “我们可以使用CNN模型来直接生成候选框吗?”,基于此,Faster RCNN的提出完美回答这一问题。
Faster RCNN
在这里插入图片描述
【简介】 Faster RCNN[7]是第一个端到端,最接近于实时性能的深度学习检测算法,该网络的主要创新点就是提出了区域选择网络用于申城候选框,能几大提升检测框的生成速度。该网络首先输入图像到卷积网络中,生成该图像的特征映射。在特征映射上应用Region Proposal Network,返回object proposals和相应分数。应用Rol池化层,将所有proposals修正到同样尺寸。最后,将proposals传递到完全连接层,生成目标物体的边界框。
【性能】 该网络在当时VOC-07,VOC-12和COCO数据集上实现了SOTA精度,其中COCO mAP@.5=42.7%, COCO mAP@[.5,.95]=21.9%, VOC07 mAP=73.2%, VOC12 mAP=70.4%, 17fps with ZFNet
【不足】 虽然Faster RCNN的精度更高,速度更快,也非常接近于实时性能,但它在后续的检测阶段中仍存在一些计算冗余;除此之外,如果IOU阈值设置的低,会引起噪声检测的问题,如果IOU设置的高,则会引起过拟合。

三、文献阅读:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

3.1 摘要

先进的目标检测网络依赖于区域建议算法来假设目标位置。SPPnet和Fast R-CNN等技术的进步降低了这些检测网络的运行时间,使得候选区域计算成为瓶颈。在这项工作中,我们引入了一个区域建议网络( RPN ),它与检测网络共享全图卷积特征,从而实现了几乎无成本的区域建议。RPN是一个全卷积网络,它同时预测每个位置的对象边界和对象性分数。对RPN进行端到端的训练,生成高质量的区域提议,并由Fast R - CNN用于检测。我们进一步通过共享它们的卷积特征将RPN和Fast R - CNN合并到一个单一的网络中-使用最近流行的具有"注意力"机制的神经网络术语,RPN组件告诉统一网络在哪里看。对于非常深的VGG - 16模型,我们的检测系统在GPU上的帧率为5fps (包括所有步骤),同时在PASCAL VOC 2007,2012和MS COCO数据集上达到了最先进的目标检测精度,每个图像只有300个候选框。

3.2 背景

最近在目标检测方面的进展是由区域建议方法和基于区域的卷积神经网络( RCNNs )的成功推动的[ 5 ]。虽然基于区域的CNN如最初在中开发的那样在计算上很昂贵,但由于在提案之间共享卷积,它们的成本已经大大降低。最新的化身Fast R- CNN,在忽略区域建议所花费的时间的情况下,使用非常深的网络实现了接近实时的速率。目前,提案是最先进的检测系统中的测试时间计算瓶颈。
区域推荐方法通常依赖于廉价的特征和经济的推理方案。选择性搜索是最流行的方法之一,它基于工程化的低层特征贪婪地合并超像素。然而,与高效的检测网络相比,选择性搜索的速度要慢一个数量级,在CPU实现中每幅图像的速度为2秒。Edge Boxes目前在提案质量和速度之间提供了最佳折衷,每张图片0.2秒。尽管如此,区域建议步骤仍然消耗与检测网络一样多的运行时间。

3.3 解决方案

人们可能会注意到,基于区域的快速CNN利用了GPU的优势,而研究中使用的区域建议方法是在CPU上实现的,因此这种运行时比较是不公平的。加速提案计算的一个显而易见的方法是将其重新实现为GPU。这可能是一个有效的工程解决方案,但重新实现忽略了下游的检测网络,因此错过了共享计算的重要机会。
在本文中,我们展示了使用深度卷积神经网络的算法更改计算提案-导致一个优雅和有效的解决方案,其中提案计算在给定检测网络的计算量的情况下几乎是免费的。为此,我们引入了新颖的区域建议网络( RPN ),它与最先进的目标检测网络共享卷积层。通过在测试时共享卷积,计算提案的边际成本是很小的(例如,每幅图像10ms)。

3.4 Faster R-CNN

本文介绍了Faster R-CNN模型,这是一种基于区域的目标检测网络。该模型由两个主要部分组成:区域建议网络(RPN)和快速R-CNN检测网络。RPN是一个全卷积网络,可以预测图像中每个位置的物体边界和物体得分。RPN与Fast R-CNN网络共享卷积特征,支持无成本区域提议。RPN组件使用带有“注意力”机制的神经网络概念,告诉统一网络去哪里看。该模型在各种数据集上实现了最先进的目标检测精度,包括PASCAL VOC和MS COCO,在GPU上的帧率为5fps。
在这里插入图片描述
RPN技术的引入,极大地提升了目标检测的速度和准确性,使得目标检测算法在实际应用中取得了显著的进步。
RPN的核心思想是利用卷积神经网络(CNN)的特征共享机制,将区域提议的生成与后续的目标检测任务紧密结合。具体来说,RPN是一个全卷积网络,它在CNN的特征图上并行地预测目标边界和对象性得分。这种设计使得RPN能够在几乎不增加计算成本的情况下,生成高质量的区域提议。
RPN的基本结构包括一个3x3的卷积层,用于提取特征,以及两个平行的1x1的卷积层,分别用于预测边界框的坐标和对象性得分。在训练过程中,RPN通过端到端的方式进行训练,以生成高质量的区域提议。这些提议随后被传递给Fast R-CNN进行目标检测。
此外,RPN还引入了一种称为“锚点”(anchors)的机制,用于处理不同尺度和纵横比的目标。在每个滑动窗口位置,RPN预设了多个不同尺度和纵横比的锚点,以覆盖可能的目标形态。这使得RPN能够更准确地预测目标的位置和大小。
通过与Fast R-CNN的结合,RPN进一步提高了目标检测的准确性。通过将RPN和Fast R-CNN合并为一个单一的网络,并共享它们的卷积特征,可以实现更高效的计算。这种合并的方式使得整个检测网络能够在关注重要区域的同时,减少不必要的计算开销。
在实验结果方面,使用RPN的Faster R-CNN在多个数据集上取得了领先的目标检测性能。在PASCAL VOC 2007、2012和MS COCO等数据集上,Faster R-CNN仅使用300个提议就能达到最先进的检测精度。此外,在ILSVRC和COCO2015竞赛中,Faster R-CNN和RPN也是多个赛道第一名获奖作品的基础。
总的来说,RPN技术通过结合特征共享、锚点机制和与Fast R-CNN的合并,实现了高效且准确的目标检测。它的引入不仅提高了目标检测的速度和精度,还为后续的目标检测算法研究提供了重要的启示和参考。

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

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

相关文章

day06vue2学习

day06 路由的封装抽离 问题:所有的路由配置都堆在main.js中不太合适么?不好,会加大代码的复杂度 目标:将路由模块抽离出来。好处:差分模块,利于维护。 大致的做法就是,将路由相关的东西都提…

关于使用TCP-S7协议读写西门子PLC字符串的问题

我们可以使用TCP-S7协议读写西门子PLC, 比如PLC中定义一个String[50] 的地址DB300.20 地址DB300.20 DB块编号为300,偏移量【地址】是30 S7协议是西门子PLC自定义的协议,默认端口102,本质仍然是TCP协议的一种具体实现&#xff…

Linux的一些基本指令

​​​​​​​ 目录 前言: 1.以指令的形式登录 2.ls指令 语法: 功能: 常用选项: 3.pwd指令 4.cd指令 4.1 绝对路径与相对路径 4.2 cd .与cd ..(注意cd后先空格,然后两个点是连一起的&#xff0…

数据库范式拆分实战

函数依赖 如果给定一个X,能唯一确定一个Y,就称X确定Y,或者说Y依赖于X,例如Y X*X函数。 X -> Y(X确定Y,Y依赖于X) 部分函数依赖 A可确定C,(A,B&#xff09…

基于深度学习的生活垃圾智能分类系统(微信小程序+YOLOv5+训练数据集+开题报告+中期检查+论文)

摘要 本文基于Python技术,搭建了YOLOv5s深度学习模型,并基于该模型研发了微信小程序的垃圾分类应用系统。本项目的主要工作如下: (1)调研了移动端垃圾分类应用软件动态,并分析其优劣势;…

stm32使用定时器实现PWM与呼吸灯

PWM介绍 STM32F103C8T6 PWM 资源: 高级定时器( TIM1 ): 7 路 通用定时器( TIM2~TIM4 ):各 4 路 例如定时器2 PWM 输出模式: PWM 模式 1 :在 向上计数 时&#xff0…

Linux之git

一、什么叫做版本控制 版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。简单来说就是用于管理多人协同开发项目的技…

【链表】Leetcode 142. 环形链表 II【中等】

环形链表 II 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系…

YoloV8改进策略:BackBone改进|PKINet

摘要 PKINet是面向遥感旋转框的主干,网络包含了CAA、PKI等模块,给我们改进卷积结构的模型带来了很多启发。本文,使用PKINet替代YoloV8的主干网络,实现涨点。PKINet是我在作者的模型基础上,重新修改了底层的模块,方便大家轻松移植到YoloV8上。 论文:《Poly Kernel Ince…

zabbix企业微信的告警媒介配置

简介: Zabbix企业微信告警媒介可用于向特定群组成员发送提醒通知。 前提条件: 完成Zabbix告警平台的搭建后,需将群机器人添加至告警提醒群中。 企业微信群聊——右上角三个点——添加群机器人 保存好产生的webhook地址(注意&…

Kotlin的lateinit关键词

Kotlin的lateinit关键词 lateinit,延迟初始化。有时,并不能定义一个变量或对象值为空,而也没办法在对象或变量在定义声明时就为它赋值初始化,那么这时就需要用到Kotlin提供的延迟初始化lateinit。比如,有些依赖注入框架…

Docker可视化管理工具DockerUI

什么是 DockerUI ? DockerUI 是一款开源的、强大的、轻量级的 Docker 管理工具。DockerUI 覆盖了 docker cli 命令行 95% 以上的命令功能,通过可视化的 Web 界面操作,可以非常方便、轻松进行 docker 环境和 docker swarm 集群环境的管理和维护…

二分算法(查找)

问题:在数组中查找某一个数字x4的下标 例:arr:1 3 4 6 10 20 21 22 显然,数字4的下标为3。 1、线性查找,一个个地去遍历,时间复杂度为O(n) 2、二分查找&#xff0…

Centos7虚拟机中oracle19c数据库安装

目录[-] 1. Centos7虚拟机中oracle19c数据库安装 1.1. 1.先诀条件1.2. 2.oracle19c安装准备(root用户下执行)1.3. 3.CentOS7上安装oracle19c 1.先诀条件 本文在安装oracle19c时,各项oracle配置操作都通过图形界面进行。因此CentOS7系统需要安装gnome图形程序,虚拟机安装时未…

【自编码器】梳理(上)

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 梳理有关自编码器 1. 自编码器 1.1 原理 Auto-Encoder,中文称作自编码器,是一种无监督式学习模型。利用输入数据 X X X本身作…

苍穹外卖笔记

苍穹外卖 DAY01nginx反向代理MD5加密yapi进行接口导入Swagger介绍 DAY02新增员工需求分析和设计写相关代码测试(1. 后端文档测试 2. 前后端联调代码完善 员工分页查询DAY01 02涉及到的知识 DAY01 nginx反向代理 MD5加密 拓展:spring security jwt 提供了更强大灵…

实战高效RPC方案在嵌入式环境中的应用与揭秘

实战高效RPC方案在嵌入式环境中的应用与揭秘 开篇 在嵌入式系统开发中,大型项目往往采用微服务架构来构建,其核心思想是将一个庞大的单体应用分割成一系列小型、独立、松耦合的服务模块,这些模块可以是以线程或进程形式存在的多个服务单元。…

C语言动态内存的管理

前言 本篇博客就来探讨一下动态内存,说到内存,我们以前开辟空间大小都是固定的,不能调整这个空间大小,于是就有动态内存,可以让我们自己选择开辟多少空间,更加方便,让我们一起来看看动态内存的有…

yolov5训练并生成rknn模型部署在RK3588开发板上,实现NPU加速推理

简介 RK3588是瑞芯微(Rockchip)公司推出的一款高性能、低功耗的集成电路芯片。它采用了先进的28纳米工艺技术,并配备了八核心的ARM Cortex-A76和Cortex-A55处理器,以及ARM Mali-G76 GPU。该芯片支持多种接口和功能,适…

python写爬虫爬取京东商品信息

工具库 爬虫有两种方案: 第一种方式是使用request模拟请求,并使用bs4解析respond得到数据。第二种是使用selenium和无头浏览器,selenium自动化操作无头浏览器,由无头浏览器实现请求,对得到的数据进行解析。 第一种方…