Open YujunXie opened 4 years ago
OverFeat:《OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks》
contribution:多尺度滑动窗口
缺点:速度慢,效果差。
RCNN:《Rich feature hierarchies for accurate object detection and semantic segmentation》
contribution:
提出选择性搜索selective search代替滑动窗口(穷举)提取候选框。
区域大小归一化:把所有侯选框缩放成固定大小(原文采用227×227);
特征提取:通过CNN网络,提取特征;
分类与回归:在特征层的基础上添加两个全连接层,再用SVM分类来做识别,用线性回归来微调边框位置与大小,其中每个类别单独训练一个边框回归器。
缺点:重复计算,SVM分类,训练测试分为多步,训练的空间和时间代价很高,慢。但效果比OverFeat好。
SPPNet:《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》
contribution:
缺点:大多同R-CNN。
作者是先对整张图片进行卷积然后,在把其中的目标窗口拿出来Pooling,得到的结果用作全连接层的输入。
Fast R-CNN:《Fast R-CNN》
contribution:
主要步骤:
速度更快。
ROI Pooling:1)根据输入image,将ROI映射到feature map对应位置;2)将映射后的区域划分为相同大小的sections(sections数量与输出的维度相同);3)对每个sections进行max pooling操作;
这样就可以从不同大小的候选框得到固定大小的相应的feature maps。
Faster R-CNN, RPN:《Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks》
contribution:
主要步骤:
Faster R-CNN抛弃了Selective Search,引入了RPN网络,使得区域提名、分类、回归一起共用卷积特征,从而得到了进一步的加速。但是,Faster R-CNN需要对两万个Anchor Box先判断是否是目标,然后再进行目标识别,分成了两步。
YOLO v1:《You Only Look Once: Unified, Real-Time Object Detection》
contribution:简化整个目标检测流程,大大提升检测速度。
主要步骤:
将图像分成sxs的网格,目标中心点所在的格子负责该目标的相关检测。每个网格预测B个边框及其置信度,以及C种类别的概率。总的预测值为 S × S × (B * 5 + C) 个。YOLO中S=7,B=2,C 取决于数据集中物体类别数量,比如VOC数据集就是 C=20。
优点:
缺点:
tricks:Pretraining on Imagenet;SGD with decreasing learning rate;Extensive data augmentation;
SSD:《SSD: Single Shot MultiBox Detector 》
contribution:借鉴了Faster R-CNN中的Anchor机制,同时使用了多尺度。保持YOLO高速的同时提升了效果。
图(a)表示带有两个Ground Truth边框的输入图片,图(b)和(c)分别表示8×8网格和4×4网格,显然前者适合检测小的目标,比如图片中的猫,后者适合检测大的目标,比如图片中的狗。在每个格子上有一系列固定大小的Box(有点类似前面提到的Anchor Box),这些在SSD称为Default Box,用来框定目标物体的位置,在训练的时候Ground Truth会赋予给某个固定的Box,比如图(b)中的蓝框和图(c)中的红框。
SSD的网络分为两部分,前面的是用于图像分类的标准网络(去掉了分类相关的层),后面的网络是用于检测的多尺度特征映射层,从而达到检测不同大小的目标。
R-FCN:《R-FCN: Object Detection via Region-based Fully Convolutional Networks 》
全连接层的作用:实现融合特征和特征映射。当去掉全连接层时,目标检测的效果会很差。矛盾在于:
contribution:
具体操作:将每一个ROI划分成k×k个格,池化输出每个格的位置得分(即 k^2(C+1) 通道大小的输出,其中C 为类别数,+1为背景),k^2个得分图通过投票(eg.求均值)后得到ROI上 C+1 维的输出向量。后接一个softmax层得到每一类的最终得分,并在训练时计算损失。
损失函数:分类部分为交叉熵损失,回归部分为平滑L1损失,总的损失为这两部分的和。
OHEM:《Training Region-based Object Detectors with Online Hard Example Mining》
contribution:
针对Fast-RCNN框架,在每次minibatch(1张或者2张)训练时加入在线筛选hard region的策略。
这是一次ML经典算法bootstrapping在DL中的完美“嵌入。
FPN:《Feature Pyramid Networks for Object Detection》
contribution:使用CNN网络中每一层的信息来生成最后的表达特征组合。每层都是独立预测。自下至上的不同维度特征生成;自上至下的特征补充增强(将上层feature map等比例放大后再与本层的feature maps做element wise相加);CNN层特征与每一级别输出之间的表达关联(1x1conv);
YOLO v2:《YOLO9000: Better, Faster, Stronger》
为了改进YOLO v1 定位不够准确,召回率较低的缺点。作了以下改进:
contribution:
Batch Normalization:在每个卷积层后加BN,起到一定的正则化效果,能提升模型收敛速度,防止模型过拟合。YOLOv2 通过使用 BN 层使得 mAP 提高了 2%。
High Resolution Classifier:主流的分类网络大部分都是以小于 256x256 的图片作为输入进行训练的,低分辨率会影响模型检测能力。因此YOLOv2 将输入图片的分辨率提升至 448x448,为了使网络适应新的分辨率,YOLOv2 先在 ImageNet 上以 448x448 的分辨率对网络进行 10 个 epoch 的微调,让网络适应高分辨率的输入。YOLOv2 的 mAP 提升了约 4%。
使用 anchor box 进行卷积:YOLOv2 通过缩减网络,使用 416x416 的输入,使得网络输出的特征图有奇数大小的宽和高,进而使得每个特征图在划分单元格(Cell)的时候只有一个中心单元格(Center Cell)。模型下采样的总步长为 32,最后得到 13x13 的特征图,然后对 13x13 的特征图的每个 cell 预测 5 个 anchor boxes,对每个 anchor box 预测边界框的偏移值、置信度和分类概率。使用 anchor boxes 之后,YOLOv2 可以预测 13x13x5=845 个边界框,模型的召回率由原来的 81% 提升到 88%,mAP 由原来的 69.5% 降低到 69.2%. 召回率提升了 7%,准确率下降了 0.3%。总预测值为13*13*5(5+20)
使用Darknet-19:减少计算量。
维度集群:YOLOv2 采用 k-means 聚类算法对训练集中的边界框做了聚类分析,选用 boxes 之间的 IOU 值作为聚类指标。综合考虑模型复杂度和召回率,最终选择 5 个聚类中心,得到 5 个先验框,发现其中中扁长的框较少,而瘦高的框更多,更符合行人特征。通过对比实验,发现用聚类分析得到的先验框比手动选择的先验框有更高的平均 IOU 值,这使得模型更容易训练学习。
Direct location prediction:
直接对Bounding Boxes求回归会导致模型不稳定,其中心点可能会出现在图像任何位置,有可能导致回归过程震荡,甚至无法收敛,尤其是在最开始的几次迭代的时候。
YOLOv2借鉴了如下的预测方式,即当Anchor Box的中心坐标和宽高分别是(xa,ya)和(wa,wh)时,Bounding Box坐标的预测偏移值(tx,ty,tw,th)与其坐标宽高(x,y,w,h)的关系如下:
黑色虚线框是Anchor Box,蓝色矩形框就是预测的Bounding Box结果,预测出的Bounding Box的坐标和宽高为(bx,by)和(bw,bh),计算方式如图中所示,其中:对每个Bounding Box预测出5个值(tx,ty,tw,th,t0),Cell与图像左上角的横纵坐标距离为(cx,cy),σ定义为sigmoid激活函数(将函数值约束到[0,1]),该Cell对应的Anchor Box对应的宽高为(pw,ph)。
简而言之,(bx,by)就是(cx,cy)这个Cell附近的Anchor Box针对预测值(tx,ty)得到的Bounding Box的坐标预测结果,同时可以发现这种方式对于较远距离的Bounding Box预测值(tx,ty)能够得到很大的限制。
Fine-Grained Features:提出 pass through 层将高分辨率的浅层特征图与低分辨率的深层特征图联系在一起(把特征堆积在不同Channel中),从而实现多尺度检测。
Multi-Scale Training:用多尺度输入的方式训练,在训练过程中每隔 10 个 batches , 重新随机选择输入图片的尺寸,由于 Darknet-19 下采样总步长为 32,输入图片的尺寸一般选择 32 的倍数 {320,352,…,608}。采用 Multi-Scale Training, 可以适应不同大小的图片输入, 当采用低分辨率的图片输入时,mAP 值略有下降,但速度更快,当采用高分辨率的图片输入时,能得到较高 mAP 值,但速度有所下降。
缺点:无法解决重叠问题的分类。
YOLO v3:《YOLOv3: An Incremental Improvement》
contribution:
RetinaNet:《Focal Loss for Dense Object Detection》
contribution:
具体操作:将训练回归任务用的交叉熵损失替换为focal loss。
多出的一项为权重,该权重的作用:量大的类别所贡献的loss被大幅砍削,量少的类别所贡献的loss几乎没有多少降低。虽然整体的loss总量减少了,但是训练过程中量少的类别拥有了更大的话语权,更加被model所关心了。最后$\alpha=0.25, \gamma = 2 $ 结果最好。
detector部分是两条平行pipeline,且设计相同 (除了尾部的output不一样) 但 参数不共享。
Mask R-CNN:《Mask R-CNN》
contribution:
Soft-NMS:《Improving Object Detection With One Line of Code》
contribution:
线性加权:
高斯加权:
M为当前得分最高框,$b_i$为待处理框,$b_i$和M的IOU越大, $b_i$的得分$s_i$就下降的越厉害。
但置信度阈值仍为手工设置。
检测任务:回归+分类
传统的目标检测方法:一般使用滑动窗口的框架,主要包括三个步骤:
基于深度学习的目标检测器:R-CNN -> OverFeat -> Fast R-CNN -> RPN -> Faster R-CNN -> R-FCN -> YOLO -> SSD -> FPN -> RetinaNet -> Mask R-CNN。 可以分为两类:one-stage和two-stage两种,two-stage比one-stage多一步用于目标候选框的生成。
评价指标
数据集
热门的子问题