深度学习图像处理(3)----二阶段目标检测

文章目录

前言

1.深度学习

随着深度学习模型效果的优化,基于深度学习的目标检测算法盖过了传统计算机视觉中的目标检测算(DPM),从而导致很多之前研究传统目标检测算法的人员转向深度学习,并且现在工业界中应用最多的目标检测方式以深度学习为主。其中R-CNN是奠定深度学习方向发展目标检测的的基础算法,是第一个真正可以工业级应用的目标检测解决方案,是结合区域提名(Region Proposal)和卷积神经网络(CNN)的一种目标检测算法。

2.two-stage 和one-stage 检测算法

目前主流的目标检测算法主要是基于深度学习模型,主要可以分为两大类:two-stage 检测算法和one-stage 检测算法。

• two-stage检测算法将检测问题划分为两个阶段,首先产生候选区域(region proposals), 然后对候选区域进行分类(一般需要进行位置精修),这类算法实现主要有:OverFeat(AlexNet),R-CNN、SPPNET、Fast R-CNN、Faster R-CNN,Mask R-CNN家族。他们识别错误率低,漏识别率也较低,但速度较慢,不能满足实时检测场景。

• one-stage检测算法是一种端到端的检测算法,直接进行区域定位与分类,这类算法实现主要有:SSD、YOLO、FPN等。

一.候选框的提取

1. 暴力遍历

提取候选框后进行特征提取,冗余数据太多,导致计算速度慢,实际应用中是不太可行的

2.在穷举暴力法的基础上,进行一些剪枝操作:

只选用固定大小和长宽比的窗口获取候选框

特定应用场景中有效,对于普通的目标检测而言,计算复杂度较高

二.选择性搜索(SS Selective Search)

1.去掉冗余的候选区域

核心在于如何去掉冗余的候选区域

2.自底向上合并

利用冗余候选区域大多是发生重叠 的这个特性,进行自底向上合并相邻的相似区域,从而减少冗余

3.合并方法

只计算每个区域和她相邻区域的相似度

取一个和它自己(ri)相似度最大的那个区域(rj),并合并成新的区域 rt

去掉集合中ri 和r* ,rj和r的相似度
计算新区域rt和r
的相似度,并重复前两部合并

4. 计算相似度的几种方式

区域合并采用了多样性的策略,如果仅仅考虑单一策略,容易导致合并不相似的区域,比如仅考虑纹理的时候,不同颜色的区域很可能会误合并,所以在选择性搜索中采用三种多样性策略来增加候选区域的可能性

多种颜色空间,考虑RGB,灰度,HSV

颜色相似度(归一化--25biin)

纹理相似度(8个方向10个bin直方图,每个方向3个颜色,3X8X10=240bin)

通过更改阈值初始化原始区域,阈值越大,分割区域的块越少

优先合并小的区域【如果只基于颜色和纹理合并,会导致合并后区域不断吞并周围区域,所以要给小区域大的权重】

如果区域ri包含在rj内,那么应该被合并;如果ri和rj是很难相接的,那么就不应该合并到一起,所以可以通过定义区域之间的距离来衡量两个区域是否应该进行合并,其主要指标采用合并后区域的Bounding Box(最小矩形面积)越小,表示相似度越高

合并四种相似度 颜色相似度,纹理相似度,区域大小相似度,距离相似度(填充)乘以权重

• 常见获取候选框的方式有:EdgeBoxes、Selective Search等。

三.评价公式

1.定位精度评价公式 IOU

复制代码
  IOU 定义了两个bounding box 的重叠度 ,也就是两个bounding box 重叠区域面积占总面积比。
python 复制代码
def forward(self, pred, target):
    # pred, target格式x,y,w,h
    assert pred.shape[0] == target.shape[0]
    pred = pred.view(-1, 4)
    target = target.view(-1, 4)
    tl = torch.max((pred[:, :2] - pred[:, 2:] / 2), (target[:, :2] - target[:, 2:] / 2))
    br = torch.min((pred[:, :2] + pred[:, 2:] / 2), (target[:, :2] + target[:, 2:] / 2))
    area_p = torch.prod(pred[:, 2:], 1)
    area_g = torch.prod(target[:, 2:], 1)
    en = (tl < br).type(tl.type()).prod(dim=1)
    area_i = torch.prod(br - tl, 1) * en
    area_u = area_p + area_g - area_i
    iou = (area_i) / (area_u + 1e-16)

2.mAP(mean Average Precision)

mAP:目标检测中定义为平均精度评估指标值

AP值是衡量一个类别的检测好坏情况的,mAP就是对多个类别的检测好坏情况进行评估,简单来讲就是将所有类别的AP值进行平均取值即可。比如现在有两个类别 类别A的AP值为0.5,类别B的AP值为0.2,那么mAP=(0.5+0.2)/2=0.35

四.OverFeat

1.OverFeat关键步骤

  1. 利用滑动窗口进行不同尺度的区域提名,然后使用CNN模型对每个区 域进行分类,得到类别和置信度;
  2. 利用多尺度滑动窗口来增加检测数量,提升分类效果;
  3. 用回归模型预测每个对象的位置;
  4. 边框合并

2.OverFeat的核心思想

• 区域提名:

结合滑动窗口和规则块,即多尺度(multi-scale)的滑动窗口;

• 分类和定位:

统一用CNN来做分类和预测边框位置,模型与AlexNet类似,其中 1-5层为特征抽取层,即将图片转换为固定维度的特征向量,6-9层为分类层(分 类任务专用),不同的任务(分类、定位、检测)公用特征抽取层(1-5层),只替换6-9层;

• 累积:

因为用了滑动窗口,同一个目标对象会有多个位置,也就是多个视角; 因为用了多尺度,同一个目标对象又会有多个大小不一的块。这些不同位置和 不同大小块上的分类置信度会进行累加,从而使得判定更为准确

3.多尺度分类-全卷积

全卷积是替换全连接的一种方式,相比于全连接而言,可以针对任意输 入不同尺度的图像进行特征的提取

4.多尺度分类-offset池化

offset池化指的其实就是移动一定位置后再进行池化操作。(仅用于预测 过程中,训练过程中使用普通池化)

5.多尺度分类-预测阶段

• 在测试阶段不是使用221*221的图像输入网络,而是输入六个不同尺寸 的图像,也就是多尺度输入预测。具体输入图像大小如下所示:

6.OverFeat总结

在分类、定位任务中,共享前面的特征提取层的网络结构;

提出多尺度的窗口滑动来提取任务的效果;

使用feature map上的滑窗相比于传统的图像滑窗(对整幅图像进行密集采 样,然后处理每一个采样,最后组合结果),大大提升了执行效率;

其中多视野、多尺度的测试这个特性是其网络的核心。

五.RCNN

1.相关概念

R-CNN:(Regions with Convolutional Neural Network Features)是一种基于Region Proposal的CNN网络结构

2.NMS

【非极大值抑制(Non-Maximum Suppression,】

顾名思义就是抑制 不是极大值的元素,可以理解为局部 最大搜索。是目标检测中常用的一种 精修bounding box的方式

对于多类别的检测任务,如果对每个类别分别进行NMS,那么当 检测结果中包含两个被分到不同类别的目标且IOU较大的时候, 会导致结果合并,出现不可接受的结果。针对这个问题有两种解 决方案:

5-2-1. 在损失函数中加入NMS损失函数

5-2-2. Soft-NMS


5-2-3.RCNN步骤


5-2-4.缺陷问题

六 SPPNET

SPPNET:(Spatial Pyramid Pooling) 空间金字塔池化

【其网络主要修正的是R-CNN网络的效率问题,也就是主要更改的是R-CNN 中每个ROI区域均需要通过一个CNN 提取高阶特征的这个阶段的结构。】

1.网络结构

2.新技术

1.共享卷积 --> 在Conv5层提取所有区域的高阶特征

直接对整个输入图像卷积,然后在得到的feature map 上得到ss 的2000个候选框的高阶特征

2.空间金字塔池化层【Spatial Pyramid Pooling layer】

3.优缺点


4.相关问答

七 Fast RCNN

Fast R-CNN 的训练速度是 R-CNN 的 10 倍,推断速度是后者的 150 倍。

1.优缺点

2.新技术

2-1 ROI Pooling Layer

复制代码
 目标检测typical architecture 通常可以分为两个阶段:

(1)region proposal:给定一张输入image找出objects可能存在的所有位置。这一阶段的输出应该是一系列object可能位置的bounding box。这些通常称之为region proposals或者 regions of interest(ROI)。

(2)final classification:确定上一阶段的每个region proposal是否属于目标一类或者背景。

这个architecture存在的一些问题是:

产生大量的region proposals 会导致performance problems,很难达到实时目标检测。

在处理速度方面是suboptimal。

无法做到end-to-end training。

这就是ROI pooling提出的根本原因。

(3)

• 空间金字塔结构SPP的单层特例;

• 将ROI区域卷积高阶特征转换为HxW的结构;

• 内部使用Max Pooling。

ROI pooling example

我们有一个88大小的feature map,一个ROI,以及输出大小为2 2.

1.输入的固定大小的feature map

2.region proposal 投影之后位置(左上角,右下角坐标):(0,3),(7,8)。

3.将其划分为(22)个sections(因为输出大小为22),我们可以得到:

4.对每个section做max pooling,可以得到:

说明:在此案例中region proposals 是57大小的,在pooling之后需要得到2 2的,所以在57的特征图划分成22的时候不是等分的,行是5/2,第一行得到2,剩下的那一行是3,列是7/2,第一列得到3,剩下那一列是4。

ROI pooling总结:

ROI Pooling 就是将大小不同的feature map 池化成大小相同的feature map,利于输出到下一层网络中。

(1)用于目标检测任务;

(2)允许我们对CNN中的feature map进行reuse;

(3)可以显著加速training和testing速度;

(4)允许end-to-end的形式训练目标检测系统。

2-2 Multi-task loss(多任务损失函数)



2-3SVD(类似连续的FC层<没有激活>)

总结

八 Faster R-CNN

Faster R-CNN = Fast R-CNN + RPN

1.Faster R-CNN 网络结构


2.RPN网络

• RPN实际上是Faster R-CNN中的一个小的神经网络,通过这个网络来生成候选区域框ROI;

• 通过nxn(论文中为3x3)的卷积对通用卷积层的输出feature map来提取当前区域256维的高阶特征,然后基于这个高阶特征来分别构建两个分支,

第一个分支cls layer分类层的主要功能是判断reference boxes/anchor box是前景物体还是背景。

第二个分支reg layer回归层的主要功能是对于referenceboxes/anchor box的坐标和候选框(Region Proposal Box)之间的坐标之间的线性转换关系做一个预测(类似R-CNN的回归预测结构)。

2.1锚点

• Anchor:锚点,对于一个sliding window而言,可以产生k个原始proposal候选框,即k个reference boxs,每个reference boxs可以用一个scale、一个aspect_ratio和一个sliding window中的锚点来唯一确定。对于WH的feature map而言,总共有WH*k个reference boxs。反向映射到原始图像上,相当于是以对应锚点为中心的k个候选框,所以可以认为Anchor box是初步候选框;并且在feature map上进行sliding window的滑动,相当于让候选框出现在原始图像上的任意位置,并且通过scale和aspect_ratio的操作,让Anchor产生的候选框具有 尺度不变性的特点






• 对于RPN产生的候选框主要采用如下操作:

• 1. 移除超出边界的anchors( 在图像内的anchor box 区域宽度、高度低于最小区域大小的情况);

• 2. 选择出前景概率最大的N 个proposal( 论文中建议12000 训练/6000 预测);

• 3. 使用非极大值抑制(NMS) 对候选框进行过滤(IoU 阈值0.7); ;

• 4. 对NMS 结果再做Top M 的操作,获取概率最大的M 个proposal( 论文中建议2000 训练/300 测试

• 5. 将ROI 和Ground Truth 的IoU 区域比在[0.5,1] 的anchor 当做正样本,将IoU在 [0.1,0.5) 之间的anchor 当做负样本,Bounding box regression 仅使用正样本进行模型训练(Proposal Layer 网络中的训练。

Faster RCNN

• 数据图像大小要求:

• 单一尺度训练;

• 要求输入的图像短边至少为600像素;

• Anchor boxs还原到原始图像上后,可以包含所有区域,当600像素的情况下。

3.如果处理多尺度问题?即如何使224×224和1080×720的车辆同时在一个训练好的网络中都能正确识别?

4.R-CNN、SPP Net、Fast R-CNN、Faster R-CNN各个网络对比

八.SSD

SSD:Single Shot MultiBox Detector( 单步多框目标检测)

1.简介

2.网络结构


3.新技术

3.1.重用Faster R-CNN的Anchors机制

(Default boxes 默认框 and aspect ratios 纵横比)

3.2多尺度特征图抽样

(Multi-scale feature maps for detection)

3.3全卷积网络结构

(Convolutional predictors for detection)

3.4.空洞卷积

基础网络结构使用VGG,并且将FC6 Layer和FC7 Layer转换为卷积层,并将原来的MaxPooling5的大小从2x2-s2变化为3x3-s1,这样pooling5操作后feature map还是保持较大的尺寸,这样就会导致之后的感受野变小,也就是一个点对应到原始图形中的区域变小了。

• 为了保障感受野以及利用到原来的FC6和FC7的模型参数,使用atrous algorithm的方式来增大感受野,也就是 膨胀卷积/ 空洞卷积。


4.网络结构分析

• 在基础网络之后,使用不同层次卷积的feature map来分别提取default box,对于每个layer的feature map使用两个并行的3x3卷积分别来提取位置信息(offset box)和置信度信息;结合Default box和Ground Truth box构建损失函数。

• 对于Con4_3的数据提取的时候,会先对feature map做一个L2 norm的操作,因为层次比较靠前,防止出现数据值过大的情况。

5.训练测试样本

难负样本挖掘

数据增强

6损失函数

相关推荐
七宝大爷3 小时前
CUDA与cuDNN:深度学习加速库
人工智能·深度学习·cuda·cudnn
CoovallyAIHub3 小时前
复杂工业场景如何实现3D实例与部件一体化分割?多视角贝叶斯融合的分层图像引导框架
深度学习·算法·计算机视觉
拉姆哥的小屋3 小时前
从400维向量到160000维矩阵:基于深度学习的火焰参数预测系统全解析
开发语言·人工智能·python·深度学习·线性代数·算法·矩阵
棒棒的皮皮3 小时前
【OpenCV】Python图像处理几何变换之缩放
图像处理·python·opencv·计算机视觉
SACKings3 小时前
神经网络的层是什么?
人工智能·深度学习·神经网络
serve the people3 小时前
tensorflow 零基础吃透:TensorFlow 张量切片与数据插入(附目标检测 / NLP 实战场景)
目标检测·自然语言处理·tensorflow
德卡先生的信箱3 小时前
深度学习图像处理(2)----一阶段目标检测
图像处理·深度学习·目标检测
祝余Eleanor3 小时前
Day 41 训练和测试的规范写法
python·深度学习·机器学习
Blossom.1183 小时前
基于图神经网络+大模型的网络安全APT检测系统:从流量日志到攻击链溯源的实战落地
人工智能·分布式·深度学习·安全·web安全·开源软件·embedding