深度学习基础介绍(收集)

1. 深度学习的起源及其发展—详细介绍

感知机------->多层感知机------->BP算法—神经网络的崛起------->2006年 深度学习

此后,逐渐发展起来的有CNN(卷积神经网络),RNN(循环神经网络),递归神经网络,LSTM长短时记忆,增强学习(Q-learning)等算法推动了深度学习的急速的发展.

目前,深度学习主要运用于以下几个方面:

  1. NLP(自然语言处理)
    自然语言处理包括多个方面:
    ① 语音识别,语音合成自动分词,句法分析,语法纠错,关键词提取,文本分类/聚类,文本自动摘要,信息检索(ES,Solr)
    ② 知识图谱,机器翻译,人机对话,机器写作
    ③ 推荐系统,高考机器人
    ④ 信息抽取,网络爬虫,情感分析,问答系统
  2. 图像方面的应用
    ① 大规模(大数据量)图片识别(聚类/分类),如人脸识别,车牌识别,OCR等
    ② 以图搜图,图像分割
    ③ 目标检测,如自动驾驶的行人检测,安防系统的异常人群检测
  3. 常见的机器学习领域的应用(分类,回归,聚类算法等)

2 深度学习之BP算法—详细介绍

神经网络主要是由三个部分组成的,分别是:1) 网络架构 2) 激活函数 3) 找出最优权重值的参数学习算法.

BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络。

既然我们无法直接得到隐层的权值,能否先通过输出层得到输出结果和期望输出的误差来间接调整隐层的权值呢?BP算法就是采用这样的思想设计出来的算法,它的基本思想:学习过程由信号的正向传播(求损失)与误差的反向传播(误差回传)两个过程组成。

根据BP算法的基本思想,可以得到BP算法的一般过程:

  1. 正向传播FP(求损失).在这个过程中,我们根据输入的样本,给定的初始化权重值W和偏置项的值b, 计算最终输出值以及输出值与实际值之间的损失值.如果损失值不在给定的范围内则进行反向传播的过程; 否则停止W,b的更新.

  2. 反向传播BP(回传误差) .将输出以某种形式通过隐层向输入层逐层反传,并将误差分摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。

由于BP算法是通过传递误差值δ进行更新求解权重值W和偏置项的值b, 所以BP算法也常常被叫做δ算法.


3. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(一)—详细介绍

前面, 我们介绍了DNN及其参数求解的方法(BP算法),我们知道了DNN仍然存在很多的问题,其中最主要的就是BP求解可能造成的梯度消失和梯度爆炸的问题 .那么,人们又是怎么解决这个问题的呢?本节的卷积神经网络(Convolutional Neural Networks, CNN)就是一种解决方法.

我们知道神经网络主要有三个部分组成, 分别为:
① 网络结构— 描述神经元的层次与连接神经元的结构.
激活函数(激励函数)— 用于加入非线性的因素, 解决线性模型所不能解决的问题.
③ 参数学习方法的选择(一般为权重值W和偏置项b)—如BP算法等.

CNN在以下几个领域均有不同程度的应用:
① 图像处理领域(最主要运用领域)— 图像识别和物体识别,图像标注,图像主题生成,图像内容生成,物体标注等。
② 视频处理领域— 视频分类,视频标准,视频预测等
③ 自然语言处理(NLP)领域— 对话生成,文本生成,机器翻译等
④ 其它方面— 机器人控制,游戏,参数控制等

CNN的网络结构和传统神经网络结构异同点有:

  1. CNN主要有数据输入层, 卷积层, RELU激励层, 池化层, 全连接层, Batch Normalization Layer(不一定存在). 传统神经网络主要有数据输入层, 一个或多个隐层以及数据输出层. 比较可以发现CNN仍然使用传统神经网络的层级结构.
  2. CNN的每一层都具有不同的功能, 而传统神经网络每一层都是对上一层特征进行线性回归, 再进行非线性变换的操作.
  3. CNN使用RELU作为激活函数(激励函数) , 传统神经网络使用sigmoid函数作为激活函数.
  4. CNN的池化层实现数据降维的作用,提取数据的高频信息.传统神经网络没有这个作用.

2.2.3RELU激励层
这一层就是激活层, 在CNN中一般使用RELU函数作为激活函数.它的作用主要是将卷积层的输出结果做非线性映射.

  1. 常见的几种激活函数
    ① sigmoid函数(S函数)
    ② Tanh函数(2S函数)
    ③ RELU函数 ----> 线性修正单元 —> max{ 0, x } ==>无边界, 易出现’死神经元’
    ④ Leaky ReLU 函数 —> 若x> 0 , 则输出x ; 若x<0,则 alphax, 其中 0< alpha <1 ==> 对RELU的改进
    ⑤ ELU 函数 —> 若x> 0 , 则输出x ; 若x<0,则 alpha
    (e^x - 1), 其中 0< alpha <1 ==> 也是一种对RELU的改进
    ⑥ Maxout函数 —> 相当于增加了一个激活层
  2. 激活函数的一些建议
    ① 一般不要使用sigmoid函数作为CNN的激活函数.如果用可以在FC层使用.
    ② 优先选择RELU作为激活函数
    ③ 如果2失效,请用Leaky ReLU或者Maxout
    ④ 在极少的情况下, tanh也是有不错的效果的

2.2.4 池化层 (Poling Layer)
池化层主要用于压缩数据和参数量, 减小过拟合。简而言之,如果输入是图像的话,那么池化层的最主要作用就是压缩图像
池化层中的数据压缩的策略主要有:
① Max Pooling(最大池化)—> 选择每个小窗口中最大值作为需要的特征像素点(省略掉不重要的特征像素点)
② Average Pooling(平均池化) —> 选择每个小窗口中平均值作为需要的特征像素点
池化层选择较为重要的特征点, 可以降低维度, 能够在一定程度上防止过拟合的发生.

2.2.5 FC全连接层
通过全连接结构,将前面输出的特征重新组合成一张完整的图像.

2.2.6 Batch Normalization Layer(一般用于卷积层后面,主要是使得期望结果服从高斯分布,使用较少!!)

最后, 简单总结下CNN的优缺点.
优点:
① 使用局部感知和参数共享机制, 对于较大的数据集处理能力较高.
② 能够提取图像的深层次的信息,模型表达效果好.
③ 不需要手动进行特征选择, 只要训练好卷积核W和偏置项b, 即可得到特征值.
缺点:
需要进行调参, 模型训练时间较长, 需要的样本较多, 一般建议使用GPU进行模型训练.
② 物理含义不明, 每层中的结果无法解释, 这也是神经网络的共有的缺点.


3. 深度学习之卷积神经网络(Convolutional Neural Networks, CNN)(二)—详细介绍

经典的CNN模型简述
1)LeNet(经典的CNN,最早用于数字识别的CNN算法)—具体的网络结构如图所示
2) AlexNet(2012年ILSVRC比赛冠军,远超第二名的CNN,比LeNet更深,用多层小卷积叠加来替换单个的大卷积 )
3)ZFNet(2013年ILSVRC比赛冠军)
4) GoogleNet(2014年比赛冠军,层数较深, 运行时间较长)
5) VGGNet(2014年比赛模型, 效果比GooleNet略差, 但是实际运用较多)
6) ResNet(2015ILSVRC冠军,结构修正以适应更深层次的CNN训练)


4. 深度学习之RNN(循环神经网络)—详细介绍
  1. BP算法,CNN之后, 为什么还有RNN?
    细想BP算法,CNN(卷积神经网络)我们会发现, 他们的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响, 比如简单的猫,狗,手写数字等单个物体的识别具有较好的效果. 但是, 对于一些与时间先后有关的, 比如视频的下一时刻的预测,文档前后文内容的预测等, 这些算法的表现就不尽如人意了.因此, RNN就应运而生了.

  2. 什么是RNN?
    RNN是一种特殊的神经网络结构, 它是根据"人的认知是基于过往的经验和记忆"这一观点提出的. 它与DNN,CNN不同的是: 它不仅考虑前一时刻的输入,而且赋予了网络对前面的内容的一种’记忆’功能.
    RNN之所以称为循环神经网路,即一个序列当前的输出与前面的输出也有关。具体的表现形式为网络会对前面的信息进行记忆并应用于当前输出的计算中,即隐藏层之间的节点不再无连接而是有连接的,并且隐藏层的输入不仅包括输入层的输出还包括上一时刻隐藏层的输出。

  3. RNN的主要应用领域有哪些呢?
    RNN的应用领域有很多, 可以说只要考虑时间先后顺序的问题都可以使用RNN来解决.这里主要说一下几个常见的应用领域:
    ① 自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理
    ② 机器翻译, 机器写小说
    ③ 语音识别
    ④ 图像描述生成
    ⑤ 文本相似度计算
    ⑥ 音乐推荐、网易考拉商品推荐、Youtube视频推荐等新的应用领域.


'''
    TensorFlow中的RNN的API主要包括以下两个路径:
        1) tf.nn.rnn_cell(主要定义RNN的几种常见的cell)
        2) tf.nn(RNN中的辅助操作)
'''
# 一 RNN中的cell
# 基类(最顶级的父类): tf.nn.rnn_cell.RNNCell()
# 最基础的RNN的实现: tf.nn.rnn_cell.BasicRNNCell()
# 简单的LSTM cell实现: tf.nn.rnn_cell.BasicLSTMCell()
# 最常用的LSTM实现: tf.nn.rnn_cell.LSTMCell()
# RGU cell实现: tf.nn.rnn_cell.GRUCell()
# 多层RNN结构网络的实现: tf.nn.rnn_cell.MultiRNNCell()
 
# 创建cell
# cell = tf.nn.rnn_cell.BasicRNNCell(num_units=128)
# print(cell.state_size)
# print(cell.output_size)



5. 深度学习之目标检测与目标识别—详细介绍

目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类
① 基于区域建议的目标检测与识别算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;
② 基于回归的目标检测与识别算法,如YOLO, SSD;
③ 基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法.

目前, 目标识别主要有以下几个应用场景:
① 安全领域:指纹识别、人脸识别等,代表项目如Face++、依图科技、深醒科技等。
② 军事领域:地形勘察、飞行物识别等,代表项目全悉科技。
③ 交通领域:车牌号识别、无人驾驶、交通标志识别等,代表项目纵目科技、TuSimple(图森科技)、驭势科技等。
④ 医疗领域:心电图、B超、健康管理、营养学等,代表项目智影医疗、图玛深维等。
⑤ 生活领域:智能家居、购物、智能测肤等,代表项目Yi+、木薯科技、肌秘等。


6. 基于深度学的目标检测方法三之基于回归的方法(一)—详细介绍

之前学习的RCNN系列的目标检测算法都是先提取出候选区域,然后利用分类器识别这些区域,并对候选区域进行位置修正。这类方法流程复杂,存在着速度慢、训练困难等缺点。

YOLO算法将检测问题看做是回归问题,采用单个神经网络,利用整个图像的信息来预测目标的边框、识别目标的类别,实现端到端的目标检测,如图所示。YOLO相比于之前的算法有如下优点:

1)非常快。YOLO的流程简单,速度很快,可以实现实时检测

2)YOLO采用全图信息进行预测。与滑动窗口、region proposals不同,YOLO在训练、预测过程中利用全图信息。Fast R-CNN方法错误地将背景块检测为目标,原因在于Fast R-CNN方法在检测时无法看到全局图像。相比于Fast R-CNN,YOLO可以将背景预测错误率降低一半

3)YOLO可以学习到目标的概括信息。我们采用自然图像训练YOLO,然后采用艺术图像来预测,YOLO比其他目标检测算法的准确率高很多。

6. 基于深度学的目标检测方法三之基于回归的方法(二)—详细介绍

基于回归的方式就是彻底的去掉了region思想,也不使用RPN,直接在一个网络中进行回归和分类。其代表的方法主要有YOLO和SSD。由于减少了一个网络同时可以减少一些重复的计算,所以其在速度上有了较大的提升。

YOLO优缺点

(1):速度快,其增强版在Tian X GPU上能跑到45fps,简化版能达到155fps。

(2):对靠的比较近的物体以及小物体效果不好,因为默认的每一个格子只检测一个物体。

(3):由于格子是方正的,所对于一些不常见的形状泛化能力较差。

YOLOV2(YOLO9000)
YOLOV2主要是在YOLO上进行了大规模的改进,提高了MAP值,保证了速度,是目前在速度方面做得最好的模型。其具体改进方面如下:

(1):过拟合方面:去掉了dropout层,根据inception net的思想选择了Bath Normalization在每一层的输入进行归一化,使输入的数据有相同的分布,加速学习的效率也避免过拟合。

(2):改变模型的输入:目前对于一些常见的模型均是在ImageNet上进行预训练,然后在新的数据集上进行微调的,对于YOLOV1来说存在一个问题就是ImageNet使用的是224X224的分辨率作为输入,但是低分辨率不利于检测,所以训练检测模型时直接以448X448作为基础,这样直接使用预训练的分辨率迁移就会导致网络对新分辨率的适应性变差,因此YOLOV2在ImageNet上训练分类模型时添加了把448X448转化为224X224的微调部分,使其在输入的时候直接适应高分辨率,这样整个模型的MAP提高了约4%。

(3):使用锚点(anchor boxes):在YOLOV1中,由于输出的图片被划分成了7X7的格子,每个格子使用了2个边框,最后采用全连接的方式直接对边界框进行预测。由于在选取的时候是根据具体图片的宽和高进行的,因此对于图片中的不同宽度比和不同高度比的物体定位较为困难。YOLOV2采用Faster R-CNN中的anchor的思想,对特征图中的每个锚点进行预测,预测的预选框形状是事先预测好的,然后对每一个框预测4个坐标值,一个置信度和个类别数(和Faster不一样,这是直接基于预选框做预测)。在模型的输入上,使用416X416的输入经过32倍下采样之后变成13X13的奇数大小,因为奇数大小在划分格子的时候整个图只有一个中心区域,对于一副图中,大的对象一般会占据图像的中心,所以希望用一个区域预测。相对于YOLOV1此时的Box盒子反而变多。

(4):候选框大小:YOLOV2采用对数据集进行聚类的方式,找出对应的5个先验框作为预测过程中的anchor方法采用的框。

(5):添加passthrough层:即将低层大区域特征转化成小区域和高层小区域融合以达到特征融合的目的解决小目标问题。

(6):多尺度训练,由于YOLOV2去掉了全连接层,因此同一个网络可以对不同的输入尺寸进行训练。增强了模型的鲁棒性,当然改变尺寸也就意味着要对模型输出后的检测层进行修改。

(7):使用新的Darknet-19网络结构。

YOLOV3
YOLOV3更多的是一种总结性的东西,其主要是在YOLOV2的基础上有以下几方面的改进:

(1):改变预测函数,使用逻辑回归预测即将softmax改为sigmoid。主要是有的物品也许不属于一类。比如woman即属于woman也属于man。

(2):改变网络结构:加入残差的思想以加深网络的构造,将网络扩深为Darknet-53。

(3):采用FPN的思想,多个尺度相融合来进行预测。

SSD
SSD是一种采用高低尺度相结合的策略,基于回归的一种模型,在实现上采用VGG16网络为基础。去掉最后的全连接层改成卷积层,增加4个卷积层来构造网络结构。然后结合前面部分高纬度的网络结构,总共挑选出5个卷积层分别使用3X3的卷积计算,然后并行生成两个分支,一个是用来分类的,一个是用来预测边框的。最后在将所有的分支在通道上进行拼接(类似于inception),最终利用softmax进行分类。


7. 目标检测算法总结—详细介绍

2 基于Region Proposal的 two stage检测算法
2.1 R-CNN
R-CNN算法是Region Proposal + CNN这一框架的开山之作,为以后基于CNN的检测算法奠定了基础。该算法首先采用Selective Search算法,对一张多目标图像进行分割和聚类,得到大量的目标候选框,然后将候选框裁剪、放缩至统一尺寸,再使用卷积网络对候选框进行特征提取,提取到的CNN特征输入到每一类的SVM进行分类,判别是否属于该类,最后还要进行边界框的回归,即用线性回归微调边界框的位置和大小[1]。R-CNN的主要缺点是重复计算,需要对每个候选框都进行特征提取,因此计算量很大,时间消耗多。而且,全连接层需要保证输入的候选框大小统一,所以网络输入的一系列图片需要裁剪和放缩至统一尺寸,这样可能导致图像畸变,影响检测效果,下面的SPP-net[2]算法为这些问题提供了解决思路。

2.2 SPP-net
为了解决R-CNN中对候选框进行裁剪、缩放从而影响检测效果的问题,何凯明提出了SPP-Net,即不进行裁剪、缩放,并且在R-CNN最后一个卷积层后,接入了金字塔池化层( spatial Pyramid Pooling, SPP),使用这种方式,可以让网络输入任意的图片,而且还会生成固定大小的输出[2]。还有一点,SPP-Net是把整张待检测的图片,输入CNN中,进行一次性特征提取,得到feature maps,然后在feature maps中找到各个候选框对应的区域,再对各个候选框采用金字塔空间池化,提取出固定长度的特征向量,所以,检测速度也会大大提升。

2.3 Fast R-CNN
首先,该算法借鉴了SPP-net中金字塔池化的思想,对每个候选框所对应的feature map经过一个ROI pooling layer 形成一个固定长度的feature map,可以说是属于简化版的金字塔池化(SPP)。其次,采用了多任务训练的模式,将回归也加入到网络中,使分类和回归同时进行训练,减少硬件缓存,并且用soft-max替代SVM进行分类[3]。但该算法仍然使用Selective Search方法进行候选框的提取,复杂耗时。

2.4 Faster R-CNN
Faster R-CNN可以简单地看作“区域生成网络RPNs + Fast R-CNN”的系统,该算法最大的创新就是提出了“区域生成网络(RPN)”,用其代替Fast R-CNN中的Selective Search方法进行候选框提取[4]。RPN的核心思想是使用卷积神经网络直接产生Region Proposal,本质就是滑动窗口。其次,使用四步交替训练法进行RPN和Fast R-CNN的训练,RPN与Fast-R-CNN共享卷积层,使提取候选框的成本降为零。

2.5 Cascade R-CNN
该算法是针对的是检测问题中的IoU阈值选取问题[12]。在classification中,每个proposal会根据一个指定的IoU值判断为正样本或负样本,在bounding-box regression中,每个被标记为正样本的bounding-box会向其ground-truth方向回归。阈值选取越高确实越容易得到高质量的样本,但是一味选取高阈值会引发两个问题,一是正样本数量减少引发的过拟合,二是在训练和测试使用不一样的阈值很容易导致错误匹配,为了解决这些问题,作者提出了Cascade R-CNN stages,用一个stage的输出去训练下一个stage,并且每个stage选用不同的阈值。这样可以保证每一级的header都可以得到足够多的正样本,且正样本的质量可以逐级提升。在训练和测试时,这个操作也都保持一致。在测试中,使用多个header输出的均值作为这个proposal最终的分数,这样检测性能会有进一步的提升。表1中为Cascade R-CNN与其他算法的性能比较[12]。

表1 Cascade R-CNN与其他算法在COCO数据集上的性能比较
在这里插入图片描述
3 基于回归问题的one stage检测算法
3.1 YOLOv1
Redmon等人提出的YOLO算法,是将目标检测作为一个回归问题来解决,输入含多个目标的原始图像,便能得到其中物体的位置边框和其所属的类别及其相应的置信度[6]。YOLO基于Google-Net图像分类模型,是一个可以一次性预测多个位置和类别的卷积神经网络,真正意义上实现了端到端的目标检测,检测速度快,但精度相比Faster R-CNN略有下降。

3.2 YOLOv2&YOLO9000
YOLO的第二个版本YOLOv2,在v1的基础上做了很多的优化。YOLOv1在准确度,速度,容错率上都有所欠缺,作者采用了一系列的方法优化了YOLOv1的模型结构,产生了YOLOv2[7]。首先,作者在所有卷积层应用了Batch Normalization,Batch Normalization可以提高模型收敛速度,减少过拟合,使map提升了2%;其次,YOLOv1接受图像尺寸为224×224, 在YOLOv2中,作者采用448×448分辨率的ImageNet数据微调使网络适应高分辨率输入,高分辨率输入使结果提升了4%的mAP;除此之外,去掉了YOLO的全连接层,采用固定框(anchor boxes)来预测bounding boxes,去除了一个pooling层来提高卷积层输出分辨率,修改网络输入尺寸,由448×448改为416×416,使得特征图只有一个中心,虽然略降低了map,却大大提升了召回率;作者还使用多尺度训练,使模型对不同尺寸的图像具有鲁棒性。表2中列举了YOLOv2和其他检测框架在PASCAL VOC 2007上的测试性能,可以看出,在高分辨率下,YOLOv2在VOC 2007上具有78.6的 mAP,仍然可以达到实时检测[7]。
YOLO9000通过结合分类和检测数据集,使得训练得到的模型可以检测约9000类物体,网络结构和YOLOv2类似,区别是每个单元格只有3个Anchor Boxes。作者采用word-tree的方法,综合ImageNet数据集和COCO数据集训练YOLO9000,使之可以实时检测超过9000种物品[7]。

表2 各检测框架在PASCAL VOC 2007上的测试性能比较
在这里插入图片描述
3.3 SSD
SSD算法可直接预测目标的坐标和类别,没有生成候选框的过程。网络直接在VGG16网络的基础上进行修改得到。SSD首先使用2个卷积层替换VGG16网络的最后2个全连接层,然后在VGG网络的后面增加4个卷积层[5]。为了检测目标,SSD分别使用两个卷积核为3×3的卷积层对其中5个卷积层的输出进行卷积。其中一个卷积层输出类别作为类别预测结果,另一个卷积层输出包含回归时的目标位置作为位置预测结果[5]。SSD的核心是结合回归思想使用一系列检测器来预测目标的类别和位置。主要从两个方面实现快速高检测精度的目标检测效果,一是对不同尺寸的卷积层输出进行回归,二是通过增加检测器的宽高比来检测不同形状的目标。

3.4 RetinaNet
Two-stage的检测器精度高,速度慢;One-stage的检测器速度快,精度低。作者希望one-stage detector可以达到two-stage detector的准确率,同时不影响原有的速度[13]。论文找出了One-stage检测器精度低的原因,并提出了解决办法。One-stage检测器精度低,究其原因,就是正负样本不均衡,只有少数样本包含目标物体,绝大多数样本都是背景。负样本多是容易分类的,其数量过多,占总loss的大部分,这样会掩盖那些少数真正含有目标信息的正样本,模型的优化方向会向占loss比重大的方向更新,这并不是我们所希望的。作者提出一种新的损失函数focal loss,降低易分类样本的权重,使模型的更新方向向少量有用样本的方向靠拢[13]。其检测性能见表1。
3.5 Refine-Det
Refine-Det方法,同行继承了two-stage和one-stage两者的优点。网络结构由两个模块构成,一个是anchor细化模块(ARM),另一个是目标检测模块(ODM)。ARM模块用来减小分类器的搜索空间,粗略地描述anchor的位置和大小。通过连接模块(TCB)将ARM中的特征传输给ODM模块,以获取更加准确的目标位置和大小[9]。简单地说,就是将原来two-stage的串行结构转化成了并行。RefineDet与其他算法在VOC数据集上的性能测试见表3[9]。

表3 RefineDet与其他算法在VOC数据集上的性能测试
在这里插入图片描述
3.6 YOLOv3
相对于YOLO v2,YOLOv3的检测精度大大提升,而检测速度并没有下降。改进的地方有:v3替换了v2的soft-max loss,改成了logistic loss;v2作者用了5个anchor,v3用了9个anchor,提高了IOU;其次,YOLO v3采用上采样和融合的做法,使用检测层在三种不同尺寸的特征图上进行检测,分别具有stride=32,16,8,这意味着,在输入416 x 416的情况下,我们使用13 x 13,26 x 26和52 x 52的比例进行检测,即融合了3个尺度(1313、2626和52*52),在多个尺度的融合特征图上分别独立做检测,对小目标的检测效果明显提升;最后,由于卷积层数量明显增多,v2的darknet-19变成了v3的darknet-53[8]。表4中列出了YOLOv3和其他一些算法比较的mAP值和运行时间,可以看出,YOLOv3运行速度明显比其他算法快很多[8]。

表4 YOLOv3与其他检测框架在COCO数据集上的测试性能比较
在这里插入图片描述
3.7 Relation Networks
该算法引入了物体之间的关联信息,在神经网络中对物体间的relation进行建模。提出了一种relation module,可以在以往常见的物体特征中融合进物体之间的关联性信息,同时不改变特征的维数,能很好地嵌入目前各种检测框架,提高性能[10]。同时,提出了一种特别的代替NMS的去重模块,可以避免NMS需要手动设置参数的问题[10]。
3.8 RFB-Net
RFB-Net检测器利用多尺度one-stage检测框架SSD,在其中嵌入RFB模块,使得轻量级主干SSD网络也能更快更准[11]。原始SSD,基础主干网络后面接一系列重叠的卷积层,得到一系列空间分辨率减小而感受野增大的特征图。RFB-Net保持了这种结构,并做了些改进,用RFB模块替换了原来的L2归一化,从前面卷积层获取包含小目标的底层特征图[11]。RFB-Net与各算法性能比较见表5[11]。

表5 RFB-Net与各算法在VOC2007数据集上的性能比较
在这里插入图片描述
4 总结和展望
本文详细对基于深度学习的目标检测算法进行了较为全面的梳理,总结了各算法相比于先前算法的改进策略,及其本身的创新点及不足之处,对于目标检测领域的研究人员具有重要的参考价值。
目标检测应用范围非常广,例如,在行人检测、车辆检测、卫星遥感对地监测、无人驾驶、交通安全等领域。目前,基于深度学习的目标检测已经取得了很多重要成果,但同时也面临着诸多挑战,例如目标背景的多样性,动态场景的不断变化,对检测系统时效性和稳定性的要求也在逐渐提高。无论是在检测算法方面,还是硬件加速方面,目标检测都存在着许多难点和挑战,等待着我们去进一步突破。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值