9种深度学习算法简介

导读:从算法处理的流程来划分,基于深度学习的目标检测算法可分为两阶段(Two-Stage)算法和一阶段(One-Stage)算法,两阶段算法需要先进行候选框的筛选,然后判断候选框是否框中了待检测目标,并对目标的位置进行修正;一阶段算法没有筛选候选框的过程,而是直接回归目标框的位置坐标和目标的分类概率。

作者:涂铭金智勇

01两阶段算法

两阶段算法包含选择候选框和修正目标分类/位置两个阶段,对这两个阶段的不同处理方式,构成了不同的算法方案。

1.R-CNN算法

在VOC2007数据集上,R-CNN算法相比之前的检测算法,在性能有了显著的提升(从33.7%提升到58.5%),是检测算法的一个里程碑式的突破。

虽然R-CNN在算法性能上取得了巨大的进展,但弊端也非常明显,因为需要分别从2000多个候选框中提取特征,所以效率非常低,后续各种算法正是为了解决这一问题而提出的一系列改进方案。

2.SPP-Net算法

2014年,何恺明等人提出了SPP-Net(SpatialPyramidPoolingNetworks,空间金字塔池化网络)算法。

R-CNN算法要求输入卷积网络用来提取特征的子图像尺寸固定,比如Alex-Net就要求输入的图像大小为固定的224像素×224像素,而SPP-Net算法则去掉了这一限制。SPP-Net算法基于一个空间金字塔池化层(SPPlayer),无论输入的子图像大小如何,都会将子图像采样成固定大小的图像。

在使用SPP-Net进行检测的过程中,对原始图像只需要进行一次卷积网络计算,在得到整幅图像的特征图之后,通过空间金字塔池化层将每个候选框区域(ROI)都分别采样成相同尺寸的子图像,将相同尺寸的各个子图像送入后续的网络进行特征提取,提取的特征具有相同的维数,最后送入全连接层进行分类。

SPP-Net不需要进行多次卷积网络计算,与R-CNN相比,在算法精度不变的情况下,算法的速度有了20倍的大幅提升。

3.FastR-CNN算法

2015年,R.Girshick等人提出了FastR-CNN算法,其本质是在R-CNN和SPP-Net的基础上进行了进一步改进。FastR-CNN可以在网络里同时预测目标的分类概率和位置偏移。

在VOC2007数据集上,FastR-CNN将mAP(meanAveragePrecision,平均精度均值)从58.5%提升至70.0%,算法速度也比R-CNN有了200倍的提升。虽然FastR-CNN的性能和速度相比R-CNN和SPP-Net有了明显的改善,但整体速度仍然受到候选框检测算法的制约,为了解决这个问题,FasterR-CNN算法诞生了。

4.FasterR-CNN算法

2015年,S.Ren等人提出了FasterR-CNN算法,FasterR-CNN是第一个端到端算法,也是第一个接近实时深度学习的目标检测算法。使用ZF-Net网络骨架,在VOC2007数据集上,mAP达到了73.2%,算法速度达到了17fps。

FasterR-CNN最主要的贡献是使用卷积网络检测候选框。检测候选框、预测目标的类别、回归目标位置的偏移量,共享底层卷积特征,整个算法流程融合成了一个完整的端到端学习框架。FasterR-CNN突破了候选框检测的速度瓶颈,是一种十分重要的两阶段算法。

5.FPN算法

2017年,Lin等人在FasterR-CNN的基础上提出了FPN(FeaturePyramidNetworks,特征金字塔策略)算法。

在FPN之前,绝大多数深度学习检测器都是基于卷积网络最顶层的特征图进行计算的。深层特征包含全局信息,却弱化了细节信息,使用深层特征在小目标检测,尤其是精准定位方面,有着较大的劣势。FPN采用top-down结构以及侧连方法,将深层特征和浅层特征进行融合,使得特征既包含全局信息又包含细节信息。

另外,检测计算也基于特征金字塔的多层特征图,具有更强的多尺度适应性。基于FPN的FasterR-CNN算法在COCO数据集上取得了最优的性能。当前,FPN已经成为构建检测算法的基础策略。

02一阶段算法

一阶段算法和两阶段算法最主要的区别,就是没有单独的候选框筛选阶段,而是直接回归目标的位置坐标和分类概率。常用的一阶段算法如下。

1.YOLO算法

2015年,R.Joseph等人提出了YOLO(YouLookOnlyOnce)算法,这是首个深度学习领域的一阶段算法。

从名字就可以看出,YOLO没有两阶段算法中提取候选框和验证分类两个步骤,图像送入一个神经网络就能完成整个预测过程。YOLO算法的实现方案是,先把原始图像划分成网格,然后基于网格的每个单元格回归目标的类别概率和位置坐标。

作为一阶段算法,YOLO的一个最大优点就是速度快,在VOC2007数据集上,mAP为63.4%,检测算法速度可以达到45fps;YOLO的加速版本mAP为52.7%,速度甚至可以达到惊人的155fps。

不过,YOLO也有不尽如人意的地方,在目标位置的精度上比两阶段算法有所降低,尤其是在对一些小目标的检测方面,效果明显变差。正因为存在这些问题,后续YOLO的版本以及其他一阶段算法,都致力于更好地解决上述问题。

2.SSD算法

2015年,W.Liu等人提出了SSD(SingleShotMultiBoxDetector)算法,这是深度学习领域的第二个一阶段算法。

与仅使用最顶层特征图进行预测的方法不同,SSD最主要的贡献是引入了基于多尺度特征图的检测策略,显著提升了算法的性能,尤其是在小目标检测方面,相比YOLO有了明显的改善,在VOC2007数据集上,mAP达到了76.8%。

3.Retina-Net算法

Retina-Net算法引入了损失函数,其核心思想是在训练过程中,对传统的交叉熵损失加上权重,使得错分的样本产生的损失在最终损失中占有更大的比例。引入损失函数,使得一阶段算法在保持速度优势的前提下,保证了目标检测的精度。

4.FCOS算法

2019年,沈春华团队提出了FCOS(FullyConvolutionalOne-Stage)算法。和SSD等一阶段算法不同,FCOS是一种“anchorfree”方法,回归目标位置不需要预先设定anchor,在待检测目标尺度和形态变化较大的场景中有重要的应用。

另外,FCOS算法在具体实现的过程中也使用了FPN策略,对于多尺度的目标有更好的检测效果。

THE END
1.算法竞赛学习指南(分阶段)算法竞赛进阶指南一定要有善于看题解的习惯,对于不会的题,一个最好的办法就是看题解,如果题解看不懂,可以换一篇。如果是知识点不知道,那就去查阅相关算法知识。 这一阶段我强烈建议购买算法竞赛的书籍,因为只有书籍可以带你系统地学习算法竞赛 推荐书籍 这本书是所有的书里面最好的(上交大acm教练写的),如果不想买太多,可以只https://blog.csdn.net/weixin_74229477/article/details/134594920
2.从啥也不会的小白,如何成为合格的算法工程师?算法工程师但是就我个人的经验以及观察而言,我发现无论大小互联网公司,一个算法工程师的表现,和他的算法、数据结构的水平是呈正相关的。而且这两块也是面试考察的重点,想要去比较好的公司锻炼学习,算法和数据结构作为基本功是一定要会的。另外,这两块的能力对于我们持续学习以及研究互联网行业的其他技术非常有帮助,像是分布式https://aiqicha.baidu.com/qifuknowledge/detail?id=10100085880
3.如何通俗易懂地解释什么是算法?算法对于非专业人来说,确实比较难理解。我随手就问了几个非相关专业的学霸:“你觉得算法是什么?”有https://www.zhihu.com/question/55136787/answer/298954174
4.学习算法(LearningAlgorithm)学习算法是机器学习中的一个核心概念,它指的是能够从数据中学习并做出预测或决策的算法。学习算法通常通过分析训练数据集来发现数据中的模式、趋势和关联,然后利用这些信息来对新的数据做出响应。以下是学习算法的一些关键特点和类型: ### 关键特点: 1. **数据驱动**:学习算法依赖于数据来改进其性能。 https://www.jianshu.com/p/83a01cf614dc
5.吴师兄学算法五分钟学算法吴师兄学算法(www.cxyxiaowu.com)提供许多数据结构与算法学习的基础知识, 涵盖 LeetCode 题解、剑指 Offer 题解、数据结构等内容。https://www.cxyxiaowu.com/
6.6个超酷的练习算法,学习编程的网站如果您已经编程了一段时间,想学习一种新的语言,学习一种新的思维方式,那就去运动吧! 总结 在本文中,我分享了6个超酷的网站来练习算法和学习编程! 我个人认为您不需要学习太多,如果想在面试之前进行练习,请访问Skilled / Hackerrank / Leetcode。 或者,如果您需要学习新的语言,请选择运动。https://news.51cto.com/art/202006/618315.htm
7.深度学习高手笔记卷1:基础算法本书通过扎实、详细的内容和清晰的结构,从算法理论、算法源码、实验结果等方面对深度学习算法进行分析和介绍。本书共三篇,第一篇主要介绍深度学习在计算机视觉方向的一些卷积神经网络,从基础骨干网络、轻量级 CNN、模型架构搜索 3 个方向展开,介绍计算机视觉方向的里程碑算法;第二篇主要介绍深度学习在自然语言处理方向的https://www.epubit.com/bookDetails?id=UB7d8623610d375
8.十大深度学习算法的原理解析腾讯云开发者社区十大深度学习算法的原理解析 前言 深度学习是机器学习的子集,它基于人工神经网络。学习过程之所以是深度性的,是因为人工神经网络的结构由多个输入、输出和隐藏层构成。每个层包含的单元可将输入数据转换为信息,供下一层用于特定的预测任务。得益于这种结构,机器可以通过自身的数据处理进行学习。https://cloud.tencent.com/developer/article/2318555
9.轻松看懂机器学习十大常用算法西南石油大学轻松看懂机器学习十大常用算法 通过本篇文章大家可以对ML的常用算法形成常识性的认识。没有代码,没有复杂的理论推导,仅是图解,介绍这些算法是什么以及如何应用(例子主要是分类问题)。以后有机会再对单个算法做深入地解析。 一、决策树 二、随机森林算法 三、逻辑回归https://www.swpu.edu.cn/eelab/info/1090/2296.htm
10.超详细算法岗的学习路线大总结!机器学习 or 深度学习基础 论文or 项目介绍 其他问题 & 向面试官提问 本文将从以上四点进行展开。 一、数据结构&算法题 随着算法岗越来越卷,Coding几乎成了面试必考的一项,而且在面评中的权重也越来越高,根据个人面试经验,如果这一环节没有很顺利得完成的话,几乎必挂,尤其对于非科班转行的同学,需要特别重视。 https://leetcode.cn/circle/discuss/SX3aa6/
11.《常用算法之智能计算(三)》:机器学习计算(2)基于学习方式的分类 机器学习算法按照学习方式的不同可以分为五种类型:有监督学习、无监督学习、半监督学习、强化学习和深度学习。 1)有监督学习?输入的数据为训练数据,并且每一个数据都会带有标签或类别。通过训练过程建模,模型需要作出预测,如果预测出错会被修正,直到模型输出准确的训练结果,训练过程会一直http://www.kepu.net/blog/zhangjianzhong/201903/t20190327_475625.html
12.科学网—[转载]基于深度强化学习的六足机器人运动规划以平面随机梅花桩为例,设定随机起始点与目标区域,利用深度强化学习算法进行训练,并得到六足机器人在平面梅花桩环境中的运动策略。为了加快训练进程,采用具有优先经验重放机制的深度确定性策略梯度算法。最后在真实环境中进行验证,实验结果表明,所规划的运动策略能让六足机器人在平面梅花桩环境中高效平稳地从起始点运动到https://blog.sciencenet.cn/blog-951291-1288193.html