目标检测基础

01-FasterRCNN-01-目标检测基础

目标检测:输出目标位置、类别及置信度。

目标检测属于多任务--一个是目标分类,另一个是目标位置的确定(即分类与回归)。

双阶段:1-用于提取候选区域;2-对候选区域进行分类和精确坐标回归

单阶段:只用一级网络完成分类和回归

单阶段网络的准确度为何不如双阶段网络,训练中的不均衡:

  • 负例过多,正例过少
  • 大多数负例十分容易区分,如果训练数据存在大量这样的样本,导致网络难以收敛。

双阶段网络如何解决训练中的不均衡:

在RPN网络中,根据前景置信度的高低选择最有可能的候选区域,从而避免大量容易区分的负例;

训练过程中根据交并比进行采样,将正负样本按照比例1:3,放置过多负例出现。

01-FasterTCNN-02-研究背景&成果&意义

输入图像--候选区域提取(2k)--计算卷机特征(包含缩放)--候选区域分类

RCNN基本算法流程:

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

RCNN存在问题:

尺寸归一化导致物体变形,纵横比特征的丢失

重复使用网络计算特征,低实时性

提出SPP net--创新点:

  • 提出金字塔池化操作,可适用任何大小的输入图像
  • 计算整幅图像的特征图,根据相对位置进行截取

SPP-net与RCNN的缺陷

  • 训练过程慢,先训练卷积网络(预训练、调优训练)、训练SVM分类器、训练回归器
  • 需要较大的内存空间。训练SVM分类器时,需要将多位特征存储在硬盘上
  • RCNN检测慢,需要对每一个候选区域计算特征,SPP-net不能同时调整SPP-layer前后层的权重(预训练调整卷积层权重,调优训练调整全连接权重)

提出Fast RCNN中:

  • 提出ROI pooling layer,可在训练过程中同时调整其前后层的权重
  • 在网络中,同时完成回归与分类的任务

ROI pooling--将图像中的ROI区域定位到卷积特征中的对应位置

Faster-RCNN

摘要核心

  • 候选区域提取是已有检测方法实时性低的主要瓶颈
  • 提出了候选区域网络,通过共享特征,提取候选区域,极大的提高运算效率,可进行端到端的训练
  • Fast RCNN和VGG通过迭代优化可以实现特征共享

01FasterRCNN-03-论文网络结构&训练方法讲解

输入图像的限制(600*1000)

经过4次maxpooling,特征图尺度变为输入的1/16

anchors--在特征图的每个点上人为的放置不同的框

RPN--自动选出有目标物体的框,输出两类(前景和背景),对anchors进行区分(筛选副样本)

ROIP--提取固定长度的特征(准确得知物体类别)

R-CNN--获得更加准确的类别和boudning box类别

Faster RCNN网络架构(以VGG网络为例):

  1. 首先缩放至固定大小MxN
  2. 放入共享Conv layers
  3. RPN计算proposals
  4. Roi Pooling层则利用proposals从feature maps中提取proposal features
  5. 送入后续全连接和softmax网络做classfication

存在两块主干网络--RPN和RCNN,所以一开始的卷积网络得到的特征是共享使用的。

RPN中包含分类和回归,涉及到输入的anchors、predicted anchors和ground truth anchors。

Proposal Layer:负责综合变换量和positive anchors,计算出准确的proposal。

​ 3个输入:anchors分类结果,对应bbox的变化量和缩放信息

​ 缩放信息:经过4次pooling后,则缩放信息为16

01FasterRCNN-04-实验结果及论文分析总结

启发点:

  • Anchor定义是否存在不同数据集及不同场景下是否应该有所变化
  • 是否有必要在整幅图中均匀分布Anchor
  • Anchor定义的多尺度是否能够满足实际物体尺度变化要求
  • 一次训练的方式

02YOLO-01-发展历史和YOLO v1

YOLO的原理

  • 一次性输出所检测到的目标信息,包含类别和位置
  • 只要求这个物体的中心在某个gird之内(不要求一开始设计很多anchors)
  • 每个grid都预测出B个bounding boxs,这个bounding boxs有5个量,分别是:位置(x,y)和它的高(h)和宽(w),以及这次预测的置信度。
  • 每个框还要负责预测这个框中的物体的类别。

Bounding Boxs的细节

  1. 如果输出的位置坐标是一个任意的正实数,模型很可能在大小不同的物体上泛化能力有很大的差异
  2. 让真实的x除以grid的宽度,让真实的y除以grid的高度就可以了(归一化)
  3. w除以整张图片的宽度,h除以整张图片的高度

02YOLO-02-YOLO v2

一些创新点

  1. Batch Normalization--检测系列的网络结构中,BN逐渐成为了标配。
  2. V2中,神经网络不再对预测矩形框的宽高的绝对值进行预测,而是预测与anchor框的偏差;在训练时,最接近ground truth的框产生loss,其余框不产生loss;v2中移除了v1最后的两层全连接层,全连接层计算量大,耗时长。
  3. 宽高由聚类产生--anchor box的宽高不再是通过人为设定。而是将训练集中的ground box的长宽值全部拿来进行聚类
  4. 细粒度特征--添加了passthrough层

多尺度训练

  • 只有卷积层和池化层,对网络的输入大小,并没有限制,整个网络降采样倍数为32,只要输入的特征图尺寸为32的的倍数即可。

02YOLO-v3-YOLOv3

网络结果解析

  • 只有卷积层:通过调节卷积步长控制输出特征图的尺寸。对于输入图片尺寸没有特别限制。
  • 金字塔特征图:小尺寸特征图用于检测大尺寸物体,而大尺寸特征图检测小尺寸物体。
  • 借鉴ResNet:将输入的特征图,与输出的特征图对应维度进行相加。
  • 借鉴DeseNet:将特征图按照通道维度直接进行拼接。

先验框--沿用v2的技巧,使用k-means进行聚类。

置信度在输出85维中占固定一位,由sigmoid函数计算解码得到,解码区间在【0,1】之中。

三个特征图一共解码出8x8x3 + 16x16x3 + 32x32x3 = 4032个box以及相应的类别、置信度。这4032个box,在训练和推理时,使用方法不同:

训练时4032个box全部送入打标签函数,进行后一步的标签和损失函数的计算。

推理时,选取一个置信度阈值,过滤掉低阈值box,再经过nms,就可以输出整个网络的预测结果了。

YOLO v4

  1. 没有算法层面的创新
  2. 主要是训练技巧的更新
  3. YOLO v5还没有paper

03SSD-01-发展历史和论文泛读

SSD--基于vgg进行的改编。

学习目标

  1. 了解SSD中最重要的多尺度特征图概念
  2. 掌握SSD的网络结果、了解实验效果及优越性
  3. 熟悉SSd的实现代码,各代码模块功能。

创新点:

  • 单个深度神经网络的目标检测方法
  • 可以在不同分辨率的特征图上进行预测
  • SSD比那些需要object proposals的方法简单,完全去除了proposal生成和随后的特征再筛选的过程

03SSD-02-网络结果和具体算法

设计理念

  1. 采用多尺度特征图--大特征图来检测小目标,小特征图检测大目标
  2. 采用卷积进行检测(取消FC层)
  3. 设置先验框--是人为设置,对于不同场景,可能需要调整超参数。因此,yolo系列在实际场景中使用更多,yolo使用聚类。

先验框匹配

1.第一原则:对于图片中每一个ground truth,找到与其IOU最大的先验框。

2.第二原则:对于剩余的未匹配先验框,若某个ground truth的IOU高于某个阈值(一般是0.5),那么改先验框也与这个ground truth进行匹配。

正样本--通常称与grounding truth匹配的先验框。

副样本--若一个先验框没有与任何ground truth进行匹配,只能与背景进行匹配。

Hard Negatve Mining

  • 为了保证正负样本尽量平衡,SSD采用Hard Negatve Mining,就是对负样本进行抽样,抽样时按照置信度误差(预测背景的置信度越小,误差越大)进行降序排列,选取误差的较大的top-k作为训练的负样本,以保证正负样本比例接近1:3。
原文地址:https://www.cnblogs.com/zjz-819823900/p/14364338.html