人工智能-目标识别:古典目标识别、R-CNN、SPP-NET、Fast-R-CNN、Faster-R-CNN、YOLO

古典目标识别

  • 第一部分:训练集构造
    负样本:使用 select search(ss) 方法对区域进行融合—>计算每个候选区域域真实标记区域 GRadeonTruts(GT) 之间的重合,如果区域A与GT的重合度在20%-50%之间,而且A与其他的任何一个已生成的负样本之间的重合度不大于70%,则A被采纳为负样本
    正样本:就是那些手工标记的GT区域作为正样本。

  • 第二部分:提取每个正/负样本的特征

  • 第三部分:分类器SVM训练

  • 第四部分:反馈False Positive

  • 测试过程
    首先使用SS方法得到测试图像上的候选区域—>然后提取每个区域的特征向量—>送入已经训练好的SVM进行软分类—>将这些区域按照概率值进行分类—>把概率值小于0.5的区域去除掉(nsm:非极大值抑制)—>对那些概率值大于0.5的,计算每个区域与比它分数更高的区域之间的重叠程度(IOU),如果IOU大于30%,则把这个区域也去除—>最后剩下的区域为目标区域

R-CNN

整个过程:
首先通过选择性搜索,对待检测的图片进行搜索出~2000个候选框—>把这2000个候选框的图片都缩放到227*227,然后分别输入CNN中,每个 proposal 提取出一个特征向量,即利用 CNN 对每个 proposal 进行提取特征向量—>把上面每个候选框的对应特征向量输入 SVM 算法进行分类识别
下图

  • 缺点:
    从慢的角度
    1:Selective Search 速度慢,一张图片需要10秒以上才能提取~2k个候选框
    2.Concolution Layer没有共享,每一个候选框是单独分别带到 ConvNet 去提取特征的
    从追确率的角度
    3:因为SS给的候选框做了 resize 变形,是的候选框里面的 object 的物理意义就有可能发生变化
    从工程角度
    4:2-stage,因为特征工程的特征提取后存了磁盘,是的 SVM 和 Regressor 后面的 Loss 无法去调前面的 ConvNet

SPP-NET

整个过程:
首先进行特征搜索对待检测的图片进行搜索出~2000个候选框(这一步和 R-CNN 是一样的)—>特征提取阶段:把整张待检测的图片输入到 CNN 中,进行一次特征提取,得到 Feature Maps ,然后在 Feature Maps 中找到各个候选框的区域,再对各个候选框采用空间金字塔池化提取出固定长度的特征向量。而 R-CNN 输入的是每个候选框,然后在进入 CNN ,因为 SPP-NET 只需要一次对整个图片进行特征提取,速度大大提升—>最后一步也是和 R-CNN 一样,采用 SVM 算法进行特征向量分类识别

  • 优点
    1:共享了卷积网络,一次来把原图变成特征图,然后用SS找的候选框去在特征图上面映射对应的位置
    2:采用空间金字塔池化,是的每一个ROI最终可以得到固定长度的特征向量,方便后面去做全连接接SVM
    3:采用空间金字塔池化,使得一个ROI可以有不同size的降采样,相当于把空间金字塔的优点引入到网络中
  • 缺点
    1:Selective Search 慢
    2:虽然用了SPP,但是还是会有几何上面的变形
    3:2-stage

Fast-R-CNN

只是SPP-NET的一个特例,就是SPP变成了 ROI Pooling
SPP会使用各种形状来池化ROI,ROI Pooing只是固定一个形状来池化
开始使用 softmax 作为多分类的输出层,方便端到端训练和预测
缺点:
1:Selective Search 慢,同时也没法去用Loss反向传播来调整候选框的能力
2:虽然用了SPP特例,但是还是 会有几何上面的变形

Faster-R-CNN

blog.csdn.net/Lin_xiaoyi/article/details/78214874
zhuanlan.zhihu.com/p/31426458
整个过程:

  1. Conv layers 作为一种 cnn 网路目标检测的方法, faster-r-cnn 首先使用一组基础的 conv + relu +pooling 层提取 image 的 featuremap。该 featuremap 被共享用于以后的 RPN 层和全连接层
  2. Region Proposal Networks. RPN 层是 faster-r-cnn 的最大亮点,RPN 网路用于生成 region proposcals。该层通过 softmax 判断 anchors 属于 foreground 还是 background,再利用 box regression 修正 anchors 获得精确的 propocals
  3. Roi Pooling.该层收集 feature map 和 propocals,综合上述信息提取 proposcal feature map ,送入后续的全连接层判定目标类型
  4. Classification。利用 proposcal feature map 计算 proposcal 类别,同时再次 bounding box regression 获得检测框的最终精确位置
详解
1.Conv Layer

在 input data 层时,作者把原图都 reshape 成 MN 大小的图片
conv layer 层包括 conv relu pooling 三层,就 VGG 而言,就要13个 conv 层,13个 relu 层,4个 pooling 层。在 conv layer中:
1.所有的 conv 的 kernel_size = 3,padding = 1
2.所有的 pooling 层都是 kernel_size = 2,stride = 2
在这里插入图片描述
conv pooling 中的 pooling 层 kernel_size = 2,stride = 2,这样使得经过 pooling 的 M
N 的图像大小就会变为 (M/2N/2),conv 和 relu 不会改变输入输出大小。4个 pooling 层,图片的大小就会变成 (M/16N/16)

2.Region Proposcal Networks(RPN)

经典的检测方法生成候选框都非常耗时,opencv ababoost 使用滑动窗口+图像金字塔生成检测框,rcnn 使用 ss 生成检测框。而 faster-r-cnn 直接使用 RPN 生成检测框,这是 faster-r-cnn 的巨大优势之一,能极大提升检测框的生成速度
RPN网络的结构图
从图中可以看到 feature map 经过 3*3 的 conv 后分为两条线,上面一条线通过 softmax 对 anchors 分类获得 foreground 还是 background (检测目标是foreground),因为是2分类,检测维度是 2K scores。下面那条线用于计算 anchors 的 bounding box regression 的偏移量,以便获得精确的 proposcal ,监测维度是 4K coordinates。

原理:
他的前13层用了 VGG16 提取特征,如下图
VGG16
主要算法实现是后面几层
在这里插入图片描述
在这里插入图片描述
test 网络
在这里插入图片描述

优点:
1:使用 RPN 网络代替 SS ,提高 inference 的速度
训练的 RPN 候选框的筛选
如果特征图的 h*w=2400,那么就要2W个bbox—>越过原图边界的去掉—>NMS抑制掉概率小的—>
和 DT 比较,计算 IOU ,—>正负例样本,正例128,负例128,正例不够负例补

NMS(非极大值抑制)

面试题
  1. faster rcnn家族史
    r-cnn:用selective search选择候选框(约为2k个),然后缩放到统一大小,之后分别输入CNN得到特征,将输出特征再经过bbox和SVM进行分类和回归。多阶段检测。
    缺点:模型复杂,多阶段检测,卷积未共享,速度慢。svm和回归在神经网络外,cnn提取出的特征需要大量空间存储。
    selective search :首先通过简单的区域划分算法,将图片划分成很多小区域,再通过相似度和区域大小(小的区域先聚合,这样是防止大的区域不断的聚合小区域,导致层次关系不完全)不断的聚合相邻小区域,类似于聚类的思路。
    SPP-Net 空间金字塔池化
    在r-cnn中为了得到的输出特征大小一致,需要对输入的框进行缩放,这样导致图像变形,由此提出SPP-Net.
    首先对图片做一次卷积,得到特征图,将不同尺寸的候选框映射到特征图上,然后输入pooling层,通过三个尺度(44,22,1*1)的池化层分别池化,再连接起来最终得到相同长度的特征向量,再送到FC层进行分类。
    优化1:引入roi pooling层,可以输入不同尺寸的候选框
    优化2:只对图片做一次卷积,而r-cnn中对每个候选框都分别卷积,大大提升速度。
    Fast r-cnn
    将SPP-Net应用到r-cnn中,添加roi pooling层,同时将整张图送入cnn中。另外,把r-cnn中的分类回归任务放到神经网络中,使用softmax和bbox进行分类和回归。省去了特征图的存储消耗。
    但selective search仍然消耗了大量的时间选择候选区域,且没在神经网络中,只能用cpu,不能用gpu加速。
    faster r-cnn
    使用RPN网络代替selective search,把所有操作都放入神经网络中,真正实现了端到端训练。同时共享卷积。

  2. RPN网络是什么
    是一个全卷积网络,因此任意尺寸图像都能输进来。
    (1)将feature map输入rpn网络后,首先经过一个3*3的卷积,融合周边特征,增强鲁棒性,得到特征图。
    (2)特征图上的每个点都代表原始图像上的一个区域,对每个点产生9个anchor boxes(3种比例和3种大小)映射到原图上。
    (3)标记正负样本。首先去除掉超过边界的anchor。然后计算anchor boxes和ground truth的IoU,对于每个gt,和其重叠最高的设为正样本(IoU最大),IoU>0.7的anchor作为正样本,IoU<0.3的anchor作为负样本。其余样本不参与训练。
    (4)然后逐像素通过1 * 1的卷积核(代替全连接层)进行分类和回归。分类的卷积核个数为9 * 2个,回归的卷积核个数为9 * 4个。
    (5)对预测框进行边界剔除和nms非极大值抑制,生成最终的候选框,region proposal,大约为2000个。然后再取前n个概率高的boxes,进入下一步。
    (6)rpn在训练时,mini-batch中每个图像选256个proposal,正负1:1.

  3. 1 * 1卷积核的作用
    作为全连接层使用。相当于把特征图在每个通道上的信息进行融合,且保留了特征图原有的平面结构,同时调整了深度(通道数),可以升降维。
    1 * 1卷积核相比于全连接层的好处:不改变特征的平面结构,输入形状可以任意。

  4. rpn的loss
    分类的loss为交叉熵cross_entroy,回归的loss为smooth L1 loss.
    Smooth L1完美地避开了 L1 和 L2 损失的缺陷,在 损失 较小时,对 其梯度也会变小,使得能够更好的进行收敛; 而在损失很大时,对 x 的梯度的绝对值达到上限1,不会因预测值的梯度十分大导致训练不稳定。L2对离群点,异常值更敏感,容易发生梯度爆炸。

  5. NMS非极大值抑制
    (1)将候选框按分类概率排序,保留概率最高的框A。
    (2)然后按顺序判断其他的每个框跟A的IoU,如果超过某个设定的阈值,则认为重叠率过高,该框没用,将其删除。
    (3)从未被删除的框中选出概率最高的框B,重复步骤(2)。
    (4)重复(3),直到没有可删除的框。则全部框都筛选完成。

  6. ROI Pooling
    输入为region proposals 和 特征提取的 feature map。将region proposal 映射到feature map上,然后对每个region proposal分成7 * 7的方格,做max pooling,从而输出为大小相等的7*7的proposal feature maps。roi pooling的作用是不固定输入的尺寸,输出相同尺寸,从而能够进入全连接层。

  7. ROI Align
    解决ROI Pooling中的两次量化,第一次是将原图的候选框映射到特征图上时,会除以32,得到一个浮点数,此时会进行取整操作。第二次是在pooling时,将特征图映射为7*7的大小,此时也是除不尽的,要进行取整操作。就会对边框位置产生影响。
    ROI Align通过对浮点数的位置进行双线性插值,得到这个点的值。对于pooling中的每个格子,取固定的4个点进行双线性插值,然后取max,作为这个格子的输出。

  8. 遇到的问题
    遥感图像是从卫星上拍摄的,非常大,相应图像上的目标就很小。如何来对小目标进行检测。首先是把遥感图像切割成小一些的图像,使得目标相对于图像来说大一些,然后统计目标的实际尺寸,对anchor的尺寸进行更改,使得模型更适用于我的数据集。然后由于我是要通过模型来统计船只的数量,所以在测试时就要对输入的测试数据进行批量的计数。

YOLO(YOU ONLY LOOK ONCE)

zhuanlan.zhihu.com/p/31427164

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GeekPlusA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值