R-FCN 以及 FCN 的粗略理解

简单来说 FCN 其实就是一个网络,它里面全部都是卷积层和池化层。
那么对于,这样子的网络可以做什么呢? 我们知道CNN对于一张图片的卷积提取特征到最后 feature map 阶段其实得到的是一个高维空间中的 heatmap 图,包含了个图的语义信息,却无法代表什么。只有在全连接层后,才可以将这些语义信息整合得到分类中。
然而,为什么卷积的操作可以得到像素级别的分类。我个人认为:
卷积的操作,其实与全连接网络类似,如果你将一个卷积核设定为 1 * 1 * N 的形式去看待,就比较好相似类比。但是卷积核比全连接网络所多的信息是,它保留了空间位置信息。这就可以对于每一个空间位置上的像素做到分类。【为什么可以分类,是因为神经网络就相当于一个高度的非线性函数,它可以根据你的目标进行无限的趋向。】

上采样,跳跃结构

FCN 扩展

https://blog.csdn.net/taigw/article/details/51401448

R-FCN

这篇文章主要贡献在于解决了“分类网络的位置不敏感性”与“检测网络的位置敏感性”之间的矛盾。
这里,博主以个人理解解释一下“分类网络的位置不敏感性”与“检测网络的位置敏感性”。【论文里面,还有一些博客同样的说法是“平移不变性”和“平移可变性”】
分类网络的位置不敏感性:

像上图,我们可以看到图1的小红人和图2的小红人的位置和姿势都是不同的。但是在分类网络中,我们通过多层卷积可以提取到其高层的语义信息,最后能够得到两张图都能知道图中有这个小红人。

检测网络的位置敏感性:

可以看到上面对于,检测网络来说,如果当红色小人进行平行移动之后,同样标记人的框的位置信息就不再能获取到全部人的信息。所以对于检测网络来说,物体的空间信息非常的重要。

ROI 层前置的方式 【能解决一定平移可变性 ,但增大了计算量】

我们知道之前在ROI之前的层,大家是共享卷积计算的(这句话怎么理解呢)。简单来说,就是对于进来的一张图片,我们就做了一次卷积操作,之后所有的计算都是直接从这张特征图里面进行抽取,这就是共享计算。(一般来说这个值会被存放到内存当中被反复的调用)。但是 过了ROI层之后,我们会有多个proposal,之后我们的卷积核就需要对每一个proposal都要进行计算,这里的计算是不共享的,所以计算量会增大。

所以,在论文中,作者把所有的卷积操作都放到了 ROI 层之前。

Position-sensitive score map

如果我们单单把所有的卷积层都简单的移到前头,那其实就是简单的获得了一个feature map,其实意义上并不是很大。作者在这里又进行了一些骚操作,它首先利用FCN的思想,对原来出来的feature map 进行了降维,得到一个原图的分类的 heatmap。【论文中是,先通过一个 111024的卷积来进行降维,然后用一个 KK(C+1) {这里 C 是分类的总类别} ,其实就相当于是我们在这里用FCN对每一个像素点进行了分类】

R-FCN 框架

之后,根据每个区域位置的概率值,对每个类再进行一次卷积或是池化操作,到 11 (C+1)的操作。【这里的区域位置概率值,我是这样理解的,相当于是每一个区域对于 Ground Truth 的特征图都会有一个重叠区域内容信息,这个重合度多少就是一个 Ground Truth的概率值,然后将所有的 K*K 的信息进行加权就可以得到全的信息】

【参考资料】
【1】https://zhuanlan.zhihu.com/p/22976342
【2】https://blog.csdn.net/taigw/article/details/51401448
【3】https://blog.csdn.net/scutjy2015/article/details/74971060
【4】https://github.com/vdumoulin/conv_arithmetic (反卷积)
【5】https://blog.csdn.net/qq_36269513/article/details/80420363 (跳跃结构)
【6】https://www.jianshu.com/p/409fd61db9db 【好文章】
【7】http://www.cnblogs.com/gujianhan/p/6030639.html【FCN的内容】
【8】https://blog.csdn.net/qq_36269513/article/details/80420363【FCN的训练过程】

你可能感兴趣的:(R-FCN 以及 FCN 的粗略理解)