Mask R-CNN学习记录

工作需要,最近研究了一段时间关于目标检测方面的东西,主要还是学习了一下目标检测领域比较著名的Mask R-CNN的代码,关于网上对代码的解读过程有一大堆,所以我在这里不记录详细的代码阅读过程。我会记录一些我认为比较重要的东西,不喜欢的博友勿喷就好。

我记得,有人跟我说过,学习最快的速度就是直接阅读别人写的代码,因为这样会避免一些别人遇到过的坑,而能够使你在应用的时候知道为什么要这样做,但这不意味着书上或者其他的东西没有必要去学习,代码就像石头占据了很大的空间,但是我们还需要沙子来填补他们之间的缝隙,形成模块与模块之间的紧密连接。

对Mask R-CNN论文原文有兴趣的博友可以自行在网上找原文阅读。

接下来,我们一起来聊一聊Mask R-CNN的架构:

#################################################################

第一部分:ResNet残差神经网络

问题:随着网络深度的加深,梯度消失的现象越来越明显,网络的准确率下降,如何解决这些问题?

答案:残差网络ResNet横空出世。

ResNet就是为了解决随着网络深度的加深,出现梯度下降,准确率降低的问题。ResNet残差网络是由两种残差结构组成。残差结构又是由残差块组成,常见的残差块有两种类型,一种是3x3和3x3的两层结构,一种是1x1,3x3和1x1的三层结构,见下图:

两种结构的残差块

由上面的两种残差块可以知道,残差网络中允许原始输入直接传输到后面的输出层中,举个简单的例子,假如某个神经网络的输入是x,期望输出是H(x),如果我们直接把x传输到输出作为初始结果,那么此时我们需要学习的目标就是F(x) = H(x) - x,相当与ResNet改变了学习目标,不再是学习一个完整的输出H(x),而只是去学习输入和输出的差别H(x) - x,即残差部分。

理解了残差块的原理和结构,我们就不难理解代码中为什么要这么做了,残差网络由不带卷积的短链接(identity)和带卷积的短链接(conv)两个函数组成。主要体现在最后进行Add(x, input_tensor)的时候是否要对input_tensor再做一次卷积操作。

from tensorflow.keras import layers as KL

接下来主要说一说,残差网络中使用最多的3个API: KL.Conv2D(),KL.BatchNormalization(),KL.Activation()

卷积操作:卷积在此可以简单的理解为权重w和输入x的乘积累加和操作。

Conv2D() 参数详解:filter:过滤器的数量,可以理解为卷积输出的通道数。

                                  kernel_size: 卷积窗口的大小,一般为奇数,如1x1, 3x3, 5x5。

                                  stride:元组类型,表示在图片的宽度和高度方向移动的步长。

                                  padding:两种取值,"same"和"valid", "same"是零填充,"valid"是不需要零填充。

如果输入的是多通道的彩色图像,卷积的原理是一样的,最后需要将同一位置的不同通道计算的值加在一起即可。

卷积输出特征图的大小计算,依据如下公式:

                                       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值