“Deep Learning”总结

转载 2018年04月16日 15:30:03

参考:https://zhuanlan.zhihu.com/p/23203899

总结:

1、  传统的目标检测方法主要使用以下步骤:‘’

1)  选择候选区域;

2)  提取候选区域的视觉特征,比如颜色纹理、lbp、haar、hog等。(人脸检测一般用haar,行人用hog)。

3)  使用分类器进行分类,比如svm,cascade(级联分类器)。

 

2、  目标检测的第一步是进行候选区域的选择,有如下几种方法:

1)  滑动窗口。滑动窗口本质上就是穷举法,利用不同的尺度和长宽比把所有可能的大大小小的块都穷举出来,然后送去识别,识别出来概率大的就留下来。很明显,这样的方法复杂度太高,产生了很多的冗余候选区域,在现实当中不可行。

2)  规则块。在穷举法的基础上进行了一些剪枝,只选用固定的大小和长宽比。这在一些特定的应用场景是很有效的,比如拍照搜题APP小猿搜题中的汉字检测,因为汉字方方正正,长宽比大多比较一致,因此用规则块做区域提名是一种比较合适的选择。但是对于普通的目标检测来说,规则块依然需要访问很多的位置,复杂度高。

3)  选择性搜索。从机器学习的角度来说,前面的方法召回是不错了,但是精度差强人意,所以问题的核心在于如何有效地去除冗余候选区域。其实冗余候选区域大多是发生了重叠,选择性搜索利用这一点,自底向上合并相邻的重叠区域,从而减少冗余

 

3、  传统方法中,效果比较好的是DPM和ACF。

4、  基于深度学习的目标检测发展起来后,效果得到很大提升。深度学习相关的目标检测方法也可以大致分为两派

1)基于候选区域的,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;

2)端到端(End-to-End),无需候选区域的,如YOLO、SSD。

目前来说,基于候选区域的方法依然占据上风,但端到端的方法速度上优势明显,后续的发展拭目以待。

 

5、        使用深度学习做目标检测的方法

 

1、  OverFeat

Overfeat是用cnn统一做分类、定位和检测的经典之作,作者是深度学习的大神之一-Yann Lecun在纽约的大学团队。overFeat也是ILSVRC 2013任务3(分类+定位)的冠军得主。

其核心思想有三点:

1)  候选区域:结合滑动窗口和规则块,即多尺度的滑动窗口。

2)  定位和分类:统一用cnn做定位和预测边框位置,模型与alexNet类似,其中1~5层为特征提取层,即将图片转换为固定维度的特征向量,6-9层为分类层(分类任务专用),不同的任务(分类、定位、检测)公用特征提取层(1-5层),只替换6-9层。

3)  累积:因为使用了滑动窗口,同一个目标对象会有多个位置,也就是多个视角;因为使用了多个尺度,同一个目标的对象又会有多个大小不一的块。这些不同位置和不同大小块的分类置信度会进行累加,从而使得判定更为准确。

 

[7] P. Sermanet,D. Eigen, X.Zhang, M. Mathieu, R. Fergus, and Y. LeCun. OverFeat: Integratedrecognition, localization and detection using convolutional networks. In ICLR,2014

[9] OverFeat source code: software:overfeat:start

 

 

2、  R-CNN

R-CNNRegion-based Convolutional Neural Networks的缩写,中文翻译是基于区域的卷积神经网络,是一种结合候选区域(Region Proposal)和卷积神经网络(CNN)的目标检测方法。(早期的目标检测,大多数使用滑动窗口方法选择候选区域。)论文:RichFeature Hierarchies for Accurate Object Detection and Semantic Segmentation

其主要步骤包括:

1)  确定候选区域:使用selectivesearch 从原始图像中提取2000个左右的候选区域;

2)  区域大小归一化:把所有侯选框缩放成固定大小(原文采用227×227);

3)  特征提取:通过cnn进行特征提取;

4)  分类与回归:在特征层上增加2个全连接层,然后采用svm分类来做识别;接着用线性回归的方法调整目标的大小和位置。

Overfeat可以看做是R-CNN的一个特殊情况,只需要把Selective Search换成多尺度的滑动窗口,每个类别的边框回归器换成统一的边框回归器,SVM换为多层网络即可。但是Overfeat实际比R-CNN9倍,这主要得益于卷积相关的共享计算。(所以r-cnnoverfeat的改进之处在于使用了selective search选择候选区域,使用svm对特征进行分类。)

r-cnn的缺点为:

1)  重复计算:r-cnn不使用穷举,但仍然有2000左右的候选框,这些候选框都需要进行cnn操作,计算量依然很大,而且有不少重复计算。

2)  Svm模型是线性模型,在标注数据不缺的时候显然不少最好的选择。

3)  训练测试分为多步:候选区域、特征提取、分类、回归都是断开训练的过程,中间数据还是需要单独保存;

4)  训练的空间和时间代价很高:卷积出来的特征先要存放在硬盘上,这些特征可能要花费几百G的空间;

5)  慢:前面的缺点导致R-cnn出奇的慢,GPU上处理一张图片需要13s,cpu上需要53s。

 

在ILSVRC2013的数据集上,r-cnn的检测效果比overFeat提高了11%(overfeat为24.3%,r-cnn为31.4%),有了质的飞跃。

 

 

[1] R. Girshick, J. Donahue, T. Darrell, J.Malik. Rich feature hierarchies for accurate object detection and semanticsegmentation. ImageNet Large-Scale Visual Recognition Challenge workshop, ICCV,2013.

[2] R. Girshick, J. Donahue, T. Darrell, J.Malik. Rich feature hierarchies for accurate object detection and semanticsegmentation. IEEE Conference on Computer Vision and Pattern Recognition(CVPR), 2014.

[3] R. Girshick, J. Donahue, T. Darrell, J.Malik. Region-Based Convolutional Networks for Accurate Object Detection andSegmentation. IEEE Transactions on Pattern Analysis and Machine Intelligence,May. 2015.

[18]R-CNN: Region-based Convolutional Neural Networks: GitHub - rbgirshick/rcnn: R-CNN: Regions withConvolutional Neural Network Features

 

 

 

其实在R-CNN之前已经有很多研究者尝试用Deep Learning的方法来做目标检测了,包括OverFeat[7],但R-CNN是第一个真正可以工业级应用的解决方案,这也和深度学习本身的发展类似,神经网络、卷积网络都不是什么新概念,但在本世纪突然真正变得可行,而一旦可行之后再迅猛发展也不足为奇了

 

3、  ssp-net

ssp-netMSRA何凯明等人提出的,其主要思想是去掉原始图像上的crop/warp等操作,换成在卷积特征空间上的金字塔池化层(spatial pyramid pooling ,SSP)。为何要引入SSP层,主要的原因是CNN的全连接层要求输入图片的大小是一致的,而实际中的输入图片往往大小不一致,如果直接缩放到同一尺寸,很可能有的物体会充满整个图片,而有些可能占到图片的一角。传统的方法是裁剪,但这些裁剪技术会导致别的问题出现,比如会导致图片不全或者是伸缩变形严重,ssp就是解决这种问题的。其首先对整图提取固定的维度,再把图片分成4份,每份提取相同维度的特征,再把图片均分为16份,以此类推,可以看出无论图像的大小如何变化,提出处理的维度数据是一致的,这样就可以统一送进全连接层。SPP的思想在后来的R-cnn模型中也被广泛使用。

Ssp-net做目标检测的主要步骤为:

1)  确定候选区域:用selective search从原始图像中生成2000个左右的候选窗口;

2)  区域大小的缩放:spp-net不再做区域大小归一化,而是缩放到min(w,h)=s,即统一长宽的最短边长度,s选自{480,576,688,1200}中的一个,选择的标准是使得缩放后的候选区域大小与224*224最接近;

3)  特征的提取:利用SPP-net网络结构提取特征;

4)  分类与回归:与r-cnn类似,用svm训练分类器的模型,用边框回归来微调整候选框的位置。

Ssp-net解决了R-cnn候选区域时crop/warp带来的偏差问题,使得输入框可大可小,但其他方法依然和r-cnn一样存在不少问题。

 

[4] K. He, X.Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutionalnetworks for visual recognition. In ECCV. 2014.

[19]SPP-net: GitHub - ShaoqingRen/SPP_net: SPP_net : SpatialPyramid Pooling in Deep Convolutional Networks for Visual Recognition

Fast R-CNN[14, 20] 

[14] Girshick, R.Fast R-CNN. ICCV 2015.

[20] FastR-CNN: GitHub - rbgirshick/fast-rcnn: Fast R-CNN

 

4、  Fast R-cnn

Fast r-cnn是要解决r-cnnspp-net2000个左右候选框带来的重复计算问题,其主要思想为:

1)  使用一个简化的SPP--roi(region of interesting)pooling层,操作与SPP类似;

2)  训练和测试是不再分开多步:不再需要额外的硬盘来存储中间层的特征,梯度能够通过ROI Pooling层直接传播;此外,分类和回归用mul-task的方式一起进行;

3)  SVD:使用SVD分解全连接层的参数矩阵,压缩为2个规模小的很多的全连接层。

 

Fast R-cnnR-cnn的训练速度(大模型L)快8.8倍,测试时间快213倍,比SPP-net训练速度快2.6倍,测试速度快1.倍。

 

[14] Girshick, R.Fast R-CNN. ICCV 2015.

[20] Fast R-CNN: GitHub - rbgirshick/fast-rcnn: Fast R-CNN

 

5、  Faster R-CNN[5,21]

Fast R-cnn使用了selective search来选择候选区域,速度依然不够快。Faster R-cnn则直接使用RPN(Region Proposal Networks)网络来计算候选区域。RPN以一张任意大小的图片为输入,输出一批矩形候选区域,每一个区域对应一个目标分数和位置信息

Faster R-CNN的主要步骤如下:

1)  特征提取:同Fast R-CNN一样,以整张图片为输入,利用CNN得到图片的特征层;

2)  候选区域:在最终的卷积特征层数利用K个不同的矩形框(Anchor Box)进行提名,k一般取9

3)  分类与回归:对每个Anchor Box对应区域进行object/non-object二分类,并用K个回归模型(各自对应不同的Anchor Box)微调候选框位置和大小,最后进行目标分类。

总之,Faster R-CNN抛弃了selective search,引入了RPN网络,使得候选区域、分类、回归一起共用卷积特征,从而得到进一步加速。(fast r-cnn是使用selective search 的方法(其不使用cnn的卷积特征)选取roi区域,从而减少候选区域的个数;而faster R-cnn是先用分类器1(其使用cnn的卷积特征)提取出AnchorBox,然后再用分类器2AnchorBox进行识别)

 

[5] S. Ren, K. He,R. Girshick, J. Sun. Faster R-CNN: Towards Real-Time ObjectDetection with Region Proposal Networks. Advances in Neural InformationProcessing Systems 28 (NIPS), 2015.

 

[21]Faster R-CNN: GitHub - rbgirshick/py-faster-rcnn: FasterR-CNN (Python implementation) -- see https://github.com/ShaoqingRen/faster_rcnnfor the official MATLAB version

 

6、  R-FCN[16,24]

前面的目标检测方法可以细分为2个子网络:

1、  共享参数的全卷积网络;

2、  不共享计算的ROI相关子网络(比如全连接网络)。

R-FCN则将最后的全连接层换为一个与位置相关的卷积网络,从而让所有的计算都可以并行化

 

[16] R-FCN: ObjectDetection via Region-based Fully Convolutional Networks. Jifeng Dai, Yi Li,Kaiming He, and Jian Sun. Conference on Neural Information Processing Systems(NIPS), 2016.

[24]R-FCN: GitHub - daijifeng001/R-FCN: R-FCN: ObjectDetection via Region-based Fully Convolutional Networks

 

7、  YOLO[15,22]

YOLO的全拼是You Only Look Once,顾名思义就是只看一次,进一步把目标判别和目标识别合二为一,所以时间效率有了很大提升,达到每秒45帧,而在快速版YOLO中,可以达到每秒155帧。

其检测步骤为:

1)  把输入图片缩放到448*448大小;

2)  运行卷积网络;

3)  对模型置信度卡阈值,得到目标位置与类别。

YOLO简化了整个目标检测的流程,速度的提升也很大,但是YOLO还是不少可以改进的地方,比如SxS的网格就是一个比较启发式的策略,如果两个小目标同时落入一个格子中,模型只能预测一个;另一个问题是Loss函数对不同大小的BBox未做区分。

 

[15] Redmon, J.,Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time

[22] YOLO: YOLO: Real-Time Object Detection

论文You only look once: Unified, real-time阅读笔记:

1) yolo的检测策略

a)        目标的conflidence和位置precision的得分中,position precision更重要;

b)        大面积目标的偏差权重系数比小面积目标的要小,其对大面积目标更有信心;

c)        使用多个bounding box 对一个grid进行检测;

d)        在loss function公式中,只与误检及定位不准确的目标有关;

e)        为了防止过拟合,使用了data augmentation,每层的dropout因子设为0.5。

2) Yolo的局限性

a)        对每个grid有严格的空间约束,每个grid只包含有2个bounding box参数,1个类别参数,所以其对目标重叠的情况不能得到很好的结果;

b)        为了得到准确目标定位的boundingbox,需要使用不同比例系数的boundingbox去detect object,但是现在只对一幅图像进行下采样,其模型使用了粗糙的特征来确定boundingbox。

c)        Yolo的错误原因主要是有定位不准确引起的,因为loss function函数没有考虑大面积目标和小面积目标的BoundingBox对IOU的影响效果是不一致。

 

8、  SSD[17,23]

SSD的全拼是SingleShot MultiBox Detector,冲着YOLO的缺点来的。SSD的网络分为两部分,前面是用于图像分类的标准网络(去掉分类相关的层),后面的网络用于检测多尺度特征的映射层,从而达到检测不同大小的目标。

SSD在保持了YOLO高速的同时效果也提升了很多,主要是借鉴了Faster R-cnnAnchor机制,同时采用了多尺度。但是从原理依然看到,Default Box的形状及网格大小是事先固定的,那么对于特定的图片小目标的提取会不够好。

[17] Liu W,Anguelov D, Erhan D, et al. SSD: Single ShotMultiBox Detector[J]. arXiv preprint arXiv:1512.02325,2015.

[23] SSD: GitHub - weiliu89/caffe at ssd

阅读论文SSD:Single Shot MultiBox Detector的笔记:

1)  ssd的方法比object proposals的方法简单,因为它完全淘汰了object generationstages的特征采样机制,其所有的计算都在一个单一的网络内进行;

2)  其对每一个category产生一个得分,并使用多个box adjustment得到更好的bounding box

3)  其在网络的最后FC层多加了几层网络,用于准确定位目标的大小和位置;

4)  hard negative mining中,使用了highest confidence loss bounding box作为负样本,正负样本的比例为1:3

5)  如果我们选用顶层的feature map并且添加一个FC层作为predictor,不考虑使用不同比例的bounding box去检测,那就和yolo的方法一致了。

 

9、  目标检测数据库详情

Name

# Images (trainval)

# Classes

Last updated

ImageNet

450k

200

2015

COCO

120K

80

2014

Pascal VOC

12k

20

2012

Oxford-IIIT Pet

7K

37

2012

KITTI Vision

7K

3

2014

 

 

 

综上所述:rcnn的目标检测框架与传统方法一致,只是使用cnn的方法进行特征提取。对每一个候选区域patch都提取特征,非常耗时,于是提出了ssp-net,其主要思想是去掉原始图像上的crop/warp等操作,将每个patch都提取特征改进为对图像提取一次卷积特征后,然后建立卷积特征空间上的金字塔池化层(spatial pyramid pooling ,SSP),从而提高时间效率。Fast r-cnn是要解决r-cnnspp-net2000个左右候选框带来的重复计算问题,Fast R-cnn使用了selectivesearch来选择候选区域,速度依然不够快。Faster R-cnn则直接使用RPN(Region Proposal Networks)网络来计算候选区域。RPN以一张任意大小的图片为输入,在最后的卷积特征层使用分类器的方法输出一批矩形候选区域,每一个区域对应一个目标分数和位置信息。R-FCN则将最后的全连接层换为一个与位置相关的卷积网络,从而让所有的计算都可以并行化。YOLO进一步把目标判别和目标识别合二为一,及将输出候选区域和目标识别合二为一,所以时间效率有了很大提升。SSD冲着YOLO的缺点来的。SSD的网络分为两部分,前面是用于图像分类的标准网络(去掉分类相关的层),即特征提取层,然后在后面的多尺度特征映射层分别使用不同的分类器进行分类识别,从而检测到不同大小的目标。

深度学习的一些总结(Introduce to Deep learning)

关于深度学习的一些总结
  • coder_oyang
  • coder_oyang
  • 2015-06-28 16:42:10
  • 2324

吴恩达deep learning课程学习重点笔记

神经网络基础: 梯度下降法指的是在给定一个初始值后,始终沿着当前最陡峭的下降方向进行移动。 代价函数:二次型,交叉熵代价函数(cross-entropy cost) 计算方法:backpropag...
  • u010710787
  • u010710787
  • 2017-12-26 13:51:19
  • 141

《Neural networks and deep learning》概览

最近阅读了《Neural networks and deep learning》这本书(online book,还没出版),算是读得比较仔细,前面几章涉及的内容比较简单,我着重看了第三章《Improv...
  • u012162613
  • u012162613
  • 2015-03-12 12:34:05
  • 17668

【论文导读】Scalable and Accurate Deep Learning for Electronic Health Records

本文转载自新智元微信公众平台,作者是康奈尔大学威尔医学院助理教授王飞,对Google最近挂出的深度电子病历论文进行了导读,网上下载了本文阅读,确实如大牛王飞所说,有点点和这么豪华的作者整容不匹配,可能...
  • cskywit
  • cskywit
  • 2018-01-29 11:05:59
  • 466

基于Deep Learning的跟踪算法总结(二)

本文主要谈谈TCNN(树状CNN)实现物体跟踪算法的大致流程和原理。论文:《Modeling and Propagating CNNs in a Tree Structure for Visual T...
  • whfshuaisi
  • whfshuaisi
  • 2017-04-18 15:31:28
  • 933

Learning Deep Features for Discriminative Localization论文笔记以及Caffe实现

首先说一下,作者是通过Caffe的MATLAB版本实现,这里使用Caffe的Python版本实现。 这里先放一下效果图,可以很容易的理解文章的意思。 这篇论文的主要贡献在于,可以通过热...
  • Leo_812
  • Leo_812
  • 2016-07-22 21:08:31
  • 2449

吴恩达《deeplearning深度学习》课程学习笔记【1】(精简总结)

毕业以后就没再写过博客,又想起来了。 Ps:本文只是个人笔记总结,没有大段的详细讲解,仅仅是将自己不熟悉和认为重要的东西总结下来,算是一个大纲,用的时候方便回忆和查找。 Ps2:部分笔记内容见图片...
  • churximi
  • churximi
  • 2018-03-09 17:49:04
  • 143

Neural Networks and Deep Learning学习笔记ch1 - 神经网络

最近开始看一些深度学习的资料,想学习一下深度学习的基础知识。找到了一个比较好的tutorial,Neural Networks and Deep Learning,认真看完了之后觉得收获还是很多的。从...
  • yc461515457
  • yc461515457
  • 2016-01-11 17:00:15
  • 5471

深度学习DeepLearning.ai系列课程学习总结:1. 深度学习简介

本节内容对应吴恩达deeplearning.ai课程中,第一部分第一周的内容。 学习过程中的一些笔记与心得与大家分享! 原始课程请访问https://www.deeplearning.ai/来了解...
  • laodengbaiwe0838
  • laodengbaiwe0838
  • 2017-08-20 21:49:18
  • 5792

论文阅读-《Learning Deep Features for Discriminative Localization》

收录于CVPR2016 关于全连接层不能保持spatial information的理解 相比全连接层,卷积层是一个spatial-operation,能够保持物体的空间信息(translation...
  • yaoqi_isee
  • yaoqi_isee
  • 2017-03-15 08:28:12
  • 1998
收藏助手
不良信息举报
您举报文章:“Deep Learning”总结
举报原因:
原因补充:

(最多只允许输入30个字)