传统的目标检测
-1. 利用不同尺寸的滑动窗口框出图中的某一部分作为候选区域;
-2. 提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测常用HOG特征等;
-3. 利用分类器进行识别,比如常用的SVM模型。
基于SS的目标定位的过程:
-1. 训练过程
--1. 人工标注正例样本和负例样本
正例样本:包含物体的图像
负例样本:不包含物体的图像, 也叫做背景图像
--2. 使用标注好的数据,提取HOG、LBP等特征信息,然后使用SVM模型构建分类器模型。
-2. 预测过程
--1. 使用SS来提取可能的物体区域框
--2. 将区域框大小resize成训练的大小区域框或者使用相同的特征提取方式提取特征(HOG、LBP等)<和训练操作一样>
--3. 使用训练好的模型对当前图像的所有区域进行预测,然后预测概率最大的那个区域作为最终的预测框。
========================================================
RCNN
NOTE: 还是基于区域提名(物体候选框)的方式的目标检测
和传统的目标检测的区别:
-1. 传统的目标检测中,候选框区域的特征信息一般是HOG、LBP等特征(纹理、轮廓、区域信息...),RCNN中使用CNN卷积结构来自动的提取高阶特征(纹理、轮廓、区域信息...<卷积的功能>)
-2. 传统的目标检测中,一般最终的预测框就是候选框,R-CNN中会基于候选框区域的高阶特征,对候选框进行位置的微调。(也就是做一个回归)
流程:
1. Selective Search产生候选框
2. CNN卷积结构提取候选框的高阶特征
3. 基于候选框的高阶特征做分类,判断候选框中出现的物体是哪个类别(C+1,C个类别,1个背景)
4. 基于候选框的高阶特征做回归,对候选框的位置做调整
1,传统的目标检测
利用不同尺寸的滑动窗口框出图中的某一部分作为候选区域
提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测常用 HOG特征等
利用分类器进行识别,比如常用的SVM模型
传统目标检测,DPM中将物体看成是多个不同组件的结合,其效果不错,但是 检测速度相对比较慢
2,目前主流的目标检测
two-stage检测算法 首先产生候选区域,然后对候选区域进行分类R-CNN SPPNET Fast R-CNN
one-stage检测算法,直接进行区域定位与分类 SSD YOLO
3, 选择性搜索(区域合并算法)
1,划分图像为细粒度小块
2,计算相邻区域相似度,合并最相似的两块区域,
3,形成最终的候选区域
区域合并采用三种多样性策略来增加候选区域的可能性
1,多种颜色空间:RGB,灰度,HSV
2,多种相似度度量标准,纹理,大小,重叠情况等
3,更改阈值,阈值越大,分割块越少
目标检测的思路
思路一:1,搭建一个图像分类的神经网络,如在alexNet基础上做一个fine-tuning产生新的网络
2,在网络的尾部,变成classfication+regression
3,使用偶认识距离作为损失函数,做fine-tuning来训练
4, 预测的时候,分别用两个分支来完成不同的功能
思路二: classfication+候选框
取大小不同的框,让框出现在不同的位置,得出这个框的判定得分,获取得分最高的那个框
精度评估值
精度:precision=tp/tp+fp
召回率:recall=tp/tp+fn 可以把漏检的操作当作FN
TP: true positive, 正确的阳性,说明预测是阳性,而且预测对了,那么实际也是正例。
TN: true negative, 正确的阴性,说明预测是阴性,而且预测对了,那么实际也是负例。
FP: false positive, 假阳性,说明预测是阳性,预测错了,所以实际是负例。
FN: false negative, 假阴性,说明预测是阴性,预测错了,所以实际是正例。
为了得到tp和fn,需要用到IOU,以判断检测结果正确还是错误,一般以0.5做为IOU的阈值。
IOU
IOU定义了两个bounding box的重叠读,也就是 a∩b/(a∪b)
overFeat(特征提取算子)算法:
1, 利用滑动窗口进行不同尺度的区域提名,然后使用CNN模型对每个区
域进行分类,得到类别和置信度;
2,利用多尺度滑动窗口来增加检测数量,提升分类效果;
3, 用回归模型预测每个对象的位置;
4, 边框合并;
这个1*1*1*1的padding,是左右上下的padding
overFeat核心思想
1,区域提名:结合滑动窗口和规则块,即多尺度的滑动窗口;
2,分类和定位:统一用CNN来做分类和预测边框位置,和AlexNet类似,其中1-5为特征提取层,即将图片转为固定维度的特征向量,6-9层为分类层(分类任务专用),不同的任务(分类,定位,检测)公用特征提取层(1-5层),值替换6-9层
3,累积:因为用了滑动窗口,同一个目标对下会有多个位置,也就是多个视角;因为用了多尺度,同一个目标对象又会有多个位置,也就是多个视角,同一个目标对象又会有多个大小不一的快。 这些不同位置和不同大小块上的分类置信度会进行累加,从而使得判定更为准确。
一个是全卷积代替全连接,一个是多尺度滑动获取更多的区域信息。多尺度多视野的测试是核心。
OverFeat和AlexNet的区别主要在于以下几点:
没有使用LRN;
没有使用重叠池化;
使用小的stride代替大的stride(2代替4);
AlexNet中测试阶段中使用256*256图像做裁剪(四个角落和中间)和水平翻转, 得到5*2也就是10张227*227的图像,然后送进网络里面得到10个结果求平均来 进行预测。这样的做法有两个问题,裁剪时可能忽略了图像的一些区域,以及 10张图像有很多重叠部分导致了冗余计算。
OverFeat的测试阶段中使用多尺度、滑动窗口的方法(实验最多输入6个不同尺 度的图像),来产生预测结果。没有造成特征的丢失,因为卷积的时候是对整个图像进行卷积的。
OverFeat 多尺度预测阶段
分类和回归
分类我们一般用交叉熵损失函数,回归一般用MSE
假设3个类别,特征提取->分类->输出3+1(3个类别加一个背景)
回归->fc7->fc8->fc91
->fc92
->fc93
Hog:方向梯度直方图,
HOG特征检测算法的几个步骤:颜色空间归一化—>梯度计算—>梯度方向直方图—>重叠块直方图归一化—>HOG特征。
颜色空间归一化:图像灰度化,将rgb转为灰度图像
gamma校验:Gamma标准化,采用平方根或者对数法。
梯度方向直方图:将图像划分为若干个cell,8*8个像素为一个cell,相邻的cell之间不重叠。在每个cell内统计梯度方向直方图,将所有的梯度划分为9个bin,作为直方图的横轴,角度范围所对应的梯度值累加作为直方图纵轴。
重叠快直方图归一化:采用l2正则化,将所有block的特征向量组合起来,形成特征向量,这就是HOG特征,这个特征向量就可以表征整个图像了。
LBP: 以窗口中心像素为阈值,将相邻的8个像素的灰度值与其进行比较,若周围像素值大于中心像素值,则该像素点的位置被标记为1,否则为0。
非极大值抑制
物体检测中应用NMS算法的主要目的是消除多余(交叉重复)的窗口,找到最佳物体检测位置。
https://www.cnblogs.com/zf-blog/p/8532228.html
RCNN
1,利用ss得到若干个候选区域
2,对于每个候选区域分别使用CNN提取高阶特征向量,并且特征向量存储到磁盘中。
3,对于候选框区域提取的高阶特征向量使用SVM进行分类
4,使用非极大值一直剔除重复框
5,精准定位
提取出2000个框,高阶特征维度为4096,也就是可以得到一个2000*4096的特征向量矩阵,类别1的概率,2000*4096,通过训练一个4096*1的权重系数,就可以完成svm,关于1类别的训练。类别2同样
SVM是一种基于判别式的机器学习模型。
原理:对于一个二分类问题,例如优质站点和劣质站点,SVM的目标就是寻找到一个多维空间中的超平面,使得不同类别的实例尽可能被这个超平面正确地分开,并且超平面到它两侧最近实例的距离(称作边缘)尽可能大。
机器学习:根据已有的数据,进行算法选择,并给予算法和数据构建模型,最终对未来进行预测。
有监督学习,有人为标注数据的学习
无监督学习,相反
深度学习,是机器学习的子类,深度学习是给予传统的神经网络算法发展到多隐层的一种算法体现。