“Deep Learning”总结

参考: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的网络分为两部分,前面是用于图像分类的标准网络(去掉分类相关的层),即特征提取层,然后在后面的多尺度特征映射层分别使用不同的分类器进行分类识别,从而检测到不同大小的目标。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 深度学习是一项非常热门的技术,在人工智能领域得到广泛应用。PyTorch是一种使用Python编程语言的开源深度学习框架,它非常适合研究和开发深度学习模型。为了帮助初学者更好地学习PyTorch深度学习技术,CSDN(全球最大中文IT社区)开设了“DeepLearning with PyTorch”系列课程。 这个系列课程以实践为主要教学方式,让学生在实际操作中掌握PyTorch深度学习的技能。在学习过程中,学生可以学到基础的模型结构设计,各种优化算法,如学习率调整、梯度下降等,并且可以在实战操作中学到如何使用PyTorch完成各种实际应用,例如图像分类和识别,自然语言处理等等。 这门课程的受众群体不仅仅是那些想要从事人工智能开发的工程师,它对于对深度学习感兴趣的学生和科研人员也是非常有用的。这是因为在这个课程中,教师基于实际使用场景和数据集介绍了PyTorch深度学习技术,从实践中总结出的方法和经验不仅可以快速提升工程开发效率,也可以加深对深度学习理论的理解。 总之,“DeepLearning with PyTorch”系列课程非常实用和有趣,可以为初学者提供全面而深入的深度学习知识,帮助他们掌握用PyTorch来开发深度学习模型的基础技能。 ### 回答2: Deep Learning是一种用于训练多层神经网络的机器学习方法,已被广泛应用于视觉、语音、自然语言处理等领域。而PyTorch是一种开源的深度学习框架,具有快速、灵活、易用等优点,因此受到了越来越多的关注和使用。 CSDN是一个致力于IT技术在线学习和分享的平台,在其中学习deeplearning with pytorch将能够获取丰富的知识和实践经验。首先,我们需要了解PyTorch的基本概念和操作方法,如如何构建网络模型、定义损失函数和优化器、进行前向传播和反向传播等。然后,我们可以学习如何使用PyTorch进行数据预处理,如数据清洗、标准化、归一化等。此外,还可了解如何使用PyTorch进行分布式训练、混合精度训练等高级技术,以及如何在GPU上进行训练和推理等实践技巧。 总之,在CSDN上学习deeplearning with pytorch,能够让我们更好地掌握PyTorch的使用技巧,帮助我们更快、更好地完成深度学习的应用开发和研究工作。同时也可以通过活跃在CSDN平台上与其他开发者的交流来共同进步。 ### 回答3: PyTorch是一种针对深度学习任务的开源机器学习库,它支持快速的原型设计和大量的实验,是当前科学界和工业界中最受欢迎的深度学习框架之一。CSDN推出的Deeplearning with Pytorch系列课程就是致力于教授学生如何使用PyTorch进行深度学习,以及在此基础上更深层次的研究探索。 此系列课程包含了从入门到进阶多个方面的内容,在基础课程中,学员将学会如何使用PyTorch进行深度学习的各个方面,包括但不限于神经网络、优化器、损失函数等,使其基本掌握PyTorch的使用方法。而在进阶课程中,以一些大型深度学习任务为基础,详细介绍了超参数优化、神经网络模型架构选择、分布式训练、自己写网络模型等更高级的知识,通过深度剖析一些开源库的源码,为学员提供了很多实现深度学习任务的技巧和方法。 课程的开设不仅帮助了很多想更深入了解深度学习的爱好者,也有助于那些打算将深度学习应用在自己的科研工作中的研究者们更加快捷、有效地完成自己的研究任务。相信随着人工智能的不断发展,PyTorch这样的框架将会发挥越来越重要的作用,而帮助大家掌握这些工具的Deeplearning with Pytorch系列课程也必将得到更多的关注和支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值