<>目标检测算法

<>目标检测概念

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

<>1 物体位置检测

相比与图片分类,目标检测算法结果要求不仅识别出图片中的物理类别并且输出物体的位置参数。
物体的位置通过bounding box表示。bounding box指的是能够框出物体的矩形框在图片中的对应参数,如下图所示。
图中红色框,就称为一个bounding box,bounding box由个参数来描述[bx,by,bh,bw][b_x, b_y, b_h, b_w][b
x​,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]^T
y^​=[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。详细的实现原理参考博客
<https://blog.csdn.net/u011534057/article/details/51218250>

RCNN结构主要步骤:

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

* 候选区域生成
使用Selective Search生成图像的候选区域。
大体原理:
是一种图像分格的手段,通过合并相似颜色或文理且相邻的区域,实现图像分割,将最后的区域去重输出。Selective Search源码地址
<http://koen.me/research/selectivesearch/>。
* 特征提取
使用训练好的神经网络提取regions特征。
RCNN训练特征主要经过2个阶段:
* Pre-train:
使用ILVCR 2012数据集及简化版的Hinton 2012年在Image
Net上的分类网络来进行预训练。(全连接层提取特征4096维,再使用全连接(4096->1000)实现1000类分类)。
* 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网络的缺点

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

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

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


* 提出ROI pooling
layer,采用单层金字塔结构,其实就是在特征层只使用一个金字塔max-pooling,进一步简化了regions对应特征层的映射关系。
* 提出梯度传递方法,实现整个网络网络结构的全部训练。
* 在两层全连接中加入SVD降维,加快训练速度。
* 输出使用两个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​)∗conf
idence
以上YOLO部分参考
<https://blog.csdn.net/u011534057/article/details/51244354?utm_source=copy>

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信