赞
踩
第一部分:训练集构造
负样本:使用 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%,则把这个区域也去除—>最后剩下的区域为目标区域
整个过程:
首先通过选择性搜索,对待检测的图片进行搜索出~2000个候选框—>把这2000个候选框的图片都缩放到227*227,然后分别输入CNN中,每个 proposal 提取出一个特征向量,即利用 CNN 对每个 proposal 进行提取特征向量—>把上面每个候选框的对应特征向量输入 SVM 算法进行分类识别
下图
整个过程:
首先进行特征搜索对待检测的图片进行搜索出~2000个候选框(这一步和 R-CNN 是一样的)—>特征提取阶段:把整张待检测的图片输入到 CNN 中,进行一次特征提取,得到 Feature Maps ,然后在 Feature Maps 中找到各个候选框的区域,再对各个候选框采用空间金字塔池化
提取出固定长度的特征向量。而 R-CNN 输入的是每个候选框,然后在进入 CNN ,因为 SPP-NET 只需要一次对整个图片进行特征提取,速度大大提升—>最后一步也是和 R-CNN 一样,采用 SVM 算法进行特征向量分类识别
只是SPP-NET的一个特例,就是SPP变成了 ROI Pooling
SPP会使用各种形状来池化ROI,ROI Pooing只是固定一个形状来池化
开始使用 softmax 作为多分类的输出层,方便端到端训练和预测
缺点:
1:Selective Search 慢,同时也没法去用Loss反向传播来调整候选框的能力
2:虽然用了SPP特例,但是还是 会有几何上面的变形
blog.csdn.net/Lin_xiaoyi/article/details/78214874
zhuanlan.zhihu.com/p/31426458
整个过程:
在 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 的 MN 的图像大小就会变为 (M/2N/2),conv 和 relu 不会改变输入输出大小。4个 pooling 层,图片的大小就会变成 (M/16N/16)
经典的检测方法生成候选框都非常耗时,opencv ababoost 使用滑动窗口+图像金字塔生成检测框,rcnn 使用 ss 生成检测框。而 faster-r-cnn 直接使用 RPN 生成检测框,这是 faster-r-cnn 的巨大优势之一,能极大提升检测框的生成速度
从图中可以看到 feature map 经过 3*3 的 conv 后分为两条线,上面一条线通过 softmax 对 anchors 分类获得 foreground 还是 background (检测目标是foreground),因为是2分类,检测维度是 2K scores。下面那条线用于计算 anchors 的 bounding box regression 的偏移量,以便获得精确的 proposcal ,监测维度是 4K coordinates。
原理:
他的前13层用了 VGG16 提取特征,如下图
主要算法实现是后面几层
test 网络
优点:
1:使用 RPN 网络代替 SS ,提高 inference 的速度
训练的 RPN 候选框的筛选
如果特征图的 h*w=2400,那么就要2W个bbox—>越过原图边界的去掉—>NMS抑制掉概率小的—>
和 DT 比较,计算 IOU ,—>正负例样本,正例128,负例128,正例不够负例补
NMS(非极大值抑制)
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,把所有操作都放入神经网络中,真正实现了端到端训练。同时共享卷积。
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.
1 * 1卷积核的作用
作为全连接层使用。相当于把特征图在每个通道上的信息进行融合,且保留了特征图原有的平面结构,同时调整了深度(通道数),可以升降维。
1 * 1卷积核相比于全连接层的好处:不改变特征的平面结构,输入形状可以任意。
rpn的loss
分类的loss为交叉熵cross_entroy,回归的loss为smooth L1 loss.
Smooth L1完美地避开了 L1 和 L2 损失的缺陷,在 损失 较小时,对 其梯度也会变小,使得能够更好的进行收敛; 而在损失很大时,对 x 的梯度的绝对值达到上限1,不会因预测值的梯度十分大导致训练不稳定。L2对离群点,异常值更敏感,容易发生梯度爆炸。
NMS非极大值抑制
(1)将候选框按分类概率排序,保留概率最高的框A。
(2)然后按顺序判断其他的每个框跟A的IoU,如果超过某个设定的阈值,则认为重叠率过高,该框没用,将其删除。
(3)从未被删除的框中选出概率最高的框B,重复步骤(2)。
(4)重复(3),直到没有可删除的框。则全部框都筛选完成。
ROI Pooling
输入为region proposals 和 特征提取的 feature map。将region proposal 映射到feature map上,然后对每个region proposal分成7 * 7的方格,做max pooling,从而输出为大小相等的7*7的proposal feature maps。roi pooling的作用是不固定输入的尺寸,输出相同尺寸,从而能够进入全连接层。
ROI Align
解决ROI Pooling中的两次量化,第一次是将原图的候选框映射到特征图上时,会除以32,得到一个浮点数,此时会进行取整操作。第二次是在pooling时,将特征图映射为7*7的大小,此时也是除不尽的,要进行取整操作。就会对边框位置产生影响。
ROI Align通过对浮点数的位置进行双线性插值,得到这个点的值。对于pooling中的每个格子,取固定的4个点进行双线性插值,然后取max,作为这个格子的输出。
遇到的问题
遥感图像是从卫星上拍摄的,非常大,相应图像上的目标就很小。如何来对小目标进行检测。首先是把遥感图像切割成小一些的图像,使得目标相对于图像来说大一些,然后统计目标的实际尺寸,对anchor的尺寸进行更改,使得模型更适用于我的数据集。然后由于我是要通过模型来统计船只的数量,所以在测试时就要对输入的测试数据进行批量的计数。
zhuanlan.zhihu.com/p/31427164
未完待续
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。