目标检测算法

算法对比:

(1)Yolo的缺陷:

  • 每个网格智能预测一个物体,容易漏检;
  • 对于物体的尺度比较敏感,面对物体尺度变化比较大的物体时泛化能力较差。

(2)two-stage方法和one-stage方法对比:

  • two-stage方法如R-CNN系列算法,主要思想是先通过启发式方法或者CNN网络(RPN),产生一系列稀疏的候选框,然后对这些候选框进行分类和回归,其优势是准确度高。
  • one-stage方法如Yolo和SSD算法,主要思想是在多层特征图上进行密集抽样,抽样时采用不同的尺度和长宽比,然后利用CNN 进行分类和回归,整个过程只需要一步,其优势是速度快,但均匀的密集采样的一个重要缺点是训练比较困难,正负样本极不平衡导致模型准确率低。

SSD算法的步骤:

  • 输入一张300300(或者512512)的图片,将其输入到经与训练好的分类网络中获得不同大小的特征映射;
  • 抽取6层feature map,然后在feature map层上面的每一个点构造不同尺度大小的Default box(8732个Default box),然后分别进行检测和分类,生成多个初步符合条件的Default boxes;
  • 将不同的feature map获得的Default boxes结合起来,经过NMS(非极大值抑制)来过滤掉一部分重叠或者不正确的Default boxes,生成最终的检测结果。

SSD的三大核心设计理念

  • 采用多尺度特征图用于检测:
    比较大的特征图来用来检测相对较小的目标,而小的特征图负责检测大目标。采用多尺度特征用于检测可以提高识别的准确度
  • 设置Default boxes:
    Default boxes其实就是在某一feature map上每一点处选取的不同长宽比的选框。与YOLO不同的是,YOLO在每个位置只选取正方形选框,但是真实目标的形状是多变的,Yolo需要在训练过程中自适应目标的形状。
    对于先验框的尺度,其遵守一个线性递增规则:随着特征图大小降低,先验框尺度线性增加。
  • 利用卷积进行检测:
    与 Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。
    对网络中 6 个特定的卷积层(Conv4_3,Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2)的输出分别用两个 3*3 的卷积核进行卷积,一个输出分类用的confidence,每个default box生成21个confidence(这是针对VOC数据集包含20 个 object 类别而言的,另外一个是背景的分类);一个输出回归用的 localization,每个 default box生成4个坐标值(x,y,w,h)。

Default box的匹配

在训练过程中,首先要确定训练图片中的Ground Truth与哪个先验框进行匹配,与之匹配的先验框所对应的边界框将负责预测它,SSD的先验框与Ground Truth的匹配原则主要有两点:
  • 首先寻找与每一个ground truth有最大IOU的default box,这样能保证每一个Ground Truth能与至少一个default box对应起来。
  • SSD之后将剩余的还没配对的default box与任意一个GT尝试配对,只要两者的IOU大于阈值就进行匹配。

通常,称与GT匹配的default box为正样本,反之,若一个default box没有与任意一个GT匹配,那么该default box只能与负样本匹配,称为负样本。

尽管一个GT可以与多个default box匹配,但GT相对default box还是太少了,故负样本相对正样本会很多。为了保证正负样本平衡,对负样本进行抽样,抽样时按照置信度误差进行降序排列,选取误差较大的top-k作为训练负样本,以保证正负样本比例接近1:3.

损失函数

损失函数定义为位置误差与置信度误差的加权和,其中位置误差仅针对正样本进行,置信度误差包括正样本的误差和负样本的误差。

NMS(非极大值抑制)

首先从所有的检测框中找到置信度最大的那个框,然后挨个计算其与剩余框的IOU,如果其值大于一定阈值(重合度过高),那么就将该框剔除;然后对剩余的检测框重复上述过程,直到处理完所有的检测框。

SSD加速的原因分析

  • 首先SSD是一个one-stage网络,只需要一个阶段就可以输出结果,Faster R-CNN是一个two-stage网络;尽管Faster R-CNN中的bounding boxes少很多,但其需要大量的前向和反向推理,而且需要交替训练两个网络。
  • Yolo网络看起来比SSD网络简单,但是Yolo网络中含有大量的全连接层,和FC相比,卷积层具有更少的参数;同时,Yolo获取候选框bounding boxes的操作比较费时,SSD算法中调整了VGG网络的架构,将两层FC换成了CONV层。
  • SSD算法设置了输入图片的大小,将不同大小的图片裁剪成300*300或512*512,和Faster R-CNN相比,在图片的输入上少了很多的计算。

SSD算法的优缺点比较

  • 需要人工设置default box的初始尺寸和长宽比,网络总default box的基础大小和形状不能直接通过学习获得,只能手工设置。而网络中每一层feature使用的default box大小和形状都不一样,导致调试过程非常依赖经验。
  • 对小尺寸目标的识别任然比较差,达不到Faster R-CNN 的水平,使用SSD使用conv4_3层的低级feature去检测小目标,而低级特征卷积层数较少,存在特征提取不充分发的问题。

Yolo算法

Yolo算法将目标检测问题视为回归问题,所采用的是均方差损失函数,并对不同的部分采用了不同的权重值。

Yolo V1 算法特点:

  • 同时预测多个Box位置和类别
  • 端到端的目标检测和识别
  • 速度更快
  • 实现回归功能的CNN不需要复杂的计算过程(SSD anchor)
  • 直接选用整图训练模型,更好地区分目标和背景区域

Yolo V1 算法原理:

  • 图像被分成S*S个格子
  • 包含GT物体中心的格子负责检测相应的物体
  • 每个格子预测B(B通常为2)个检测框及其置信度(x,y,w,h,c)c为置信度,以及C个类别概率;每个格子预测出向量的长度为:5B+c
    每个图预测出向量的长度为:S*S
    (5*B+c)
  • bbox信息(x,y,w,h)为物体的中心位置相对格子位置的偏移及宽度和高度,均被归一化
  • 置信度反映是否包含物体及包含物体情况下位置的准确性,定义为

P r ( o b j e c t ) × I O U p r e d t r u t h 其 中 , P r ( o b j e c t ) ∈ { 0 , 1 } Pr(object) \times IOU_{pred}^{truth} 其中,Pr(object) \in \{0,1\} Pr(object)×IOUpredtruthPr(object){0,1}

  • 网络使用小卷积,即1x1 和3x3
  • FC 输出为:SxSx(Bx5+C)
  • 网络比VGG16快,准确率稍差
  • Loss函数:均方和误差
  • 坐标误差、IOU误差和分类误差
  • 权重考量

l o s s = ∑ i = 0 s 2 c o o r E r r + i o u E r r + c l s E r r = λ c o o r d ∑ i = 0 s 2 ∑ j = 0 B . . . loss = \sum _{i=0}^{s^2}coorErr + iouErr + clsErr \\= \lambda _coord \sum_{i=0}^{s^2}\sum_{j=0}^{B}... loss=i=0s2coorErr+iouErr+clsErr=λcoordi=0s2j=0B...

  • 预训练
  • 使用预训练参数(20个con)来初始化YOLO,并训练VOC20
  • 将输入图像分辨率从224x224Resize到448x448 (卷积层堆feature map的大小不敏感,仅关注卷积核的大小)
  • 训练时B个Bbox的GT设置相同

Yolo V1 网络存在的问题

  • 输入尺寸固定(yolo为一个卷积网络,没有多尺度提取feature map)
  • 小目标检测效果差
  • 同一个格子包含多个目标时,仅预测一个(IOU最高),必然有漏检目标

Yolo V2/Yolo9000 算法原理

  • 引入anchor box思想
  • 输出层:卷积层替代YOLO V1的全连接层
  • 联合使用coco和imagenet物体分类标注数据
  • 识别种类、精度、速度和定位准确性等都有较大提升

Yolo V2 改进之处:

  • Batch Normalization:

v1中也使用了大量的BN,同时在定位层dropout;

v2中取消了dropout,均使用BN

  • 高分辨率分类器:

v1中使用224x224预训练,448x448用于检测网络;

v2以448x448的分辨率微调最初的分类网络

  • Anchor Boxes:

预测bbox的偏移,使用卷积代替FC;

输入尺度:416 (448*448 经过32倍的下采样,)中心的cell预测处于中心的物体

Max pooling下采样

预测超过1000个

mAP降低,recall显著提高

  • 细粒度特征

添加pass through layer,把浅层特征图(26*26)连接到深层特征图

Resnet中的identity mapping

  • Multi-Scale Training 多尺度训练

每隔几次迭代后就会微调网络的输入尺寸

  • Darknet-19

主要使用3x3卷积

pooling之后channel数

global average pooling

1x1卷积

  • 每个box包含4个坐标值,1个置信度和classes个条件类别概率

Yolo9000

Yolo9000是在yolo v2的基础上提出的一种可以检测超过9000个类别的模型,主要贡献在于提出了一种分类和检测的联合训练策略

wordTree 融合分类和检测两个任务

Yolo V3 算法原理

Yolo v3改进策略

  • 更好的主干网络(类ResNet)
  • 多尺度预测(类FPN)

聚类来得到Bbox的先验,选择9个簇以及3个尺度

将9个簇均匀分布在这三个尺度上

  • 更好的分类器:binary cross-entropy loss

softmax 不适用于多标签分类

softmax 可被独立的多个logistic分类器替代,且准确率不会下降

Darknet框架:

  • 由C语言和CUDA实现,一个较为轻型的开源深度学习框架,适合用来做底层研究,可以更为方便地从底层对其进行改进和扩展
  • GPU显存利用率较高
  • 第三方库依赖较少
  • 容易移植到其他平台,windows和嵌入式设备
  • http://pjreddie.com/darknet
  • 可以使用OpenCV ,用来显示图片,更好地进行可视化
  • darknet的实现与caffee的实现存在相似的地方,搭建网络结构通过配置文件来完成
  • 网络配置文件:.weights
  • 权值文件:.weights

Yolo系列网络优缺点:

优点:

  • 快速,pipline简单
  • 背景误检率低
  • 通用性强

相比RCNN系列物体检测方法,Yolo具有以下缺点:

  • 物体是被位置精度性差
  • 召回率低

物体检测业务场景综述:

算法性能的评价:

  • TP:标注框重叠率很高
  • FP:重叠率低和重复检测的框
  • precision和recall
  • AP 和mAP

技术难点:

  • 物体种类多
  • 物体变化丰富
  • 场景变化丰富
  • 尺度、光照、遮挡…
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值