二阶段算法:R-CNN类网络

简介: 二阶段算法:R-CNN类网络

作为基于深度学习的目标检测算法的开山之作,R-CNN由Ross Girshick在2014年首次发表,论文全名为Rich feature hierarchies for accurate object detection and semantic segmentation。在VOC2012数据集上,平均精度均值(mAP)较之前最好的模型提升30%,从此目标检测也正式进入深度学习时代。


R-CNN网络


53890e25a24e197b5895cd78d9f89b3c_ff1860bf87104a255ad8f1ca9aaa7413.png


上面的是R-CNN网络目标检测的过程图,和传统方法相似,R-CNN网络还是分了两步解决目标检测问题,第一步先做候选框提取(约2000个),然后将每个候选框中的图片输入同一个卷积神经网络进行特征提取,最终训练分类器识别物体,所以也叫做两阶段算法。


传统方法与R-CNN方法对比


方法

定位

特征提取

分类

传统方法

约束参数最小切割、滑动窗口等

HOG、SIFT、LBP、BoW、DPW等

SVM、逻辑回归

R-CNN

选择搜索

深度学习CNN

二元线性SVM

首先,后选框提取使用一种改进算法:选择性搜索,其根本思想是一个物体上的像素互相之间比较相似,所以可以把相似的像素合成一个物体。具体步骤为:首先将图像分成很多个小块,然后计算每两个相邻的区域的相似度,然后每次合并最相似的两块,直到最终只剩下一块完整的图片,这其中每次产生的图像块我们都保存下来作为候选框,此种方法比暴力窗口滑动方法速度更快,并且准确率更高。


接下来,提取特征的卷积神经网络用AlexNet网络结构,具体结构在前面已经介绍过了,输入图像尺寸统一为227x227,输出特征尺寸为2000x4096,选取2000个候选框,每个框输出4096个分类概率。


最后,训练线性SVM,权重矩阵尺寸为4096xN,输出维度N为物体的类别。


d4eda7643a3142ee5406fdce0c16dee4_c351daf67e85a834f8e34ba37558d5a3.jpeg


整个训练过程如下:


(1)、对于训练数据集中的图像,采用选择搜索方式来获取候选框,每个图像得到2000多个候选框。


(2)、准备正负样本。首先真实物体框为正样本,但是由于真实物体框很少(一般一张图片只有几个),从而会导致样本不平衡,所以还需要加入更多的正样本。如果某个候选框和当前图像上的某个物体框的IOU大于或等于0.5,则该候选框作为这个物体类别的正样本,否则作为负样本。需要注意的是,总共有N+1个类别,包括N个武器类别和一个背景类别。


(3)、对卷积神经网络进行预训练,由于标注的检测数据较少,所以采取迁移学习的方式,先利用ImageNet的数据集对网络进行预训练。


(4)、微调模型,首先将候选框选出的图像大小统一为227x227(这是因为卷积神经网络有全连接层,需要输入图像的大小固定)。然后在目标检测数据集(VOC和ILSVRC2013)进行训练,学习率调整为预训练的1/10。每个批次中有32个正样本和96个负样本。


(5)、存储第五层池化后的所有特征,并保存到磁盘,数据量大约有20GB。


(6)、训练SVM分类器,正样本为物体框,对于负样本,我们需要重新选择IOU的阈值。


(7)、在测试的时候,我们还需要使用非极大值抑制去除重复的候选框。


Fast R-CNN网络


其实在前面的介绍中,我们会发现选择算法选区的候选框有大量重叠,就产生了大量重复计算。至于解决方法嘛,就是对于输入的一整张图片,我们对于不同的候选框,在末尾层才加入候选框的位置的信息(或者说在末尾特征图上进行候选框选取)。 但是对于不同的候选框,大小也不同,我们就需要用到ROI池化层方法,对于ROI池化层,无论输入图像大小为多少,输出图像的大小都一样。其次,就是我们其实是可以去掉SVM训练器,将SVM训练器改为Softmax激活函数,直接输出每一类的概率,从而提高训练速度。然后,训练时,每个训练批次选用两张图片中的128个ROI进行训练,只需要计算两张图片的特征,大大减少计算量,从而提高速度。


最后就是修正损失函数,将分类损失和位置损失加总,并用一个参数控制两者平衡,其中分类损失使用交叉熵损失,而位置损失使用光滑L1损失。


在加入了这些改经后,Fast-CNN的训练速度和测试速度就比之前提高了很多。


(1)、和R-CNN类似,先进行候选框搜索,每张图像大约选取2000个候选框。


(2)、训练卷积神经网络,网络结构和之前类似,在最后的特征图中选择候选框对应的位置。


(3)、将特征图中选择的候选框输入ROI池化层,再经过全连接层后输出物体类别和位置回归参数,每个训练批次选择两张图片,每张图片选择64个候选框,其中25%有物体(IOU>0.5),其余为背景。数据增强使用了水平翻转。在测试的时候每张图像大约提取2000个候选框。损失函数将类别损失与位置损失相加,类别损失使用交叉熵损失,位置损失使用l1损失。


(4)、


84815d91febc0e2d0d97de9b5baecd9e_0a85a6cf283bdd1830add6b90e8c46f8.jpeg


Faster R-CNN


在R-CNN和Fast R-CNN之后,Ross B.Girshick在2016年提出了新的Faster R-CNN,主要优化还是在速度上。在Faster R-CNN,作者将特征提取、候选框生成、位置回归统一在一个神经网络中运行。


1684408040312.png


在Faster R-CNN中,候选框生成部分叫做Region Proposal Networks(RPN)。


3f9afc46ce6e306a24aaef3ebe2757f8_4f55e938acd58c86535c3b3353738b4c.jpeg


这里我们介绍一个新的概念:anchors,中文叫做预定义边框,顾名思义,是一组预设的边框,在训练时,以真实的边框相对于预设边框的便宜来生成标签。


anchor的大小如何定义?一般我们使用长宽比和尺度因子,例如长宽比为r,尺度因子为s,矩形基本面积 为s0s0,则anchor的长h,宽w。


h/s∗w/s=s0h/s∗w/s=s0
hw=rhw=r
h=ss0r−−−√,w=ss0/r−−−−√h=ss0r,w=ss0/r


在Faster R-CNN中,anchor的长宽比使用了三个值,分别为1、2、0.5,尺度因子也使用了三个值,分别为8,16,32,矩形基本面积为(16x16=)256,所以两组组合得到9个大小不同的anchor,其中面积比较大的就是512x512和724x362,比较小的是128x128和181x91.相较于原图大小(800x600),涵盖了大部分的情况。


现在来介绍一下训练过程:


(1)、将图片统一调整为800x600,这是由于现在我们anchor的大小位置固定,对于不同大小的图片稳健性变低。
(2)、通过预训练的卷积神经网络提取特征,CNN网络使用VGG16网络结构。
(3)、通过RPN网络得到候选框,训练RPN网络时,不用训练所有的anchor,而是随机选择128个正例和128个负例,IOU>0.7的anchor为正例,IOU<0.3的anchor为负例,其余不进行训练。
(4)、通过Proposal层,得到较精确的候选框,数量由17100下降300左右,正样本比例约为0.25.
(5)、从特征图上经过候选框剪裁,输入ROI池化层。
(6)、通过全连接层进行物体分类和位置回归。
(7)、最后当然还是进行非极大值抑制。
最终,Faster R-CNN比Fast -R-CNN测试速度又增加了10倍,准确率又有所增加,此为二阶段目标检测模型的巅峰。


3efcf89d1701fbc8eb82ad7222e07c31_40d8a495b05348ba92d61e739522e9a0.png

相关文章
|
13天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
167 55
|
4天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
116 80
|
23天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
129 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
22天前
|
机器学习/深度学习 人工智能 算法
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
123 30
|
9天前
|
JSON 算法 Java
Nettyの网络聊天室&扩展序列化算法
通过本文的介绍,我们详细讲解了如何使用Netty构建一个简单的网络聊天室,并扩展序列化算法以提高数据传输效率。Netty的高性能和灵活性使其成为实现各种网络应用的理想选择。希望本文能帮助您更好地理解和使用Netty进行网络编程。
28 12
|
16天前
|
机器学习/深度学习 算法 信息无障碍
基于GoogleNet深度学习网络的手语识别算法matlab仿真
本项目展示了基于GoogleNet的深度学习手语识别算法,使用Matlab2022a实现。通过卷积神经网络(CNN)识别手语手势,如&quot;How are you&quot;、&quot;I am fine&quot;、&quot;I love you&quot;等。核心在于Inception模块,通过多尺度处理和1x1卷积减少计算量,提高效率。项目附带完整代码及操作视频。
|
19天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于深度学习网络的宝石类型识别算法matlab仿真
本项目利用GoogLeNet深度学习网络进行宝石类型识别,实验包括收集多类宝石图像数据集并按7:1:2比例划分。使用Matlab2022a实现算法,提供含中文注释的完整代码及操作视频。GoogLeNet通过其独特的Inception模块,结合数据增强、学习率调整和正则化等优化手段,有效提升了宝石识别的准确性和效率。
|
26天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于贝叶斯优化CNN-GRU网络的数据分类识别算法matlab仿真
本项目展示了使用MATLAB2022a实现的贝叶斯优化、CNN和GRU算法优化效果。优化前后对比显著,完整代码附带中文注释及操作视频。贝叶斯优化适用于黑盒函数,CNN用于时间序列特征提取,GRU改进了RNN的长序列处理能力。
|
12天前
|
SQL 安全 网络安全
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
52 17
|
22天前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。