深度学习-目标检测(四)-Faster R-CNN

目录

一.模型框架

二:步骤详细

[1.conv layers](#1.conv layers)

2.RPN

3.anchors

[4.cls layer分类](#4.cls layer分类)

[5.reg layer回归](#5.reg layer回归)

6.Proprosal

[7.Rol pooling](#7.Rol pooling)

8.Classification

三.训练

1.训练RPN网络

2.全连接层部分训练:

都看到这里了,点个赞把!!!!!


在Faster R-CNN中加入一个提取边缘的神经网络,也就说找候选框的工作也交给神经网络来做了。这样,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。

一.模型框架

如图:

1.conv layers:用于提取特征,通过conv+relu+pooling层来提取图像的feature maps (特征图)

2.RPN(Region Proposal Network)区域候选网络:替换了之前哪些的Selective Searvh,用于生成候选框。它里面做了一个二分类任务,一类是判断anchor是属于positive(识别的东西),另一类是判断是否是negative(不是目标的背景);还有一个bounding box regression:修正anchors得到较为准确的proposals,简单来说就是让候选框准确点。RPN是判断这张图片里面有没有目标,具体目标是什么这里还没判断,以及修正anchor的边框

3.Rol Pooling(兴趣域池化):简单来是就是收集RPN中选出来的候选框的坐标,一般收集左上角和右下角。并且将这些坐标对于1中提取的特征图中的特征,生成proposals feature maps送人全连接层

4.Classification and Regression:利用3中送入的数据计算出整个图片中的类别,同时再做一次bounding box regression获得检测框最终的精准位置

二:步骤详细

1.conv layers

如上图所示,共有13个conv层,13个relu层,4个pooling层

conv:kernel_size=3,padding=1,stride=1。核卷积操作类似,使用3*3的卷积核,一层零,步长为1

pooling:kernel_size=2,padding=0,stride=2。池化操作

经过conv层时数据变化为:

height=(h-k+2*p)/s+1=h-3+3,数据大小没变

width=(w-k+2*p)/s+1,数据大小没变

经过pooling时,因为步长为2,所以数据的宽高变为了之前的一办,有四个pooling,所以数据变为之前的1/16

2.RPN

图中所示,分为两个操作

1.softmax分类anchors获得positive和negative分类

2.计算对于每个anchors的bounding box regression(边框)偏移量,以获取比较精确的proposal

两步操作后在proposal结合,proposal层复杂将positive anchors和对应的bounding box regression偏移量获取修正后的proposals。同时剔除没有框住物体的和超出图片边界的proposals。

3.anchors

经过conv leyer处理后的feature map(特征图)的大小为原来的1/16,同时在这些feature map中,经过conv操作后因为设置的是kernel_size=3的映射,所以对于每一个像素点,设置了9个预测anchor。这9个anchor的大小按照三种长宽比ratio[1:1,1:2,2:1]设置,具体大小根据输入图像的原始目标大小灵活设置。

设置anchor是为了覆盖图像上各个位置各种大小的目标,那么原图上anchor的数量就是(M/16) x (N/16) x 9。这么多anchor,第一肯定不准确,第二肯定不能要这么多,所以后续还会淘汰一大批以及修正anchor位置

4.cls layer分类

在拿到conv layers的feature map后,先经过一个3x3卷积(卷积核个数为256)红色框是一个anchor,所以通过这个卷积层后feature map的通道数也是256,k是anchor个数(文中默认是9)

(M/16)x(N/16)x256的特征通过1x1卷积得到(M/16)x(N/16)x2k的输出,因为这里是二分类判断positive和negative,所以该feature map上每个点的每个anchor对应2个值,表示目标和背景的概率(为什么有2个,是因为这里是用的softmax,这两个值加起来等于1;也可以用sigmoid,就只需要1个值了)

Reshape层是技术细节问题,对feature map进行维度变换,使得有一个单独的维度为2,方便在该维度上进行softmax操作,之后再Reshape恢复原状。

5.reg layer回归

(M/16)x(N/16)x256的特征通过1x1卷积得到(M/16)x(N/16)x4k的输出,因为这里是生成每个anchor的坐标偏移量(用于修正anchor),[tx,ty,tw,th]共4个所以是4k。注意,这里输出的是坐标偏移量,不是坐标本身,要得到修正后的anchor还要用原坐标和这个偏移量运算一下才行。

偏移量计算公式

其中[xa,ya,wa,ha]是anchor的中心点坐标和宽高,[tx.ty,tw,th]是这个回归层预测的偏移量,通过这个公式计算出修正后的anchor坐标[x,y,w,h]。计算如下:

[px,py,pw,ph]表示原始anchor的坐标

[dx,dy,dw,dh]表示RPN网络预测的坐标偏移

[gx,gy,gw,gh]表示修正后的anchor坐标。

6.Proprosal

分类和偏移量计算完后,将数据输入到Proposal,输入的有三个

cls层生成的数据

reg层生成的数据

im_info=[宽,高,scale_factor]

接收数据后会进行:

1.利用reg层的偏移量对所有原始的anchor进行修改

2.利用cls层的scores,按positive socres排序,取前面分数大的

3.将太大的positive anchor收拢到边框处,将太小的剔除

4.对剩余的positive anchors进行非极大抑制(NMS)

5.输出每个positive anchors的左上角和右下角坐标

7.Rol pooling

RoI Pooling层则负责收集proposal(上一个操作输出的坐标数据),并计算出proposal feature maps(从conv layers后的feature map中扣出对应位置),输入有两个:

1.conv layers 剔除的原始特征图feature map

2.RPN网络生成的Proposals

因为全连接层的每次输入数据大小都需要是固定的,所有需要一个操作来讲这些数据的大小统一一下,,而Rol Pooling就是讲图片固定大小的

8.Classification

具体分类,这里的分类是讲前面准备好的positive anchors识别具体分类,这里就可以分辨出是背景还是具体物体了。

1.通过全连接层的softmax对所有的proposals进行具体分类

2.再次对proposals进行bounding box regression处理,获得更好的边框

三.训练

Faster RCNN由于是two-stage检测器,训练要分为两个部分进行,一个是训练RPN网络,一个是训练后面的分类网络。

1.先使用ImageNet的预训练权重初始化RPN网络的共享conv层(RPN特有层可随机初始化),然后训练RPN网络。训练完后,共享conv层和RPN特有层的权重都更新了。

2.根据训练好的RPN网络拿到proposals(和测试过程一样)

3.再次使用ImageNet的预训练权重初始化Faster RCNN网络的贡献conv层(Faster RCNN特有层随机初始化),然后训练Faster RCNN网络。训练完后,共享conv层和Faster RCNN特有层的权重都更新了

4.使用第三步训练好的共享conv层和第一步训练好的RPN特有层来初始化RPN网络,第二次训练RPN网络。但这次要把共享conv层的权重固定,训练过程中保持不变,只训练RPN特有层的权重

5.根据训练好的RPN网络拿到proposals(和测试过程一样)

6.依然使用第三步训练好的共享conv层和第三步训练好的Faster RCNN特有层来初始化Faster RCNN网络,第二次训练Faster RCNN网络。同样,固定conv层,只fine tune特有部分

1.训练RPN网络

因为使用的是softmax,所以使用交叉熵损失来训练anchors是物体还是背景

对于边框部分训练,使用smooth L1 loss训练

smooth L1 loss:

2.全连接层部分训练:

和RPN一样,都是使用softmax分类和训练边框

都看到这里了,点个赞把!!!!!

相关推荐
南宫理的日知录8 分钟前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
皓74110 分钟前
服饰电商行业知识管理的创新实践与知识中台的重要性
大数据·人工智能·科技·数据分析·零售
coberup18 分钟前
django Forbidden (403)错误解决方法
python·django·403错误
wangyue427 分钟前
c# 深度模型入门
深度学习
川石课堂软件测试40 分钟前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
985小水博一枚呀1 小时前
【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
AltmanChan1 小时前
大语言模型安全威胁
人工智能·安全·语言模型
985小水博一枚呀1 小时前
【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer·迁移学习
数据与后端架构提升之路1 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习