目标检测学习笔记
目标检测方法整理
经典方法包括:
基于region proposal的:
- R-CNN
- Fast R-CNN
- Faster R-CNN
- R-FCN
基于回归方法的:
- YOLO
- SSD
region proposal方法
区域建议方法的主要思路是:找出可能的目标区域 + 提取目标区域特征 + 对目标区域分类 and 对目标Box回归
R-CNN:
1.使用select search(ss)方法得到目标的可能区域,约2000个
2.对可能区域先变换到固定大小,再使用CNN提取特征
3.通过SVM对特征进行分类,得到目标类
4.通过回归方法得到目标box
其模型结构图如下:
其优势是:不需要人工制定描述特征。
其问题是:训练和检测速度太慢。三部分需要单独训练。
Fast R-CNN:
针对R-CNN的速度慢问题,Fast R-CNN通过 ROI pooling和bounding box与classification的合并大大提高了训练速度和检测速度。
1.使用select search(ss)方法得到目标的可能区域ROI,约2000个
2.对图片使用CNN提取特征
3.根据获得的ROI,提取ROI特征,使用ROI池化到固定大小
4.对池化后结果使用CNN进行classification和regression
其结构模型如下图:
其优势是:通过先CNN再ROI pooling的操作,大大减少了计算冗余;classification和regression操作都使用CNN来完成,且在一个模型中实现,为简化训练步骤打下基础。
其问题是:速度仍然达不到实时,仍然需要额外的region proposal部分给出ROI,训练也需要分开。
Faster R-CNN:
针对Fast R-CNN的不足,提出了Faster R-CNN。通过region proposal net(RPN)来实现区域提议,通过共享思想极大的提高了训练和测试速度。
1.对图像做CNN特征提取(共享卷积层)
2.使用RPN网络提取ROI(RPN CNN,好像是两层,有独立的 \(E=L_score\) 和 \(E=L_bbox\)),为提高定位精度使用了anchor box
3.使用2中获得的ROI选择1中的特征区域,进行classification和regression
其结构模型如下图:
其优势是:区域提议、特征提取和分类回归全部使用一个网络完成,大大提高了训练和检测速度。网络训练使用交替训练方法。
其问题是:仍然不能完全达到检测
三者的关系与比较
三者的关系:
三者的比较:
图表摘自Faster RCNN解析
基于区域提取方法的目标检测,更进一步的研究可参考博客文章Faster R-CNN 深入理解 && 改进方法汇总
回归方法
基于回归方法的目标检测,不需要预先给出或计算ROI。同时,将classification和bounding box regression放在一个网络部分来完成,其损失函数其实是两个损失函数的综合。
否可以理解为其实是学习bounding box的位置,然后对bbox内物体按照概率分类?
YOLO
最大特点是不需要单独的region proposal,直接用CNN网络对图像做处理,然后根据概率和非极大值抑制(NMS)过滤bbox。
1.对图像resize后做网格分割(grid cell),分为特定大小(7x7)
2.对图像做卷积,然后每个cell内预测两个bbox并预估class概率
3.从772个bbox中过滤得出最终结果
其结构模型如下图:
其优势是:不需要region proposal,速度很快,可达到实时。使用先训练分类网络,再训练检测模型的方法。
其问题是:定位精度不准,同时,对小目标的检测,对密集目标的检测很困难。主要原因是每个cell只预测两个bbox。
为了克服YOLO的主要问题,引入了anchor概念及其他手段,在保证速度的前提下,精度也大大提高。主要手段如下:
这里要注意,anchor概念的引入在mAP上表现的差异不大,但是在recall上增加约7%。具体可见原文献
SSD
在速度上可比拟YOLO,在精度上追随Faster R-CNN。主要特点是多层特征图预测分类和bbox,其中bbox有多种尺度和比例。
1.图像提取特征获得多个层和多个scale的feature map
2.对每个feature map设定的default bbox进行回归并预测class score(default bbox含有多种尺度和比例)
3.bbox过滤
其结构模型如下图:
其优势是:如上所述,快并且有较好的精度。
其问题是:default box的大小形状需要预先人工设置,不能自动迭代。对小目标的检测仍然不够,可能是低层卷积的特征提取不够导致的。
上述方法可以参考如下博文内的图片: