[TOC]
Object Detection:
1 | graph LR |
一、R-CNN
1 | graph LR |
1.候选框
使用Region Proposal算法选择区域,一般2k个候选区域
2.CNN提取特征
一般使用AlexNet、VGG-16网络作为提取特征的CNN网络。先对网络进行预训练,使用ILVCR 2012作为数据集进行训练,输出为1000维的标签。与训练完后,将最后的分类层删除,4096维特征直接输入SVM进行分类。
3. SVM分类器分类,打分,非极大值抑制
CNN提取的特征输入SVM,分类
4.回归器finetune
CNN提取的特征输入回归器Regression进行对网络FineTune.
缺点:
多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;
针对传统CNN需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入CNN的信息丢失;
每一个ProposalRegion都需要进入CNN网络计算,上千个Region存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。
二、SPP NET
Spatial Pyramid Pooling1
2
3
4
5
6
7
8
9graph LR
image-->CNN
image-->Region_Proposal
CNN-->Features
Region_Proposal-->Features
Features-->SPP
SPP-->FC
FC-->SVM
FC-->Regression
改进
使用SPP特殊的pooling使得卷积计算大大减少
1.候选框
和RCNN相同
2.对整个图片做SPP_Net卷积
采用空间金字塔池化(SpatialPyramid Pooling )替换了 全连接层之前的最后一个池化层(上图top).
把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量。而R-CNN输入的是每个候选框,然后在进入CNN,因为SPP-Net只需要一次对整张图片进行特征提取,速度会大大提升。
3.SVM
和RCNN相同
4.Regression
和RCNN相同
缺点:
1)和RCNN一样,训练过程仍然是隔离的,提取候选框 | 计算CNN特征| SVM分类 | Bounding Box回归独立训练,大量的中间结果需要转存,无法整体训练参数;
2)SPP-Net在无法同时Tuning在SPP-Layer两边的卷积层和全连接层,很大程度上限制了深度CNN的效果;
3)在整个过程中,Proposal Region仍然很耗时。
三、Fast-RCNN
1 | graph LR |
改进
1)借鉴SPP思路,提出简化版的ROI池化层(注意,没用金字塔),同时加入了候选框映射功能,使得网络能够反向传播,解决了SPP的整体网络训练问题;
2)多任务Loss层
A)SoftmaxLoss代替了SVM,证明了softmax比SVM更好的效果
B)SmoothL1Loss取代Bouding box回归。
将分类和边框回归进行合并(又一个开创性的思路),通过多任务Loss层进一步整合深度网络,统一了训练过程,从而提高了算法准确度。
3)全连接层通过SVD加速
4)结合上面的改进,模型训练时可对所有层进行更新,除了速度提升外(训练速度是SPP的3倍,测试速度10倍),得到了更好的检测效果
1.候选框
同上
2.特征提取
整个图片CNN网络提取特征,取出候选框中的特征进行RIO Pooling得到Features
3.LOSS
使用SoftmaxLoss取代了SVM,SmoothL1Loss取代了回归器,最后两个Loss合并。
缺点
虽然已经很厉害了,但是候选框的选取还是慢啊
=========================================
四、Faster-RCNN
graph LR
image-->CNN
CNN-->Features
Features-->RPN
Features-->Feature
RPN-->Feature
Feature-->RIO_Pooling
RIO_Pooling-->SoftmaxLoss
SoftmaxLoss-->Loss
RIO_Pooling-->SmoothL1Loss
SmoothL1Loss-->Loss
改进
这个就厉害了,直接把候选框选取用一个网络实现了,而且是在特征提取过以后,想想就快啊。