目标检测
先安利一个我觉得很棒的视觉入门->https://zhuanlan.zhihu.com/p/27642620
还有这个->https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/
REF: https://www.cnblogs.com/xiaoboge/p/10544336.html
实现
目前计算机视觉(computer vision)与自然语言处理(Natural Language Process)及语音识别(Speech Recognition)并列为人工智能·机器学习·深度学习方向的三大热点方向 。图像分类、目标检测、分割是计算机视觉领域的三大任务。
目标检测的基本思路
:同时解决定位(localization) + 识别(Recognition)。
多任务学习,带有两个输出分支。一个分支用于做图像分类,即全连接+softmax判断目标类别,和单纯图像分类区别在于这里还另外需要一个“背景”类。另一个分支用于判断目标位置,即完成回归任务输出四个数字标记包围盒位置(例如中心点横纵坐标和包围盒长宽),该分支输出结果只有在分类分支判断不为“背景”时才使用。
传统的目标检测框架
,主要包括三个步骤:
- 利用不同尺寸的滑动窗口框住图中的某一部分作为候选区域;
- 提取候选区域相关的视觉特征。比如人脸检测常用的Harr特征;行人检测和普通目标检测常用的HOG特征等;
- 利用分类器进行识别,比如常用的SVM模型。
目前目标检测领域的深度学习方法主要分为两类:两阶段(Two Stages)的目标检测算法;一阶段(One Stage)目标检测算法。
两阶段:首先由算法(algorithm)生成一系列作为样本的候选框,再通过卷积神经网络进行样本(Sample)分类。
常见的算法有R-CNN、Fast R-CNN、Faster R-CNN等等。
一阶段:不需要产生候选框,直接将目标框定位的问题转化为回归(Regression)问题处理(Process)。
常见的算法有YOLO、SSD等等。
基于候选区域,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;
基于端到端,无需候选区域的,如YOLO、SSD。
对于上述两种方式,基于候选区域的方法在检测准确率和定位精度上占优,基于端到端的算法速度占优。
相对于R-CNN系列的“看两眼”(候选框提取和分类),YOLO只需要“看一眼”。
总之,目前来说,基于候选区域的方法依然占据上风,但端到端的方法速度上优势明显,至于后续的发展让我们拭目以待。
发展历程
以下是大神们整理的: https://github.com/hoya012/deep_learning_object_detection/blob/master/README.md
Detector | VOC07 (mAP@IoU=0.5) | VOC12 (mAP@IoU=0.5) | COCO (mAP@IoU=0.5:0.95) | Published In |
---|---|---|---|---|
R-CNN | 58.5 | - | - | CVPR’14 |
SPP-Net | 59.2 | - | - | ECCV’14 |
MR-CNN | 78.2 (07+12) | 73.9 (07+12) | - | ICCV’15 |
Fast R-CNN | 70.0 (07+12) | 68.4 (07++12) | 19.7 | ICCV’15 |
Faster R-CNN | 73.2 (07+12) | 70.4 (07++12) | 21.9 | NIPS’15 |
YOLO v1 | 66.4 (07+12) | 57.9 (07++12) | - | CVPR’16 |
G-CNN | 66.8 | 66.4 (07+12) | - | CVPR’16 |
AZNet | 70.4 | - | 22.3 | CVPR’16 |
ION | 80.1 | 77.9 | 33.1 | CVPR’16 |
HyperNet | 76.3 (07+12) | 71.4 (07++12) | - | CVPR’16 |
OHEM | 78.9 (07+12) | 76.3 (07++12) | 22.4 | CVPR’16 |
MPN | - | - | 33.2 | BMVC’16 |
SSD | 76.8 (07+12) | 74.9 (07++12) | 31.2 | ECCV’16 |
GBDNet | 77.2 (07+12) | - | 27.0 | ECCV’16 |
CPF | 76.4 (07+12) | 72.6 (07++12) | - | ECCV’16 |
R-FCN | 79.5 (07+12) | 77.6 (07++12) | 29.9 | NIPS’16 |
DeepID-Net | 69.0 | - | - | PAMI’16 |
NoC | 71.6 (07+12) | 68.8 (07+12) | 27.2 | TPAMI’16 |
DSSD | 81.5 (07+12) | 80.0 (07++12) | 33.2 | arXiv’17 |
TDM | - | - | 37.3 | CVPR’17 |
FPN | - | - | 36.2 | CVPR’17 |
YOLO v2 | 78.6 (07+12) | 73.4 (07++12) | - | CVPR’17 |
RON | 77.6 (07+12) | 75.4 (07++12) | 27.4 | CVPR’17 |
DeNet | 77.1 (07+12) | 73.9 (07++12) | 33.8 | ICCV’17 |
CoupleNet | 82.7 (07+12) | 80.4 (07++12) | 34.4 | ICCV’17 |
RetinaNet | - | - | 39.1 | ICCV’17 |
DSOD | 77.7 (07+12) | 76.3 (07++12) | - | ICCV’17 |
SMN | 70.0 | - | - | ICCV’17 |
Light-Head R-CNN | - | - | 41.5 | arXiv’17 |
YOLO v3 | - | - | 33.0 | arXiv’18 |
SIN | 76.0 (07+12) | 73.1 (07++12) | 23.2 | CVPR’18 |
STDN | 80.9 (07+12) | - | - | CVPR’18 |
RefineDet | 83.8 (07+12) | 83.5 (07++12) | 41.8 | CVPR’18 |
SNIP | - | - | 45.7 | CVPR’18 |
Relation-Network | - | - | 32.5 | CVPR’18 |
Cascade R-CNN | - | - | 42.8 | CVPR’18 |
MLKP | 80.6 (07+12) | 77.2 (07++12) | 28.6 | CVPR’18 |
Fitness-NMS | - | - | 41.8 | CVPR’18 |
RFBNet | 82.2 (07+12) | - | - | ECCV’18 |
CornerNet | - | - | 42.1 | ECCV’18 |
PFPNet | 84.1 (07+12) | 83.7 (07++12) | 39.4 | ECCV’18 |
Pelee | 70.9 (07+12) | - | - | NIPS’18 |
HKRM | 78.8 (07+12) | - | 37.8 | NIPS’18 |
M2Det | - | - | 44.2 | AAAI’19 |
R-DAD | 81.2 (07++12) | 82.0 (07++12) | 43.1 | AAAI’19 |
目标检测要解决的核心问题是:
- 目标可能出现在图像的任何位置。
- 目标有各种不同的大小。
- 目标可能有各种不同的形状。
主流算法详解
接触目标检测有一定的时间,将读过做过的一些内容做个总结:(好吧也是先挖个坑我会填的)
了解这些最好的方法还是去读paper和code,而且真的需要反复的读
完整的paper:https://blog.csdn.net/junmuzi/article/details/53418782
https://handong1587.github.io/deep_learning/2015/10/09/object-detection.html
RCNN
Fast-RCNN
Faster-RCNN
RCNN系列