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

作者:涂铭 金智勇

来源:大数据DT(ID:hzdashuju)

01 两阶段算法

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

1. R-CNN算法

2014年,R. Girshick等人提出了R-CNN算法。R-CNN算法的思路非常简单,首先基于Selective Search方法从原始图像中筛选出若干候选框,然后将每个候选框中的图像缩放的固定尺度送入卷积网络提取特征,最后通过支持向量机(SVM)方法对特征进行分类,判断候选框中的图像是背景还是我们关注的目标类型。

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

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

2. SPP-Net算法

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

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

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

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

3. Fast R-CNN算法

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

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

4. Faster R-CNN算法

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

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

5. FPN算法

2017年,Lin等人在Faster R-CNN的基础上提出了FPN(Feature Pyramid Net works,特征金字塔策略)算法。

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

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

02 一阶段算法

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

1. YOLO算法

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

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

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

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

2. SSD算法

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

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

3. Retina-Net算法

Retina-Net算法的主要目的是解决正负样本不平衡的问题。常规的一阶段算法在提取训练样本的过程中,背景样本的比例远大于目标样本的比例。正负样本的极度不平衡会导致训练过程中模型较少关注目标样本,这也是一阶段算法的精度低于两阶段算法的主要原因。

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

4. FCOS算法

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

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

关于作者:涂铭,资深数据架构师和人工智能技术专家,现就职于腾讯,曾就职于阿里。对大数据、自然语言处理、图像识别、Python、Java等相关技术有深入的研究,积累了丰富的实践经验。

金智勇,计算机视觉算法专家,在计算机视觉领域深耕12年。现就职于百度,曾就职于阿里和三星等知名高新技术企业。业务领域涵盖增强现实、人脸识别、图像美化、智能交通、工业质检等多个方向,具有丰富的算法研究与落地经验。

本文摘编自《深度学习与目标检测:工具、原理与算法》,经出版方授权发布。(ISBN:9787111690344)

《深度学习与目标检测:工具、原理与算法》

点击上图了解及购买

转载请联系微信:DoctorData

推荐语:AI和计算机视觉专家在阿里、腾讯、百度经验总结,工具、原理、算法3维度快速入门目标检测,附源数据和代码。

划重点

9种深度学习算法简介相关推荐

  1. 主流深度学习算法简介

    ** 深度学习算法简介** 1. 深度学习主流算法包括: 1.1 CNN (卷积神经网络) 卷积神经网络(CNN)是最常见的深度学习方法之 一.自20 世纪80 年代后期以来,CNN 已应用于视觉识别 ...

  2. tensorflow玻尔兹曼机_资源 | 10种深度学习算法的TensorFlow实现

    原标题:资源 | 10种深度学习算法的TensorFlow实现 选自 Github 作者:blackecho 机器之心编译 参与:吴攀 这个 repository 是使用 TensorFlow 库实现 ...

  3. 深度学习算法模型_不到5分钟的3种深度学习算法,第2部分深度顺序模型

    深度学习算法模型 In the last article, we looked at models that deal with non-time-series data. Time to turn ...

  4. 十大值得关注的深度学习算法

    随着人工神经网络的应用,深度学习算法训练机器在大量数据上进行复杂的计算.深度学习算法可以让机器能够像人脑那样进行工作和处理数据,并高度依赖于人工神经网络,并基于人脑的结构-功能而工作.以下是十大值得关 ...

  5. 几种常用深度学习框架简介

    几种常用深度学习框架简介 一.TensorFlow 1.1 Tensorflow简介 1.2 使用文档 1.3 预训练模型 二.Pytorch 2.1 Pytorch简介 2.2 使用文档 2.3 预 ...

  6. AI领域3种典型的深度学习算法

    2019-11-23 10:38:48 ​深度学习(Deep Learning)是机器学习(Machine Learning)领域中一个新的研究方向,引领了第三次人工智能的浪潮. 本文整理了深度学习领 ...

  7. 深度学习算法和机器学习算法_啊哈! 4种流行的机器学习算法的片刻

    深度学习算法和机器学习算法 Most people are either in two camps: 大多数人都在两个营地中: I don't understand these machine lea ...

  8. 深度学习算法和机器学习算法_63种机器学习算法介绍

    深度学习算法和机器学习算法 Data Science and analytics are transforming businesses. It has penetrated into all dep ...

  9. 大话卷积神经网络CNN,小白也能看懂的深度学习算法教程,全程干货建议收藏!...

    来源 | 程序员管小亮 本文创作的主要目的,是对时下最火最流行的深度学习算法的基础知识做一个简介,作者看过许多教程,感觉对小白不是特别友好,尤其是在踩过好多坑之后,于是便有了写这篇文章的想法. 由于文 ...

最新文章

  1. 让Vagrant在Windwos下支持使用NFS/SMB共享文件夹从而解决目录共享IO缓慢的问题
  2. C#后台导入css和设置前台关键字和描述
  3. 一个插件让你在 Redux 中写 promise 事半功倍
  4. Python的IDE之PyCharm:PyCharm的简介、安装、入门、使用方法之详细攻略
  5. c语言编写pdf,编写并运行C语言程序.pdf
  6. 2017.8.7 GT考试 思考记录
  7. 贾跃亭:FF未来主义者们最终所要创造的社会价值 一定会得到资本市场的认可...
  8. 输入任意两个两位的自然数,输出它们完整的乘法竖式。
  9. 美团百度联合布局无人驾驶外卖;高通裁员千人;英特尔关闭可穿戴业务 | CSDN极客头条...
  10. 数学逻辑习题集(2)
  11. 五大主流云盘横评对比,百度、腾讯、115、iCloud、OneDrive哪家更值得付费?
  12. 支付宝PM告诉你,互联网产品经理的工作职责有哪些?
  13. labview与PLC通讯
  14. 【新技能get】让App像Web一样发布新版本
  15. 王者荣耀貂蝉唤灵魅影技能特效展示 唤灵魅影何时上架
  16. 1253. 将数字转换为16进制
  17. 机器学习(五)logistic回归
  18. 基于 WebRTC 的 P2P 文件传输
  19. 浪潮服务器重置密码方法
  20. 免root运行青龙面版和傻妞机器

热门文章

  1. MySQL工作笔记-使用rand生成随机数及用随机数填充记录
  2. Qt文档阅读笔记|Qt工作笔记-setupUi官方解析与实例(widgets中界面与业务分离)
  3. C++设计模式-面向对象程序设计要点以及封装性特点
  4. linux 管理工具 scrt,Linux服务器管理之终端管理软件(SecureCRT)介绍
  5. mysql ndb还原数据库_ndb_restore恢复出错
  6. n条直线相交最多有几个邻补角_【初中数学】102条做初中几何辅导线的规律
  7. android封装方法js调用方法吗,common
  8. linux centos 7定时任务添加,CentOS 7 cron服务 定时任务使用方法
  9. php int 设置超时,php如何设置超时时间
  10. restful适用于移动互联网厂商作为业务_Restful架构思想