目标检测
当做回归任务:一个框4个值,输出层的节点个数为4k,节点数无法确定,可以准确地具体框的大小
当做分类任务:滑动窗口,对每个窗口的物体分类,则节点数就是分类数,但框的大小是固定的,因此需要设计大小不同的框,计算量大
回归+分类,多任务学习:框出一个区域+分类是object,则回归框
图像金字塔:框大小固定,缩放图片
古典目标识别(没有回归,只有分类)
选择搜索:图像中物体可能存在的区域应该是具有某些相似性或者连续性区域的,ss基于这样想法采用子区域合并的方法进行提取boundingboxes 候选框区域。(将层次聚类的思想应用与区域合并)
①对输入图像进行分割算法产生许多小的子区域
②根据这些子区域之间的相似性(颜色、纹理、大小等)进行区域合并,不断进行区域迭代合并。
③每次迭代过程中对这些合并的子区域做boundingboxes(外切矩形),这些子区域外切矩形就是通常所说的候选框。
Select Search+cls
①训练集构造
负样本:ss提取出来的候选框与gt的重合度(IOU)在20%-50%之间,且与其他的任何一个已经生成的负样本的重合度不大于70%,则为负样本。(正负例均衡,如果负样本太多,将会影响模型偏向学习负样本,模型泛化能力减弱)正样本:gt
②将样本输入分类器svm分类
R-CNN
与古典目标检测相比:①增加了卷积网络提取特征②增加回归校正框的大小和坐标
校正:学习相对于候选框的残差△x,△y,△w,△h,而不是从头开始学习一个从正无穷到负无穷的值,更加容易学习
ss提取候选框约2000,resize成相同大小(svm和回归器需要固定大小),输入卷积网络(每个候选框对应一个卷积网络参数),然后将特征图输入回归器和分类器,分别做框的校正和目标的分类
训练:先在卷积网路连接交叉熵损失训练网络,然后接上回归器和分类器训练(分开训练,svm无法用神经网络表达)
问题:
①不是端到端②提特征的loss和分类回归的loss不同,cnn和分类回归学习目标不同
①resize导致信息丢失②2000次计算,计算量大,信息重复计算③ss秒级时间
SPP-net
空间金字池化(resize作用)SSP
我们知道R-CNN在当时虽然取得了不错的成绩,但是其需要改进的地方也很多,比如算法步骤比较繁琐,需要大量的时间和内存去训练和测试模型等。除此之外,在训练和测试常见的CNN网络时,要求输入的图像有一个固定的大小,比如要求图像的输入为224*224。(网络前面的卷积层不要求输入图像的大小,后面的全连接层的输入特征数是固定的,需要固定的输入)这就要求我们在使用网络前需要对图像进行一些预处理操作,比如:裁剪(crop)、拉伸(warp)等。文章《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》提出来一种Spatial Pyramid Pooling(SPP)结构来解决这种问题,将这种结构放在卷积层与全连接层中间,在多个测试中取得了不错的效果。
上面需要加入一些裁剪等操作,才能得到一个固定大小的输入,下面只需要加一个SPP层就可以达到相同作用,并且还有其他优点。
相当于将候选框对应的特征图上的区域平均分成36、9、4、1份,再在每份中取均值或取最大
只有一个卷积网络,将SS提出的候选框映射到卷积之后的特征图上,做空间金字塔池化,每个候选框做回归和分类
Fast R-CNN
backbone使用VGG16
SS+vgg16+ROI Pooling +fcs+softmax,linear
ROI Pooling:只使用SPP layer中的一个尺度池化
softmax替换SVM
log loss + smooth L1 loss
Faster R-CNN
提出候选框,分类,微调边框
通过CNN提取候选框:RPN(注意力机制作用)
RPN做二分类,判断每一个滑动窗口对应的位置是不是物体,是物体,则作为候选框,是候选框则回归校正位置(粗校正)
分类器对9个锚框都做二分类
anchor与任意ground truth的IOU大于0.7则认为是正例
再在特征图上做映射,然后做ROI Pooling然后进行多分类和二次校正细校正
3×3×512×256 1×1×256×(2k+4k=18+36,k=9)
映射:14×14一个点对应原图16×16
感受野:228×288(做分类)
yolov1
在图片中划分cell,目标中心位置落在那个cell,就由哪个cell预测该物体
原图片中的一个cell与特征图的每个点一一对应
S ×S ×(B ∗5 + C)
网络架构受GoogLeNet模型的启发,网络有24个卷积层,其后是2个全连接的层。我们没用GoogLeNet使用的inception模块,只使用3×3和1×1卷积层。
yolov2
引入了anchor
使用kmeans聚类聚类出5个初始化anchor
bx = σ(tx) + cx by = σ(ty) + cy bw = pwetw bh = pheth
Pr(object)∗IOU(b,object) = σ(to)
yolov3
使用多个二分类代替softmax,如此以来,每个类别的概率相加就不需要等于1,类别概率之间不需相关。
加入颈部,相当于特征金字塔FPN
Darknet-53 has some short cut connections as well and is significantly larger