6

深度目标检测(四)——YOLO, SSD, YOLOv2

 2 years ago
source link: http://antkillerfarm.github.io/deep%20object%20detection/2018/11/20/Deep_Object_Detection_4.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Faster R-CNN(续)

https://mp.weixin.qq.com/s/IZ9Q3fDJVawiEbD6x9WRLg

Object Detection系列(三)Fast R-CNN

https://mp.weixin.qq.com/s/M_i38L2brq69BYzmaPeJ9w

像玩乐高一样拆解Faster R-CNN:详解目标检测的实现过程

https://mp.weixin.qq.com/s/oTo12fgl1p5D7yzdfWIT8Q

使用Faster R-CNN、ResNet诊断皮肤病,深度学习再次超越人类专家

https://mp.weixin.qq.com/s/5OkPWPLRyf07mZwLRSZ3Fw

机器视觉目标检测补习贴之R-CNN系列—R-CNN,Fast R-CNN,Faster R-CNN

https://mp.weixin.qq.com/s/KL6gB0SsclyHqedS_tThXA

里程碑式成果Faster RCNN复现难?我们试了一下

YOLO: Real-Time Object Detection,是一个基于神经网络的实时对象检测软件。它的原理基于Joseph Chet Redmon 2016年的论文:

《You Only Look Once: Unified, Real-Time Object Detection》

这也是Ross Girshick去Facebook之后,参与的又一力作。

https://pjreddie.com/darknet/yolo/

注:Joseph Chet Redmon,Middlebury College本科+华盛顿大学博士(在读)。网名:pjreddie。

pjreddie不仅是个算法达人,也是个造轮子的高手。YOLO的原始代码基于他本人编写的DL框架——darknet。

YOLO的caffe版本有很多(当然都是非官方的),这里推荐:

https://github.com/yeahkun/caffe-yolo

从R-CNN到Fast R-CNN一直采用的思路是proposal+分类(proposal提供位置信息,分类提供类别信息),这也被称作two-stage cascade。

YOLO不仅是end-to-end,而且还提供了另一种更为直接的思路:直接在输出层回归bounding box的位置和bounding box所属的类别(整张图作为网络的输入,把Object Detection的问题转化成一个Regression问题)。

上图是YOLO的大致流程:

Step 1:Resize成448x448,图片分割得到7x7网格(cell)。

Step 2:CNN提取特征和预测:卷积部分负责提取特征,全连接部分负责预测。

a) 7x7x2=98个bounding box(bbox) 的坐标xcenter,ycenter,w,h和是否有物体的confidence。

b) 7x7=49个cell所属20个物体分类的概率。

上图是YOLO的网络结构图,它采用经过修改的GoogLeNet作为base CNN。

从表面看,YOLO的输出只有一个,似乎比Faster RCNN两个输出少一个,然而这个输出本身,实际上要复杂的多。

YOLO的输出是一个7x7x30的tensor,其中7x7对应图片分割的7x7网格。30表明每个网格对应一个30维的向量。

上图是这个30维向量的编码方式:2个bbox+confidence是5x2=10维,20个物体分类的概率占其余20维。

总结一下,输出tersor的维度是:S×S×(B×5+C)

这里的confidence代表了所预测的box中含有两重信息:object的置信度和这个box预测的有多准。

confidence=Pr(Object)∗IOUpredtruth

在loss函数设计方面,简单的把结果堆在一起,然后认为它们的重要程度都一样,这显然是不合理的,每个loss项之前的参数λ就是用来设定权重的。

Step 3:过滤bbox(通过NMS)。

上图是Test阶段的NMS的过程示意图。

https://zhuanlan.zhihu.com/p/24916786

图解YOLO

https://mp.weixin.qq.com/s/n51XtGAsaDDAatXYychXrg

YOLO比R-CNN快1000倍,比Fast R-CNN快100倍的实时对象检测!

http://blog.csdn.net/tangwei2014/article/details/50915317

论文阅读笔记:You Only Look Once: Unified, Real-Time Object Detection

https://mp.weixin.qq.com/s/Wqj6EM33p-rjPIHnFKtmCw

计算机是怎样快速看懂图片的:比R-CNN快1000倍的YOLO算法

http://lanbing510.info/2017/08/28/YOLO-SSD.html

目标检测之YOLO,SSD

http://www.yeahkun.com/2016/09/06/object-detection-you-only-look-once-caffe-shi-xian/

Object detection: You Look Only Once(YOLO)

http://blog.csdn.net/zy1034092330/article/details/72807924

https://mp.weixin.qq.com/s/c9yagjJIe-m07twPvIoPJA

YOLO算法的原理与实现

https://mp.weixin.qq.com/s/JKyX5cdvknIRoF341Au7Ew

单级式目标检测方法概述:YOLO与SSD

SSD是Wei Liu于2016年提出的算法。

《SSD: Single Shot MultiBox Detector》

https://github.com/weiliu89/caffe

Wei Liu,南京大学本科(2009)+北卡罗莱娜大学博士(在读)。
个人主页:
http://www.cs.unc.edu/~wliu/

YOLO有一些缺陷:每个网格只预测一个物体,容易造成漏检;对于物体的尺度相对比较敏感,对于尺度变化较大的物体泛化能力较差。

针对YOLO中的这些不足,SSD在这两方面都有所改进,同时兼顾了mAP和实时性的要求。其思路就是Faster R-CNN+YOLO,利用YOLO的思路和Faster R-CNN的anchor box的思想。

上图是SSD的网络结构图。其特点为:

1.采用VGG16的基础网络结构,使用前面的前5层。

2.使用Dilated convolution将fc6和fc7层转化成两个卷积层。

3.再额外增加了3个卷积层,和一个average pool层。不同层次的feature map分别用于default box的偏移以及不同类别得分的预测。

4.通过NMS得到最终的检测结果。

这些增加的卷积层的feature map的大小变化比较大,允许能够检测出不同尺度下的物体:在低层的feature map,感受野比较小,高层的感受野比较大,在不同的feature map进行卷积,可以达到多尺度的目的。

上图是从另一个角度观察SSD,可以看出SSD可检出8372个default box(也叫做prior box)。这里沿用Faster R-CNN的Anchor方法生成default box。

和YOLO一样,卷积层的每个点都是一个vector,含义也和YOLO类似,只是分类的时候,多了一个背景的类别,所以就成了20+1类。

在YOLO中,由于每个格子只有1个default box,所以对于一个格子中包含两个物体的情况是无能为力的。SSD的Anchor方法略微改善了这方面的性能,但对于超过Anchor数量的情况,仍然无能为力。因此,这两者对于小目标的检测,没有RCNN系列算法的效果好。

监督学习训练的关键点:如何把标注信息(ground true box,ground true category)映射到(default box上)?

与ground truth box的IOU大于0.5的default box,被定为该ground truth box的正样本,其它的default box则为负样本。

而一般的MultiBox算法中,只有IOU最大的default box才是正样本。

显然,在SSD中,一个ground truth box可能对应多个default box。

例如上图,有两个default box与猫匹配,一个default box与狗匹配。

Hard Negative Mining

Hard Negative Mining是机器学习领域的一个常用技巧。

对于正负样本数量不均衡的数据集(这里假设负样本数量远大于正样本数量),通常的做法有:

1.增加正样本的数量。这个过程通常叫做数据增强(Data Augmentation)。例如对图片进行旋转、位移得到新的正样本。

2.减少负样本的数量。这里实际上是一个筛选有价值的负样本的过程。Hard Negative Mining就属于这类方法,它认为负样本的分数越高,越有价值。

具体到图像分类任务就是:那些不包含该物体但分值却很高的样本。通俗的讲,就是那些容易被混淆的负样本。

3.修改正负判定门限,以匹配正负样本比例。例如,提高IOU门限。

4.异常点检测。

在SSD中,用于预测的feature map上的每个点都对应有6个不同的default box,绝大部分的default box都是负样本,导致了正负样本不平衡。

在训练过程中,采用了Hard Negative Mining的策略(根据confidence loss对所有的box进行排序,使正负例的比例保持在1:3)来平衡正负样本的比率。

https://mp.weixin.qq.com/s/D0JaJaHeNX4kljSTxTsAAw

一文概览卷积神经网络中的类别不均衡问题

https://mp.weixin.qq.com/s/ZRwr4lIyi3EHafuNAwUrLw

Soft Sampling:探索更有效的采样策略

Caffe实现的细节问题

上图是SSD末端的caffe结构图。我们注意到在flatten之前有个permute的操作。这个实际上还是和caffe blob的格式有关。

只有flatten的效果:[B, CxHxW]

permute+flatten的效果:[B, HxWxC]

C在最后,意味着同一个点的不同通道的信息挨着放在一起,从而保证了信息的局部空间性保持不变。

显然,这里如果是TensorFlow的tensor结构的话,permute就没有存在的必要了。

http://www.jianshu.com/p/ebebfcd274e6

Caffe-SSD训练自己的数据集教程

https://zhuanlan.zhihu.com/p/24954433

http://blog.csdn.net/zy1034092330/article/details/72862030

SSD详解

http://blog.csdn.net/jesse_mx/article/details/74011886

SSD模型fine-tune和网络架构

http://blog.csdn.net/u010167269/article/details/52563573

SSD论文阅读

http://blog.csdn.net/zijin0802034/article/details/53288773

另一个SSD论文阅读

http://www.lai18.com/content/24600342.html

还是一个SSD论文阅读

https://www.zhihu.com/question/49455386

为什么SSD(Single Shot MultiBox Detector)对小目标的检测效果不好?

https://mp.weixin.qq.com/s/hGRZzNzflbed2w4XosC40w

使用SSD进行目标检测

https://mp.weixin.qq.com/s/vfC1FPi8sjatFh2HMjTEXQ

目标检测算法之SSD

YOLOv2

面对SSD的攻势,pjreddie不甘示弱,于2016年12月提出了YOLOv2。

YOLOv2有两个版本:

原始版:仍然是VOC数据集的20个分类。

加强版:类别增加到9000类。因此这一版本也被称作YOLO9000。

YOLOv2对YOLO做了较多改进,实际上更像是SSD的升级版。

《YOLO9000: Better, Faster, Stronger》

实际上,论文的内容也正如标题所言,主要分为Better, Faster, Stronger三个部分。

Better

batch normalization

YOLOv2网络通过在每一个卷积层后添加batch normalization,极大的改善了收敛速度同时减少了对其它regularization方法的依赖(舍弃了dropout优化后依然没有过拟合),使得mAP获得了2%的提升。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK