Mask R-CNN instance sementation:在复现之前

本篇仅为pytorch实现前的简单感性看法

什么是instance segmentation


将图片中的个体识别,并按照instance分别给出bounding box , class ,mask(掩码,实际上就是更精细的bounding box。

庞大系统的构成

在这里插入图片描述
按照从前向后,划分成:

resnet - fpn :

fpn 即 feature pyramid network,生成多个尺度的feature map
用于多维特征提取,尚未理解和resnet有什么联系。
在这里插入图片描述
据reference,左侧部分是以resenet 为骨架,并保留conv2-conv5的输出结果在内存中。

Q: 左侧是以什么为目标进行训练的,还是整个系统的网络一起训练?

右侧:
M5通过C5 11卷积得到,(256输出通道?)
M4通过M5层最近邻上采样和conv41
1卷积加和得到。

faster rcnn

实现特征提取,proposal提取(候选bounding box 的生成),bounding box regression ,分类任务。

在这里插入图片描述

特征提取

在这里插入图片描述
小trick:
conv层设置为 kernel_size =3 ,pad =1 ,stride =1
pooling 层设置为 kernel_size =2 ,pad =0 , stride =2
使conv输入输出为<11,11>的关系,pooling层输入输出为<22,11> 的关系,最终的feature map 则可以与原图片对应。

proposal extraction

在这里插入图片描述
总流程:以每一个点为中心,生成9个candidate anchors,并将所有的anchor都经过softmax后输出positive 的分数以及negative的分数,从所有的anchor中sample出一定数量的。
3*3 conv 输出通道为256,意义不清。
上方一条线:

  1. 1*1 卷积输出通道为18,每个点对应9个anchor,每个anchor对应两个score,positive 和negative
  2. reshape操作为caffe环境下配合softmax用
  3. softmax 怎么获得对应anchor 的评分需要看代码了就

{

bounding box regression 怎么做

对于ground truth <Gx,Gy,Gw,Gh>,以及我们获得的<Ax,Ay,Aw,Ah>
我们认为,在误差较小的情况下存在<dx,dy,dw,dh>
st.


Gx = Ax * dx(A)
Gy = Ay * dy(A)
Gw = Aw * exp (dw(A))
Gh = Ah * exp (dh(A))


d即为目标函数。
}

下方一条线,输出通道数为36, 每个点对应9个anchor,每个anchor对应<dx,dy,dw,dh>

Q: 这里的训练让d函数和目标贴合怎么处理的,softmax那里的处理也不是很明晰

proposal layer

对每一个anchor,有输入positive 以及negative 的分数,d函数。
至于输出的具体格式是什么,不甚明晰。
有大概流程的reference:
在这里插入图片描述

roi pooling

 就是将选定的框映射成一个固定size的矩阵,这里也是maskrcnn主要的贡献点。

classification

在这里插入图片描述
上方利用bounding box regression 获得每个proposal的位置偏移量,获得更高精度的boundingbox。
下方利用全连接+softmax,计算每个proposal属于对应类别的概率。

训练过程是每个模块分别的,以及有pretrained module,看代码实现了

Q : 怎么把逻辑上的anchor的negative 以及positive 与网络中对应的还是一个问题。

roi align

在这里插入图片描述
考虑左下角5*7 square,roi pooling 的问题在于maxpooling 后会导致位置信息一定程度的丧失。
提出利用双线性插值进行sample的方法。
在这里插入图片描述
考虑图示 anchor (黑色线),可以预见到<x,y,w,h>都是fractional 的。我们将anchor分为fixed-size的square,每个square 内取四个点,利用双线性插值计算pixel的值,而后maxpooling。

系统整合

resnet -fpn + fast rcnn (不含rolpooling 后面的部分)

将P5经stride =2 的maxpooling 得到的p6作为输入进入fast rcnn 为使得anchor具有最大尺度。
而对应于不同尺度的proposal ,我们使用不同层级的p作为后续输入

rol pooling 以后

loss mask 采用交叉熵算法。
具体训练细节明天再看了

随便港港

刚才大概看了一下pytorch的教程,现在的搭建神经网络显然已经模块化了,明天争取把代码啃完吧,最近ddl还很多,疫情期间更需要努力,务必努力。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CTC(Connectionist Temporal Classification)分割是一种被广泛应用于序列学习任务中的分割方法。它最初被应用于语音识别领域,用于解码语音信号对应的文字序列。CTC分割的思想是将输入序列与输出序列对齐,使得输入序列上的每一个时间步都能对应一个输出标记。 在CTC分割中,输入序列被表示为一个矩阵,例如语音识别中的声学特征矩阵。输出序列是一个包含所有可能标记的序列,包括目标标记和空白标记。空白标记用于建立标记间的空隙,以便更好地适应输入序列与输出序列的对齐。 CTC分割的目标是找到最可能对应于输入序列的输出序列。这通过计算条件概率来实现,即给定输入序列的条件下,得到输出序列的概率。CTC分割使用动态规划算法来计算这一条件概率,通过对输入序列上的所有可能对齐路径求和来得到最终的输出序列概率。 CTC分割具有很好的鲁棒性,它可以处理输入序列与输出序列之间的对齐问题,即输入序列和输出序列长度不一致的情况。同时,CTC分割还可以处理同一输出序列上的多个相同标记的情况,这对于一些序列学习任务非常重要,例如语音识别中的连续重叠发音。 总的来说,CTC分割是一种有效的序列分割方法,可以被应用于多个领域的序列学习任务中,如语音识别、手写识别等。通过对输入序列与输出序列的对齐和概率计算,CTC分割能够找到最可能对应的输出序列,为序列学习任务提供了一种可靠且灵活的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值