基于博主Bubbliiiing的fast-rcnn搭建以及代码个人理解(欢迎指正)

基础模型

关于目标检测 rcnn那定然离不开残差网络 yolo也是
关于残差网络块
这里要用两个 一种是可以直接输入输入相连的identical 残差和改变通道大小进行特征压缩提取的conv残差
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

fast-rcnn用的是resetnet50的残差网络块
为什么叫resetnet50?
一共50层 但是这里实际我算出来的是53层conv2d

很简单 因为大部分全是残差网络块,并且有50层。
但是这里并不止50层

在这里插入图片描述
这里先将一下瓶颈结构 就类似一个瓶子 先压缩进去后然后提取特征 在放大,至于放多大看你的需要,所以它可以跨层连接。并且两个1x1的卷积层可以省很多参数加速计算。

然后是层的建立 这里面有个细节 也可能是代码写的层数并不是两个inception前后相对应的通道数
例如下图 上面个模块输入到下个inception是256
在这里插入图片描述

但是细心的发现下面代码中的输出通道写的而是128 ?
因为在瓶颈结构Bottleneck里面 加入了expansion
因为在Bottleneck块中,第三个卷积层的输出通道数是前两个卷积层输出通道数的4倍。这个设计是经过仔细调整和实验验证的,用来平衡模型的计算效率和表达能力。

在这里插入图片描述
但是我们在进行特征提取的时候第四层会放到roi层进行roi 但是我们前向传播还是进行 只是会分开
在这里插入图片描述

2.获得Proposal建议框

Faster-Rcnn对输入进来的图片尺寸没有固定,但是一般会把输入进来的图片短边固定成600,如输入一张1200x1800的图片,会把图片不失真的resize到600x900上。

1.首先要预定九个框(也就是每个像素要九个框然后进行卷积特征提取)
在这里插入图片描述

在这里插入图片描述
2.然后经过特征提取生成原始框图后 要进行对建议框的调整
比如位置调整,然后进行非极大值抑制。
在这里插入图片描述
这里对应原理图中的
在这里插入图片描述
首先是3x3的卷积进行后,然后进行特征分类。这个两个1x1卷积是用来判断是否有物体。
和进行建议框调整的。
18通道的1x1卷积是进行判断是否有物体
36通道是进行调整的 n_anchor就是之前说的9个先验证框。
在这里插入图片描述
9 x 4的卷积 用于预测 公用特征层上 每一个网格点上 每一个先验框的变化情况。(为什么说是变化情况呢,这是因为Faster-RCNN的预测结果需要结合先验框获得预测框,预测结果就是先验框的变化情况。)

9 x 2的卷积 用于预测 公用特征层上 每一个网格点上 每一个预测框内部是否包含了物体,序号为1的内容为包含物体的概率。

当我们输入的图片的shape是600x600x3的时候,公用特征层的shape就是38x38x1024,相当于把输入进来的图像分割成38x38的网格,然后每个网格存在9个先验框,这些先验框有不同的大小,在图像上密密麻麻。

9 x 4的卷积的结果会对这些先验框进行调整,获得一个新的框。
9 x 2的卷积会判断上述获得的新框是否包含物体。

3 对建议框解码

进行完上面的步骤后。就是decode 的环节 什么是对建议框的解码?
其实解码的过程是将这些相对坐标和尺度转换回图像坐标空间,以便在原始图像上获取实际的建议框。

其实就在这。
在这里插入图片描述
在这里插入图片描述

解码过程将这些相对坐标映射回原始图像上的绝对坐标。这可以通过对相对坐标进行逆变换来实现,通常涉及到先乘以建议框的尺寸再加上建议框的中心坐标。

在这里插入图片描述
然后根据前面的卷积得出的得分来进行框的排序然后在进行非极大值抑制。官方pytorch的nsm函数
torchvision.ops.nms(boxes, scores, threshold),scores是对应的N个候选框的得分。
第一个boxed代表boxes是一个形状为(N, 4)的张量,表示N个候选框的坐标信息
threshold是IoU的阈值,即两个框之间的IoU超过这个阈值就会触发抑制。

最后
将每个图像的候选框和索引添加到对应的列表中。
将所有图像的候选框和索引堆叠在一起,形成最终的输出。

然后是

4、对Proposal建议框加以利用(RoiPoolingConv)

也就是原理图中的
在这里插入图片描述

也就是resetnet中的第四次卷积。
事实上建议框就是对图片哪一个区域有物体存在进行初步筛选。
在这里插入图片描述

通过主干特征提取网络,我们可以获得一个公用特征层,当输入图片为600x600x3的时候,它的shape是38x38x1024,然后建议框会对这个公用特征层进行截取。

其实公用特征层里面的38x38对应着图片里的38x38个区域,38x38中的每一个点相当于这个区域内部所有特征的浓缩。

建议框会对这38x38个区域进行截取,也就是认为这些区域里存在目标,然后将截取的结果进行resize,resize到14x14x1024的大小。

然后再对每个建议框再进行Resnet原有的第五次压缩。压缩完后进行一个平均池化,再进行一个Flatten,最后分别进行一个num_classes的全连接和(num_classes)x4全连接。

在这里插入图片描述

num_classes的全连接用于对最后获得的框进行分类,(num_classes)x4全连接用于对相应的建议框进行调整。

通过这些操作,我们可以获得所有建议框的调整情况,和这个建议框调整后框内物体的类别。

对Proposal建议框加以利用的过程与shape变化如图所示:
在这里插入图片描述

然后将提取后的特征38x38也就是rois_featuire_map和它的索引链接起来形成索引和相对位置的组合。再用
rolpool进行特征截取
在这里插入图片描述
(这里就是划分成14x14的区域然后进行rolpooling操作)然后得出的结果进行特征提取后再分类。
ps-roipooling主要用于将不同尺寸的区域(RoI)映射成具有固定大小的特征图,以便输入到后续的分类器或回归器中。
在这里插入图片描述

整理执行流程在这里插入图片描述
关于训练:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值