热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

关于目标检测

目标检测RegionbasednetworkRCNN一张图像生成1K~2K个候选区域对每个候选区域,使用深度网络提取特征特征送入每一类的SVM分类器,判别是否属于该类使用回归器精细

目标检测

Region based network

RCNN

  • 一张图像生成1K~2K个候选区域
  • 对每个候选区域,使用深度网络提取特征
  • 特征送入每一类的SVM 分类器,判别是否属于该类
  • 使用回归器精细修正候选框位置

Selective Search 候选框生成

传统的生成方法,就是检测就是不同大小的滑动窗进行穷举,然后使用分类器判断哪个滑动窗是目标。而SS根据颜色,纹理之类的信息去把图片划分成不同区域可以相对于穷举搜索大量减少计算量,是简单的搜索剪枝思路。通过简单的区域划分算法,将图片划分成很多小区域,再通过相似度和区域大小(小的区域先聚合,这样是防止大的区域不断的聚合小区域,导致层次关系不完全)不断的聚合相邻小区域。

步骤
  • step0:生成区域集R
  • step1:计算区域集R里每个相邻区域的相似度S={s1,s2,…}
  • step2:找出相似度最高的两个区域,将其合并为新集,添加进R
  • step3:从S中移除所有与step2中有关的子集
  • step4:计算新集与所有子集的相似度
  • step5:跳至step2,直至S为空
相似度计算
  • 颜色相似度(color similarity)
  • 纹理相似度(texture similarity)
  • 尺寸相似度(size similarity)
  • 交叠相似度(shape compatibility measure)

Edge Boxes 候选框生成

利用边缘信息(Edge),确定框框内的轮廓个数和与框框边缘重叠的轮廓个数。

特征提取

对于每一个区域:修正区域大小以适合CNN的输入,做一次前向运算,将网络输出(就是对候选框提取到的特征)存到硬盘。

分类与回归

SVM分类器来判断这个候选框里物体的类别,最后使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美

RCNN缺点

  • 每一个候选区域都要过一次卷积网络,并且还要储存大量中间结果,速度慢,占空间
  • 训练步骤繁琐(微调网络+训练SVM+训练bbox)

SPP Net

贡献

  • 一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。通过在在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。
  • 在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。 所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层。节省了大量的计算时间。

Fast R-CNN

贡献

  • 提出了ROI Pooling,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量。将按比例得到的特征图上的roi区域用一个如7X7大小的bin进行分割,每个bin中进行一次max_pooling,最后得到了一个NX7X7的固定特征向量。
  • RCNN由于每一个候选框都要独自经过CNN,这使得花费的时间非常多。 而改进后的网络共享卷积层,现在不是每一个候选框都当做输入进入CNN了,而是输入一张完整的图片,在第五个卷积层再得到每个候选框的特征。
  • 原来的方法:许多候选框(比如两千个)-->CNN-->得到每个候选框的特征-->分类+回归; 现在的方法:一张完整图片-->CNN-->得到每张候选框的特征-->分类+回归

Faster R-CNN

贡献

Fast R-CNN存在的问题:在提供候选框的时候依旧使用了选择性搜索,找出所有的候选框,非常耗时。Faster R-CNN加入一个提取边缘的神经网络RPN,也就说找到候选框的工作也交给神经网络来做了。

RPN网络

在网络最后一个特征图上,使用滑动窗口和每个中心点的KxK个不同尺寸anchor预测前后背景概率以及框的平移缩放参数。

  • 在feature map上滑动窗口
  • 新建一个神经网络用于物体分类+框位置的回归
  • 滑动窗口的位置提供了物体的大体位置信息
  • 框的回归提供了框更精确的位置

正负样本框的选取

为了训练RPN,需要给每个anchor分配的类标签{目标、非目标}。对于positive label(正标签),论文中给了如下规定(满足以下条件之一即可判为正标签):

  • 正例:与GT的IOU大于0.7的anchor;与GT的IOU重叠最高的anchor(也许不到0.7)
  • 负例:与所有GT包围盒的IoU都小于0.3的anchor
  • 对于既不是正标签也不是负标签的anchor,以及跨越图像边界的anchor我们给予舍弃,因为其对训练目标是没有任何作用的。

loss 技术分享图片 技术分享图片

一幅600*1000的图像经过VGG16后大约为40*60,则此时的anchor数为40*60*9,约为20k个anchor boxes,再去除与边界相交的anchor boxes后,剩下约为6k个anchor boxes,这么多数量的anchorboxes之间肯定是有很多重叠区域,因此需要使用非极大值抑制法(NMS,non-maximum suppression)将IoU>0.7的区域全部合并,最后就剩下约2k个anchor boxes

每一个mini-batch包含从一张图像中随机提取的256个anchor(注意,不是所有的anchor都用来训练),前景样本和背景样本均取128个,达到正负比例为1:1。如果一个图像中的正样本数小于128,则多用一些负样本以满足有256个Proposal可以用于训练。

anchor选取

  • why

Detection任务有两个特点:物体尺度变化,正负样本的不平衡。这两个原因会导致直接用检测框来做,模型难以收敛或者得到精确的结果,YOLOv1的缺点就是定位精度差。而anchor机制相当于提供了一个强先验知识,对于不同的物体用不同的anchor来回归,并且通过一定方法控制正负样本的数量,对于样本不平衡会有一定作用。可以看到YOLO在随后的版本里也借鉴了anchor机制。

以faster RCNN系列为例,通过设计不同scale和ratio的anchors,可以尽量覆盖较好的物体尺度,通过RPN来生成proposals,一方面保证正样本的recall,另一方面修正anchors得到比较好的proposals,同时将正负样本控制在了比较合理的范围内,再通过RCNN细分类和回归,往往要比单阶的能够得到更好的结果。小物体和拥挤等复杂case上,faster RCNN系列的方法还是起主导地位。

  • how

如何设计anchor,可以用两个思路:一是做anchor实验,以与training set的所有label的recall与平局IOU,最大IOU等多个指标为准;二是直接用k-means来聚类,参考yolo v3的方法。

  • faster rcnn 中实现

三个面积尺寸(1282 ,2562 ,5122),然后在每个面积尺寸下,取三种不同的长宽比例(1:1,1:2,2:1).这样一来,我们得到了一共9种面积尺寸各异的anchor

技术分享图片 对于每个3x3窗口,作者假定它来自9种不同原始区域的池化,但是这些池化在原始图片中的中心点,都完全一样。这个中心点,就是刚才提到的,3x3窗口中心点所对应的原始图片中的中心点。如此一来,在每个窗口位置,我们都可以根据9个不同长宽比例、不同面积的anchor,逆向推导出它所对应的原始图片中的一个区域,这个区域的尺寸以及坐标,都是已知的。而这个区域,就是我们想要的 proposal。

Fatser rcnn中,如何处理背景候选框和含有目标的候选框不平衡问题

  • 背景框和目标框进行sample
  • OHEM
  • FOCAL LOSS

为什么不直接回归坐标

只有当Proposal和Ground Truth比较接近时(线性问题),我们才能将其作为训练样本训练我们的线性回归模型,否则会导致训练的回归模型不work(当Proposal跟GT离得较远,就是复杂的非线性问题了,此时用线性回归建模显然不合理)。回归平移和变换尺度更准确。

R-FCN

贡献

  • 分类需要特征具有平移不变性,检测则要求对目标的平移做出准确响应。现在的大部分CNN在分类上可以做的很好,但用在检测上效果不佳。SPP,Faster R-CNN类的方法在ROI pooling前都是卷积,是具备平移不变性的,但一旦插入ROI pooling之后,后面的网络结构就不再具备平移不变性了。因此,本文想提出来的position sensitive score map这个概念是能把目标的位置信息融合进ROI pooling。
  • 与faster-rcnn不同的是,rfcn将基础卷积都共享了,用来预测的roi放到了最后一层。 以3x3位置信息为例,roi取出对应最后一层特征图后生成(3x3)(C+1)个channel的特征图,最后9个位置每个类分别求和计算得分。

SSD

SSD不同与之前的region based方法,通过使用全卷积网络的不同尺度feature map进行目标检测。

贡献

  • 提出了SSD目标检测方法,在速度上,比之前最快的YOLO还要快,在检测精度上,可以和Faster RCNN相媲美
  • SSD的核心是在特征图上采用卷积核来预测一系列default bounding boxes的类别分数、偏移量
  • 为了提高检测准确率,在不同尺度的特征图上进行预测,此外,还得到具有不同aspect ratio的结果
  • 这些改进设计,实现了end-to-end训练,并且,即使图像的分辨率比较低,也能保证检测的精度

在特征图的每个位置预测K个box。对于每个box,预测C个类别得分,以及相对于default bounding box的4个偏移值,这样需要(C+4)Xk个预测器,在mxn的特征图上将产生(C+4)XkXmXn个预测值。在SSD结构中,default box不需要和每一层的感受野相对应,特定的特征图负责处理图像中特定尺度的物体。

YOLO

YOLO V1

YOLO将输入图像分成SxS个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。

技术分享图片

YOLOv1网络在最后使用全连接层进行类别输出,因此全连接层的输出维度是 S×S×(B×5+C)。每个格子预测B个bounding box及其置信度(confidence score),以及C个类别概率。

缺点

  • 输入尺寸固定:由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。其它分辨率需要缩放成改分辨率.
  • 占比较小的目标检测效果不好.虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。

YOLO V2

相比v1提高了训练图像的分辨率;引入了faster rcnn中anchor box的思想,对网络结构的设计进行了改进,输出层使用卷积层替代YOLO的全连接层,联合使用coco物体检测标注数据和imagenet物体分类标注数据训练物体检测模型。相比YOLO,YOLO9000在识别种类、精度、速度、和定位准确性等方面都有大大提升。

改进

  • 引入BN,取消了dropout
  • 高分辨率分类器:v1中使用224 × 224训练分类器网络,扩大到448用于检测网络。v2将ImageNet以448×448 的分辨率微调最初的分类网络,迭代10 epochs。调整了网络的输入(448->416)以使得位置坐标是奇数只有一个中心点
  • Anchor Boxes:采样k-means在训练集bbox上进行聚类产生合适的先验框.由于使用欧氏距离会使较大的bbox比小的bbox产生更大的误差,而IOU与bbox尺寸无关,因此使用IOU参与距离计算,使得通过这些anchor boxes获得好的IOU分值。过程是:将每个bbox的宽和高相对整张图片的比例(wr,hr)进行聚类
  • 细粒度特征:添加一个 pass through layer,把浅层特征图(26x26)连接到深层特征图。这个方法把26x26x512的特征图叠加成13x13x2048的特征图,与原生的深层特征图相连接,使模型有了细粒度特征。
  • Multi-Scale Training:和YOLOv1训练时网络输入的图像尺寸固定不变不同,YOLOv2(在cfg文件中random=1时)每隔几次迭代后就会微调网络的输入尺寸。训练时每迭代10次,就会随机选择新的输入图像尺寸。因为YOLOv2的网络使用的downsamples倍率为32,所以使用32的倍数调整输入图像尺寸{320,352,…,608}。训练使用的最小的图像尺寸为320 x 320,最大的图像尺寸为608 x 608。 这使得网络可以适应多种不同尺度的输入.
  • Hierarchical classi?cation:整合ImageNet和COCO的标签构件wordtree,模型预测了一个包含1369个元素的向量,而且基于所有“同义词集”计算softmax,其中“同义词集”是同一概念的下位词。

技术分享图片

  • 联合训练分类和检测:oversampling COCO数据集来保持平衡, 采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。

YOLO V3

改进

  • 多尺度预测(类似FPN):每种尺度预测3个box, anchor的设计方式仍然使用聚类,得到9个聚类中心,将其按照大小均分给3个尺度。尺度1: 在基础网络之后添加一些卷积层再输出box信息. 尺度2: 从尺度1中的倒数第二层的卷积层上采样(x2)再与最后一个16x16大小的特征图相加,再次通过多个卷积后输出box信息.相比尺度1变大两倍. 尺度3: 与尺度2类似,使用了32x32大小的特征图.

技术分享图片

  • 更好的基础分类网络(类ResNet)和分类器:YOLOv3不使用Softmax对每个框进行分类,主要考虑因素有两个:1. Softmax使得每个框分配一个类别(score最大的一个),目标可能有重叠的类别标签,因此Softmax不适用于多标签分。2.Softmax可被独立的多个logistic分类器替代,且准确率不会下降。

优点

  • 通用性强。YOLO对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法。
  • 背景误检率低,速度快。

缺点

  • 识别物体位置精准性差。
  • 召回率低。在每个网格中预测固定数量的bbox这种约束方式减少了候选框的数量。

YOLO VS RCNN方法

统一网络:YOLO没有显示求取region proposal的过程。Faster R-CNN中尽管RPN与fast rcnn共享卷积层,但是在模型训练过程中,需要反复训练RPN网络和fast rcnn网络.相对于R-CNN系列的"看两眼"(候选框提取与分类,图示如下),YOLO只需要Look Once.

Q&A

NMS

技术分享图片

ROI align

ROI Pooling 的作用是根据预选框的位置坐标在特征图中将相应区域池化为固定尺寸的特征图,以便进行后续的分类和包围框回归操作。由于预选框的位置通常是由模型回归得到的,一般来讲是浮点数,而池化后的特征图要求尺寸固定。故ROI Pooling这一操作存在两次量化的过程。

  • 将候选框边界量化为整数点坐标值。
  • 将量化后的边界区域平均分割成 k x k 个单元(bin),对每一个单元的边界进行量化

经过上述两次量化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度。

技术分享图片

ROI Align的思路很简单:取消量化操作,使用双线性内插的方法获得坐标为浮点数的像素点上的图像数值,从而将整个特征聚集过程转化为一个连续的操作。

关于目标检测


推荐阅读
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 本文介绍了腾讯最近开源的BERT推理模型TurboTransformers,该模型在推理速度上比PyTorch快1~4倍。TurboTransformers采用了分层设计的思想,通过简化问题和加速开发,实现了快速推理能力。同时,文章还探讨了PyTorch在中间层延迟和深度神经网络中存在的问题,并提出了合并计算的解决方案。 ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了一种解析GRE报文长度的方法,通过分析GRE报文头中的标志位来计算报文长度。具体实现步骤包括获取GRE报文头指针、提取标志位、计算报文长度等。该方法可以帮助用户准确地获取GRE报文的长度信息。 ... [详细]
  • PDF内容编辑的两种小方法,你知道怎么操作吗?
    本文介绍了两种PDF内容编辑的方法:迅捷PDF编辑器和Adobe Acrobat DC。使用迅捷PDF编辑器,用户可以通过选择需要更改的文字内容并设置字体形式、大小和颜色来编辑PDF文件。而使用Adobe Acrobat DC,则可以通过在软件中点击编辑来编辑PDF文件。PDF文件的编辑可以帮助办公人员进行文件内容的修改和定制。 ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
author-avatar
和寧世杰471
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有