目标检测系列:
目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作
目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享
目标检测(object detection)系列(三) Fast R-CNN:end-to-end的愉快训练
目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN
目标检测(object detection)系列(五) YOLO:目标检测的另一种打开方式
目标检测(object detection)系列(六) SSD:兼顾效率和准确性
目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN
目标检测(object detection)系列(八) YOLOv2:更好,更快,更强
目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言
目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度
目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作
目标检测(object detection)系列(十二) CornerNet:anchor free的开端
目标检测(object detection)系列(十三) CenterNet:no Anchor,no NMS
目标检测(object detection)系列(十四)FCOS:用图像分割处理目标检测
目标检测扩展系列:
目标检测(object detection)扩展系列(一) Selective Search:选择性搜索算法
目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘
目标检测(object detection)扩展系列(三) Faster R-CNN,YOLO,SSD,YOLOv2,YOLOv3在损失函数上的区别
前言:目标检测的另一种打开方式
从时间轴上看,YOLO(YOLO v1)的提出在R-CNN,SPP-Net,Fast R-CNN和Faster R-CNN之后,论文是《You Only Look Once: Unified, Real-Time Object Detection》,从某种意义上说,YOLO的提出,从另一各方面定义了基于CNN的目标检测任务的基本方法。
通过前面几篇文章,我们知道R-CNN,SPP-Net,Fast R-CNN和Faster R-CNN这四个方法都没有离开一个东西,那就是区域建议(Region Proposal),它们中前三个在用SS算法,Faster R-CNN在用RPN网络。不管形式怎么变,它们都需要产生若干个区域建议框,这些框中存在潜在目标,而后面的任务就是判断框中到底是什么(分类),然后修正这些框(回归)。区域建议的生成工作是第一个阶段,后面的处理是第二个阶段,所以我们把R-CNN形式的目标检测方法称为two-stage。
two-stage的方式实现上其实是有些冗余的,比如RPN做了两件事:
1.1 给出若干个区域建议框;
1.2 给出这个区域建议框内是不是有目标的二分类结果,两个类别的置信度。
RPN之后的网络,又做了两件事:
2.1 回归矫正这个框,让他更接近ground truth;
2.2 对框里的目标,具体确定其类别。
这里有一个很有意思的地方,1.1和2.1都是在做四个值的回归,而2.1和2.2都是在做分类,那么它们一定要分成两步才能完成吗?
显然不是这样,YOLO就把它们整合到了一起,一步完成了目标类别的确定和bbox框的回归任务,所以我们把YOLO称为是one-stage的方法。下面我们具体看下YOLO是如何实现的。
YOLO实现
实现思路
有了这些输出,YOLO就可以完成目标检测这件事了,当然最后它需要一个阈值,确定最后要留下来的框和目标类别。
那么YOLO具体怎么得到的这些结果呢?我们看下它的网络结构。
YOLO网络结构
特别说明,上图来自《YOLO文章详细解读》
( x , y ) (x,y)(x,y)是bbox的中心相对于单元格的offset