目标检测算法

目标检测概念

目标检测这里阐述两个应用场景,1 为物体位置检测,2 为物体关键点检测。

1 物体位置检测

相比与图片分类,目标检测算法结果要求不仅识别出图片中的物理类别并且输出物体的位置参数。
物体的位置通过bounding box表示。bounding box指的是能够框出物体的矩形框在图片中的对应参数,如下图所示。
图中红色框,就称为一个bounding box,bounding box由个参数来描述[bx,by,bh,bw][b_x, b_y, b_h, b_w][bx​,by​,bh​,bw​], 其中(bx,byb_x, b_ybx​,by​)对应矩形框的中心点坐标,bhb_hbh​则对应矩形框的高度,bwb_wbw​则对一个矩形框的宽度。如下图所示。

从而 bx=0.5,by=0.7,bh=0.3,bw=0.4b_x=0.5, b_y=0.7, b_h=0.3, b_w=0.4bx​=0.5,by​=0.7,bh​=0.3,bw​=0.4
将图片作为模型的输入, 输出为物体的类别和bounding box参数。如下图所示。

这里我们假设的是一个图片中指定为一个物体的类别及位置。
吴恩达老师的课程中这样定义模型输出y^=[pc,bx,by,bh,bw,c1,c2,c3]T\hat{y}=[p_c, b_x, b_y, b_h, b_w, c_1, c_2, c_3]^Ty^​=[pc​,bx​,by​,bh​,bw​,c1​,c2​,c3​]T,(不知道如何把T改为正体,欢迎留言说明。)

y^=[pc,bx,by,bh,bw,c1,c2,c3]T\hat{y}=[p_c, b_x, b_y, b_h, b_w, c_1, c_2, c_3]^Ty^​=[pc​,bx​,by​,bh​,bw​,c1​,c2​,c3​]T
其中,
pcp_cpc​为图中有物体的概率;
[bx,by,bh,bw][b_x, b_y, b_h, b_w][bx​,by​,bh​,bw​]则是对应物体的位置(bounding box)参数;
c1,c2,c3c_1, c_2, c_3c1​,c2​,c3​则是对应哪个物体的class。少一个c4c_4c4​是因为c1,c2,c3c_1, c_2, c_3c1​,c2​,c3​均为0时,则c4=1c_4=1c4​=1

2 物体关键点检测(landmark detection)

物体关键点检测的应用场景有,人脸关键点(眼睛、鼻子、嘴及脸的边缘点)的检测,人体姿态检测(头, 胳膊及腿的各个关键点的检测),还有比如天池的衣服关键点检测等都是属于这个范畴的应用场景。
输入为图片,输出则是这一系列关键点的坐标位置[[l1x,l1y],[l2x,l2y],...,[lnx,lny]][[l_{1x},l_{1y}], [l_{2x},l_{2y}], ... , [l_{nx},l_{ny}]][[l1x​,l1y​],[l2x​,l2y​],...,[lnx​,lny​]],即landmark。

物体位置检测算法

本文只是大致介绍位置检测的算法特点。
其实RCNN, Fast-rcnn, SPP-net, Faster-rcnn都可以分为两个主要部分:1. region proposal 提取regions;而YOLO及SSD则通过分格及anchor的方法来代替大批量的regions,相比YOLO及SSD计算量小,从而快一些。
接下来列出每个网络的主要特点。

RCNN介绍

相关概念介绍:
regions就是从原图像上截取的有可能包含物体的图像区域集合。
bounding box是指包含物体的矩形框。文中前面有介绍。
IOU(Intersection over Union)用来衡量两个regions之间的重叠度。上图。

矩形框A、B的一个重合度IOU计算公式为:
IOU=(A∩B)/(A∪B)
就是矩形框A、B的重叠面积占A、B并集的面积比例:
IOU=SI/(SA+SB-SI)

NMS(极大值抑制)是挑出不同类中的最大值,舍弃相近的但是不是极大的值。
在目标识别中,用于最后的bounding box筛选。经过SVM判别的bounding boxes,包含了所有类别的bounding boxes,通过NMS实现,最后留下不同类的最优的bounding box。详细的实现原理参考博客

RCNN结构主要步骤:

  • 图像对应的候选区域(1K~2K个)生成;
  • 候选区域的特征提取;
  • 特征分类(SVM);留下包含物体的regions,从而作为bounding boxes。
  • bounding box筛选,并修正。

各环节使用技术:

  • 候选区域生成
    使用Selective Search生成图像的候选区域。
    大体原理:
    是一种图像分格的手段,通过合并相似颜色或文理且相邻的区域,实现图像分割,将最后的区域去重输出。Selective Search源码地址。
  • 特征提取
    使用训练好的神经网络提取regions特征。
    RCNN训练特征主要经过2个阶段:
  1. Pre-train:
    使用ILVCR 2012数据集及简化版的Hinton 2012年在Image Net上的分类网络来进行预训练。(全连接层提取特征4096维,再使用全连接(4096->1000)实现1000类分类)。
  2. Fine-tune:
    替换Pre-train的最后输出层,换为(4096->21)21分类的输出层,使用数据集PASCAL VOC 2007来训练网络。此处训练的正负样本的标定:IOU>0.5则为正样本。
  • 特征分类
    使用一系列SVM来分类经过网络提取到的特征,SVM个数等于要标出的物种数。并且使用了hard negative mining。
    SVM训练时,正负样本标定:IOU>0.3则为正样本。
    在测试时,SVM输出为正的regions作为待筛选的bounding boxes。
  • bounding box筛选
    使用极大值抑制(NMS)。筛选得到每一类对应的最优的bounding box。
    最后通过bounding box回归精细优化bounding box。
    bounding box回归就是通过神经网络拟合平移和放缩两个函数,使用这两个函数使更加拟合真实的位置区域。loss就是原始box与目标box之间的距离。

RCNN网络的缺点

  1. 训练需要几个阶段;
  2. SS得到的regions是不同尺寸的。不同尺寸的regions需要经过,裁剪及放缩到相同的尺寸,这样会使一些内容丢失。
  3. 每个region的都需要经过模型去提取,并存放至磁盘;

SPP-net介绍

SPP-net(Spatial Pyramid Pooling) 提出主要结构:

  1. 提出金字塔结构,使模型可以处理不同尺寸的输入。
  2. 使用regions到特征层之间的映射,从而实现只提取一次完成的图像,regions特征通过映射关系来获取。
    SPP-net的缺点:
  3. 金字塔结构虽然使得模型处理不同尺寸输入的问题,但同时使模型不同同时训练金字塔左侧的卷积层。至于原因,作者给出的原因是金字塔的pooling层对应的感受野太大。本人觉得感受野太大,会使梯度传递不稳定。
    详细结构不作介绍。
  4. 训练依旧需要几个阶段。依旧采用SVM实现分类。
    SPP-net中技术点讲解

1. 金字塔讲解

实际原理就是,对每通道的特征进行分块,分成16*16, 4*4, 1*1块,挑出每块的最大值,得到16*16, 4*4, 1*1特征,展开成16*16 + 4*4 + 1*1为向量,输给全连接层。
2. regions到特征层之间是如何映射

图中输入层蓝色加深部分对应每一层的区域,一个区域对应经过卷积/pooling后的对应区域尺寸计算方法,与原图特征经过卷积/pooling后的对应尺寸相同。注:仅仅是借用这个图表示一下regions输入与其他层之间的对应关系。该图是原意旨在说利用1x1卷积核实现全卷积。

Fast-RCNN介绍:

Fast-RCNN优化技术点

  1. 提出ROI pooling layer,采用单层金字塔结构,其实就是在特征层只使用一个金字塔max-pooling,进一步简化了regions对应特征层的映射关系。
  2. 提出梯度传递方法,实现整个网络网络结构的全部训练。
  3. 在两层全连接中加入SVD降维,加快训练速度。
  4. 输出使用两个softmax,一个用于class分类,一个用于bounding box回归。

Fast-RCNN优化技术点讲解
ROI pooling layer讲解:
POI pooling layer 层是位于卷积后,全连接之前的layer。
输入为卷积层输出(H*W*N)及R个ROI元组,R表示regions的个数。每个ROI是一个元组(n, r, c, h, w),n是特征映射的索引,n∈{0, … ,N-1},(r, c)是RoI左上角的坐标,(h, w)是高与宽。
输出是max-pool过的特征映射,H’ x W’ x C的大小,H’≤H,W’≤W。金字塔的的切割参数:bin-size ~ h/H’ x w/W’,这样就有H’ x W’个,bin的大小是自适应的,取决于RoI的大小。

Faster-RCNN介绍:

Faster-RCNN优化技术点
提出RPN(Region Proposal Networks)区域生成网络,使用神经网络生成regions,代替RCNN中的Selective Search方法。节省regions proposal的时间。基本实现end to end训练。

RPN大致原理介绍:
在最后的卷积层(即特征提取层)上使用滑动窗口来预测。使用3x3的卷积核对得到的256维的特征图进行滑动卷积,分两路分别使用利用1*1/卷积,最后一路输出所有anchors的目标和非目标(背景)的概率,另一路输出anchors box相关的四个参数,包括box的中心坐标x和y,box宽w和长h。每次滑动卷积,输出k个anchors的是否包含物体以及位置信息。因此最后的RPN的输出是一路为2k对应分类(是否包含物体),另一路为4k对应anchors的位置信息。

作者采用四步训练法:
1) 单独训练RPN网络,网络参数由预训练模型载入;
2) 单独训练Fast-RCNN网络,将第一步RPN的输出候选区域作为检测网络的输入。具体而言,RPN输出一个候选框,通过候选框截取原图像,并将截取后的图像通过几次conv-pool,然后再通过roi-pooling和fc再输出两条支路,一条是目标分类softmax,另一条是bbox回归。截止到现在,两个网络并没有共享参数,只是分开训练了;
3) 再次训练RPN,此时固定网络公共部分的参数,只更新RPN独有部分的参数;
4) 那RPN的结果再次微调Fast-RCNN网络,固定网络公共部分的参数,只更新Fast-RCNN独有部分的参数。

YOLO算法介绍

YOLO技术大致原理
将一幅图像分成SxS个网格(grid cell),如果某个object的中心 落在这个网格中,则这个网格就负责预测这个object。

每个网格要预测落在该网格的物体类别及B个bounding box信息,每个bounding box预测信息包含自身位置信息(四个变量)和confidence值。
confidence代表了所预测的box中含有object的置信度和这个box预测的有多准(与标注的ground region的IOU)两重信息。
confidence=Pr(object)∗IOUpredtruthconfidence = P_r(object) * IOU_{pred}^{truth}confidence=Pr​(object)∗IOUpredtruth​
其中如果有object落在一个grid cell里,第一项取1,否则取0。 第二项是预测的bounding box和实际的groundtruth之间的IOU值。

每个bounding box要预测(x, y, w, h)和confidence共5个值,每个网格还要预测一个类别信息,记为C类。则SxS个网格,每个网格要预测B个bounding box还要预测C个categories。输出就是S x S x (5*B+C)的一个tensor。
注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的。

举例说明: 在PASCAL VOC中,图像输入为448x448,取S=7,B=2,一共有20个类别(C=20)。则输出就是7x7x30的一个tensor。
在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:
class−specificconfidencescore=Pr(classi)∗confidenceclass-specific confidence score = P_r(class_i) * confidenceclass−specificconfidencescore=Pr​(classi​)∗confidence
以上YOLO部分参考

目标检测算法汇集介绍相关推荐

  1. 卷积网络应用于目标检测算法

    简 介: 目标检测算法作为计算机视觉领域最基本且最具挑战性的任务之一,一直处于研究的热门领域.近年来,随着深度学习和卷积神经网络的兴起,传统的目标检测算法的性能已不能满足现今的指标要求而被基于卷积网络 ...

  2. 菜品识别系统(Faster-RCNN目标检测算法)

    目录 一.Faster-RCNN目标检测算法的介绍 二.效果展示 三.环境配置 四.图片数据集准备 五.代码具体实现 一.Faster-RCNN目标检测算法的介绍 Faster-RCNN 算法由于其较 ...

  3. 《基于海思35xx nnie引擎进行经典目标检测算法模型推理》视频课程介绍

    前言 沉寂两个月,终于将新的视频课程<<基于海思35xx nnie引擎进行经典目标检测算法模型推理>>(其链接为https://edu.csdn.net/course/deta ...

  4. 基于haar特征的adaboost算法_目标检测算法介绍

    什么是目标检测 目标检测是指从图像中找出目标,包括检测和识别两个过程,现实中由于环境的复杂性以及各类物体的形状.外观以及光照,遮挡等因素的干扰,所以目标检测一直也是计算机视觉最常见的挑战之一. 目标检 ...

  5. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN

    每次丢了东西,我们都希望有一种方法能快速定位出失物.现在,目标检测算法或许能做到.目标检测的用途遍布多个行业,从安防监控,到智慧城市中的实时交通监测.简单来说,这些技术背后都是强大的深度学习算法. 在 ...

  6. 3D目标检测算法调研FCOS/FCOS3D/FCOS3D++算法介绍

    一.综述 3D检测背景 二维目标检测算法能识别物体的类别.平面坐标以及边长,是计算机视觉中的一个基本问题.但是对于自动驾驶来说,二维信息还不足以让汽车充分感知三维立体的真实世界,当一辆智能汽车需要在道 ...

  7. 经典目标检测算法:RCNN、Fast RCNN、 Faster RCNN 基本思想和网络结构介绍

    目录 一.目标检测的基本介绍 1.1 什么是目标检测? 1.2 目标检测算法的分类 二.RCNN 2.1 RCNN简介 2.2 RCNN算法流程 2.3 RCNN流程图 2.4 RCNN框架 2.5 ...

  8. 深度学习之目标检测(一)—— 目标检测算法介绍

    目标检测问题 目标检测是在图片中对可变数量的目标进行查找和分类 查找就是定位到它在图片中的位置,通常表示为一个矩形框 对于这样的问题,主要存在三个主要难点 ①目标种类与数量问题 ②目标尺度问题 ③外在 ...

  9. two-stage目标检测算法介绍

    综述 two-stage是基本深度学习的目标检测算法的一种.主要通过一个完整的卷积神经网络来完成目标检测过程,所以会用到的是CNN特征,通过卷积神经网络提取对候选区域目标的特征的描述.典型的代表:R- ...

最新文章

  1. 判断数组里面的下标是否等于一个字符串
  2. mysql加锁处理分析_MySQL 加锁处理分析 ---非常牛逼
  3. Java中文编码小结
  4. SpringMVC(四)——Ajax技术
  5. 用java实现 两个工具和一个copy功能
  6. 第04讲: 基础探究,Session 与 Cookies
  7. Flex整合Spring
  8. visio中公式太小_五金冲压模具中的凹模有哪些注意事项,值得一看
  9. 顶级的CSS和Javascript动画框架
  10. 如何在vmware workstation 8下成功安装fedora 14
  11. 东芝服务器报错误代码维修,东芝复印机错误代码和维修代码
  12. 输入水仙花数的位数 c语言,水仙花数,水仙花数c语言
  13. 广告roi怎么计算公式_ROI计算公式和提升ROI的方法是什么?
  14. 基于Milton的webdav解决方案 - Test
  15. mysql的用户名迁移SCHEMA_数据库实时转移之Confluent环境搭建(二)
  16. 主流深度学习CTR模型
  17. ionic 3 http htpps
  18. String转int数组
  19. Java开发:哪些技能测试来评估Java开发人员的技能?
  20. 碧蓝航线内部表情包(有爱自取)

热门文章

  1. 在eclipse中安装Jess
  2. 我的2013,它不平淡
  3. 2021-09-22 小米通信软开二面
  4. APP界面常用的8种页面布局
  5. 情人节 玫瑰花表白源码
  6. 送大家一首歌《真心英雄》
  7. 多媒体计算机技术在教学中的应用,多媒体计算机技术在教学中的应用分析
  8. php.ini配置文件中文详细解释
  9. Lifecycle 一篇文章就够了
  10. python爬空气污染实时数据_python数据分析综合项目--空气质量指数分析