昨天贪玩了没有学。 --wudibooo
目标检测算法分为两类
两步走:先进行区域推荐,而后进行目标分类
R-CNN、SPP-net、Fast R-CNN、Faster R-CRNN
端到端:用一个网络一部到位
YOLO、SSD
第一个:两个输出,一个用于分类,一个用于做盒子定位
分类:全连接层输出n分类,用Crossentropy来优化
盒子定位:其实就是数值回归,全连接层输出四个值(x , y , h, w),计算bbox预测点和真实点之间的差距,用MSE来优化
BBOX的名字:真实值ground-truth bounding box, 预测值 predice bounding box
一开始我们解决目标检测问题的想法是,先用一个bbox把物体画出来,然后输入进CNN中提取图片特征,再将输出分别输入进一个类别分类器和bbox回归器中,来进行类别的预测和bbox的拟合。
但是在设计时我们只能固定bbox的大小,而且一次只能输出一个物体,为了解决这个问题,就提出了over-feat模型,一种非常暴力的方法。
首先要提前设定K个不同大小的滑动窗口,每个窗口提取M个图片,总共可得到K *M 个图片,从左到右,从上到下不断扫描,这样就可以得到不同的物体,再把此作为后续的输入,方法是可行的,但是看得出计算量非常大。
为解决如何更好的选取我们需要的区域,就出现了下面许多优秀的算法。
R-CNN(Region with CNN feature)算法是目标检测里面常用的一种算法,主要包含3个部分,候选区域的选择,CNN特征提取,分类和bbox的回归。
候选区域叫法:ROI,region proposed, anchor
ROI(region of instere),为了解决over-feat那种选区域的方式,在RCNN中,提出了一种SS(SelectiveSearch)算法,具体步骤如下:
在RCNN的paper中,利用了这种方法,从一张图片上提取出约2000个候选区域,因为这个是要作为后面CNN层的输入,大小要固定,所有要将所有的候选区域进行Crop/Warp缩放paper使用的是VGG,所有缩放成224*224大小的图片。
对前面提取到的候选区域进行特征提取,具体就自己去看一些CNN网络,论文使用了VGG,输入为2000*224*244。
先讲分类,原文使用的是SVM支持向量机(不太了解可以看看我之前的笔记,点这里)来对图片做分类,一共有20个类别,使用了OVR的方法,每个SVM都对该类别进行一次判断,得到一个概率值,这样20个就得到一个【2000*20】的矩阵,2000代表2000个候选区域,20个类别。
Bbox的回归,一般使用NMS(非最大抑制)的方法,就选出最佳个框框,如下步骤:
这里就结束了?不够。
SS给的框框使我们一开始设定好的,不够完美,与真实的bbox还有点差距,在RCNN中就提出了一个bbox regressor,在bbox regressor中,会对预测bbox 【x ,y ,h ,w 】和真实的bbox【x ,y ,h ,w 】进行线性回归。
anchor是NMS方法最后得到的框框,也是我们叫的bbox,先对这个anchor乘上w进行一次变化得到pred,再计算pred和GT之间的loss,再不断优化。
IoU:就是图像的交集 / 并集,用来评价bbox的。
MAP:定义为多个分类任务的AP平均值,评价分类预测的,步骤如下:
标记样本:
训练特征提取器CNN:
训练SVM分类器:
训练bbox regressor:
图例:转载
计算量还是很大,而且候选区域的要进行crop和wrap,可能会丢失信息。
写到这里我感觉太费时间,以后直接贴链接