精华内容
下载资源
问答
  • 语义分割之FCN网络详解 全卷积网络
    千次阅读
    2022-04-19 14:32:49

    1. FCN网络结构图

    原论文链接:https://paperswithcode.com/paper/fully-convolutional-networks-for-semantic
    参考B站视频:https://www.bilibili.com/video/BV1J3411C7zd/?spm_id_from=333.788
    image-20220418210631584

    简介:Backbone用的是VGG16(pytorch实现用的是Resnet),将原来的卷积网络的最后两层(全连接和池化)去掉,替换为1X1的卷积和转置卷积。在原来的分类网络中,全连接层的大小限制了图像的输入,因为全连接层的需要固定输入和输出,而卷积层不需要,所以考虑将全连接转换为卷积。

    通道数为21,每个通道上的值是一个概率,每个像素的预测类别分别取21个通道上概率值最大的那个类别。

    转换之后就变成了这样:卷积层 + 1X1卷积 + 转置卷积

    论文中给出的三个模型:FCN-32s,FCN-16s,FCN-8s

    给出VGG16模型作为上图参考

    2. FCN-32s

    原论文中设置了backbone的第一个卷积层处设置了padding=100,是为了适应不同大小的输入图像,如果不设置padding,那么当输入图片大小小于192X192,则在下图中7X7的卷积核处做卷积时会报错,因为此时经过下采样后图像大小已经小于7X7了,无法进行卷积操作。同时,如果输入图像小于32X32,那在backbone中就已经报错了。但是在实际使用时,很少有人会对小于32X32的图像做语义分割(因为本来就是对像素分割,你这么低分辨率的图像那分割出来岂不是很丑)。所以这个padding100可以不用设置,根据自己的需求来做。

    在VGG16去掉最后两层的基础上,在FC6的卷积层出加上padding=3,使用4096个卷积核,输出图像大小不变;再经过FC7输出图像大小和通道数未发生改变;然后经过一个1X1大小的卷积,通道数是num_class,即分类的类别;最后再经过一个转置卷积层(上采样),将图像放大32倍后,使用双线性插值的参数来初始化转置卷积的参数,所以最终的输出和原图大小一样,最后用softmax对一个像素的num_class个类别做处理,就可以得到最终的预测类别。

    注:原论文中直接将转置卷积层的权重冻结了,相当于直接为双线性插值的参数,因为冻结和不冻结结果没什么差别,所以冻结了还可以不用训练权重。可能是因为上采样率太大,上采样32倍,效果不是很好,所以这个转置卷积层好像用处不大。

    image-20220418214102452

    3. FCN-16s

    和FCN32s的区别在于融合了一次底层特征图信息,经过FC7后先做一次转置卷积,上采样是2倍,然后将BackBone中MaxPool4(下采样16倍,在Backbone中的特征图)的特征图相加后在经过一轮上采样为16倍的转置卷积,得到最终结果。

    image-20220418221554278

    4. FCN-8s

    和FCN-16s的区别在于融合了两次底层特征图信息,经过FCN-16s的中的两部分特征图相加后,再做一次上采样2倍的转置卷积,再加上来自Backbone中MaxPool3(下采样8倍),然后再经过上采样8倍的转置卷积,得到最终结果。

    image-20220418222854688

    5. 膨胀卷积

    如图所示,也叫空洞卷积,和普通卷积的区别在于增加了一个膨胀因子r,也就是每两个卷积参数之间的距离,当r=1时,膨胀卷积和普通卷积之间并无区别。

    • 作用:

      • 增大感受野,从图中可以很明显看出来,在相同3X3卷积核参数的情况下,感受野是5X5。
      • 可以保持原输入特征图的宽和高不变。

      在VGG16中使用池化来增大感受野,但是池化层会导致原图的特征丢失,并且输出特征图大小也发生了改变。如果去掉池化层就会使感受野变小,所以可以考虑使用膨胀卷积。
      在这里插入图片描述
      gridding effect问题,关于膨胀卷积使用不当引起的问题及解决可以阅读论文:“Understanding Convolution for Semantic Segmentatio” https://arxiv.org/pdf/1702.08502v3.pdf 有时间再补充这部分的内容
      未完待续……

    更多相关内容
  • FCN网络实现(pytorch)

    2020-09-07 15:14:45
    FCN网络实现(pytorch),需要torchvison的VGG预训练模型,输出经过nn.logsoftmax处理后,使用nn.NLLLoss()损失函数。
  • FCN网络结构图.zip

    2019-12-06 18:00:01
    基于PASCAL的FCN网络结构图,使用Caffe深度学习框架绘制,内容为FCN8s.png,FCN16s.png,FCN32s.png
  • fcn模型的搭建代码,可以根据这个代码实现fcn的搭建以及训练,测试
  • FCN网络解析

    千次阅读 2022-04-12 00:00:53
    1 FCN网络介绍 FCN(Fully Convolutional Networks,全卷积网络) 用于图像语义分割,它是首个端对端的针对像素级预测的全卷积网络,自从该网络提出后,就成为语义分割的基本框架,后续算法基本都是在该网络框架中...

    1 FCN网络介绍

    FCN(Fully Convolutional Networks,全卷积网络) 用于图像语义分割,它是首个端对端的针对像素级预测的全卷积网络,自从该网络提出后,就成为语义分割的基本框架,后续算法基本都是在该网络框架中改进而来。

    对于一般的分类CNN网络,如VGG和Resnet,都会在网络的最后加入一些全连接层,经过softmax后就可以获得类别概率信息。
    在这里插入图片描述
    但是这个概率只能标识整个图片的类别,不能标识每个像素点的类别,所以这种全连接方法不适用于图像分割。

    FCN对图像进行像素级的分类,与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。下图是用于语义分割所采用的全卷积网络(FCN)的结构示意图:

    在下图中,输入图像经过卷积和池化之后,得到的 feature map 宽高相对原图缩小了32倍,提取特征之后"特征长方体"的宽高为原图像的 1/32,为了得到与原图大小一致的输出结果,需要对其进行上采样(upsampling),(图中最终输出的"厚度"是 21,因为类别数是 21,每一层可以看做是原图像中的每个像素属于某类别的概率)。
    在这里插入图片描述
    简单的来说,FCN与CNN的区别在于把于FCN将CNN最后的全连接层换成卷积层,然后再进行上采样,得到与与输入大小相同的图像,然后使用softmax获得每个像素点的分类信息,从而解决了分割问题,如下图所示:

    在这里插入图片描述

    2 网络结构

    FCN是一个端到端,像素对像素的全卷积网络,用于进行图像的语义分割。整体的网络结构分为两个部分:全卷积部分和上采样部分。

    下面我们以backbone为vgg16的FCN为例进行讲解,所以在讲解FCN之前,我们先回顾一下vgg16的结构:
    在这里插入图片描述
    而在FCN中,使用了vgg16的前卷积部分作为backbone,并将vgg16的最后三个全连接层也改为卷积层。除此之外,还增加了上采样部分,这里是使用转置卷积进行上采样
    在这里插入图片描述
    下图是FCN-32S的结构图:它使用了vgg16的前卷积部分作为backbone,并将vgg16的最后三个全连接层也改为卷积层。在上采样部分,它使用步长为32的转置卷积将特征图上采样32倍,还原成原图大小。注意,在原论文对应的源代码中,使用双线性插值的参数来初始化转置卷积参数。

    但是FCN-32S模型的缺点是在上采样的过程中,一次性将最后的特征图上采样32倍,此时由于最后一层的特征图太小,所以在上采样的过程中会损失很多细节。
    在这里插入图片描述
    下图是FCN-16S的结构图,它在FCN-32S的基础上增加了一个分支,这个分支的输入部分是vgg16中的第四个池化层的输出特征图。最后将两个分支的输出相加,然后进行16倍上采样,还原到原图大小。

    在这里插入图片描述

    下图是FCN-8S的结构图,它在FCN-16S的基础上增加了一个分支,这个分支的输入部分是vgg16中的第3个池化层的输出特征图。最后将三个分支的输出相加,然后进行8倍上采样,还原到原图大小。
    在这里插入图片描述
    总结:

    如果只利用反卷积对最后一层的特征图进行上采样得到原图大小的分割,由于最后一层的特征图太小,会损失很多细节。因而提出增加Skips(跳层连接结构)将最后一层的预测(有更富的全局信息)和更浅层(有更多的局部细节)的预测结合起来。

    如果忽略部分细节,FCN-32S, FCN-16S, FCN-8S的结构可以用下图来概括:
    在这里插入图片描述

    • 对于FCN-32s,直接对pool5 feature进行32倍上采样,再对上采样后的图像的每个点做softmax 获得最终的分割图。
    • 对于FCN-16s,首先对pool5 feature进行2倍上采样获得,然后再将其与pool4 feature逐点相加,最后将相加的feature进行16倍上采样,再对上采样后的图像的每个点做softmax获得最终的分割图。
    • 对于FCN-8s,首先进行pool5 feature进行2倍上采样,然后再将相加后的结果与pool4 feature逐点相加,得到的结果再与经过2倍上采样后的pool3 feature 逐点相加,最后将相加后featrue进行8倍上采样,再对上采样后的图像的每个点做softmax获得最终的分割图。

    下面有一张32倍,16倍和8倍上采样得到的结果图对比:

    在这里插入图片描述
    可以看到随着上采样做得越多,分割结果越来越精细。

    3 上采样原理简单介绍

    上采样部分将最终得到的特征图上采样得到原图像大小的语义分割结果。

    在这里采用的上采样方法是反卷积(Deconvolution),也叫做转置卷积(Transposed Convolution):

    • 反卷积是一种特殊的正向卷积
    • 通俗的讲:对输入特征图按照一定的比例补0后来扩大特征图的尺寸,再进行正向卷积获取一个尺寸比原始特征图更大的特征图 。

    如下图所示:输入图像尺寸为3x3,经过补0后变成5x5,经过padding后变成7x7,卷积核kernel为3x3,步长strides=2,填充padding=1,对补0后的图像进行卷积后虽然相对于补0后的图像变小了,但是相对于原始图像却变大了,这样就达到了对原始图像进行上采用的效果
    在这里插入图片描述
    假设反卷积的输入是n x n (在本例中是3x3),反卷积的输出为mxm(在本例中是5x5),padding=p(在本例中是p=1),stride=s(在正常卷积中步长是卷积每次移动的大小,但是在反卷积中,卷积每次移动的大小都是1,所以这里的步长stride并不是卷积每次移动的大小,它是输入特征图中间填充0的个数加1,在本例中,stride=s=2,s-1=1,所以中间填充0个数是1,如果stride=1,则不填充0),kernel_size = k(在本例中是k=3)。

    那么此时反卷积的输出就为:

    m=s(n−1)+k−2pm=s(n−1)+k−2p
    在这里插入图片描述
    与正向卷积不同的是,要先根据步长strides对输入的内部进行填充,这里strides可以理解成输入放大的倍数,而不能理解成卷积移动的步长。

    这样我们就可以通过反卷积实现上采样。

    4 总结

    • 优点

    FCN网络可以实现端到端的预测,可以接受任意大小的输入图像尺寸(因为没有全连接层),比较高效。

    • 局限性

    得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊的,对图像中的细节不敏感。而且在对各个像素进行分类时,没有考虑像素与像素之间的关系。

    展开全文
  • FCN网络详解

    千次阅读 2021-12-30 23:06:52
    FCN全卷积网络是图像分割开山之作,其核心思想非常简单,用卷积层代替分类网络中的全连接层。 用于分类的神经网络由卷积层、池化层和最后连接的全连接层组成,经过最后的全连接层后,二维的图像信息被映射为具体的...

    FCN论文详解

    FCN算法Pytorch实现:https://github.com/codecat0/CV/tree/main/Semantic_Segmentation/FCN

    1. 将全连接层替换为卷积层

    语义分割的目的是对图像中每一个像素点进行分类,与普通的分类任务只输出图像某个类别不同,语义分割任务输出的是与输入图像大小相同的图像,输出图像的每个像素对应输入图像每个像素的类别,这也就是论文中提到的dense prediction

    FCN全卷积网络是图像分割开山之作,其核心思想非常简单,用卷积层代替分类网络中的全连接层。
    在这里插入图片描述

    用于分类的神经网络由卷积层、池化层和最后连接的全连接层组成,经过最后的全连接层后,二维的图像信息被映射为具体的一维类别信息进行输出,得到分类标签。

    对于语义分割问题,我们需要的不是具体的类别标签,而是一个二维的分割图,FCN方法丢弃全连接层,并将其换成卷积层,最后输出与原图相同大小的分割图

    论文作者认为:全连接层让目标的位置信息消失了,只保留了语义信息,而将全连接层更换为卷积层可以同时保留位置信息和语义信息
    在这里插入图片描述

    2. 上采样

    由于经过多次卷积之后图像的大小会缩小,需要通过上采样对其进行尺寸大小的恢复,使最后的分割图与原图尺寸一样

    2.1 反卷积

    下图为stride=1、paddding=0的反卷积的工作过程
    在这里插入图片描述

    下图为stride=2、padding=1的反卷积的工作过程
    在这里插入图片描述

    根据卷积的尺寸计算公式
    o = i − k + 2 ⋅ p s + 1 o=\frac {i-k+2 \cdot p} {s} + 1 o=sik+2p+1
    反卷积的尺寸就算公式为:
    i = ( o − 1 ) ⋅ s + k − 2 ⋅ p i = (o-1) \cdot s + k - 2 \cdot p i=(o1)s+k2p

    Pytorch实现nn.ConvTranspose2d

    2.2 插值

    2.2.1 最近邻插值

    在这里插入图片描述

    计算PQ11、Q12、Q22、Q21距离可知P与Q11最近,所以P像素点的值与Q11像素点的值一样

    2.2.2 双线性插值

    在这里插入图片描述

    双线性插值就是做两次线性变换,先在X轴上做一次线性变换,求出每一行的R
    R 1 = x 2 − x x 2 − x 1 Q 11 + x − x 1 x 2 − x 1 Q 21 R 2 = x 2 − x x 2 − x 1 Q 12 + x − x 1 x 2 − x 1 Q 22 R_1=\frac {x_2-x} {x_2-x_1} Q_{11} + \frac {x-x_1} {x_2-x_1}Q_{21} \\ R_2=\frac {x_2-x} {x_2-x_1} Q_{12} + \frac {x-x_1} {x_2-x_1} Q_{22} R1=x2x1x2xQ11+x2x1xx1Q21R2=x2x1x2xQ12+x2x1xx1Q22
    再在Y轴上做一次线性变换,求该区域的P
    P = y 2 − y y 2 − y 1 R 1 + y − y 1 y 2 − y 1 R 2 P=\frac {y_2-y} {y_2-y_1}R_1 + \frac {y-y_1} {y_2-y_1}R_2 P=y2y1y2yR1+y2y1yy1R2

    2.3 UpPooling

    在这里插入图片描述

    2.4 Upsample

    3. 跳跃结构

    如果直接用全卷积后的层进行上采样的话,得到的结果往往不够精细,所以本文中采取了跳级结构的方法,将更靠前的卷积层和经过上采样的层相结合,如下图所示:
    在这里插入图片描述

    采用这种方法,能够在保留全局特征的前提下,尽可能使得图像的划分更为精细

    展开全文
  • FCN网络

    2021-12-21 15:28:54
    个人使用fcn8s-resnet50作为backbone,且使用coco数据集的预训练权重,在pascal voc 2012的mean iou为70%左右。 3、细节 全连接层的输入节点个数是固定的,所以分类网络的输入图像尺寸是固定的(在此之后可以使用...

    1、引言

    在这里插入图片描述
    2015年发表在cvpr的首个端对端的针对像素级预测的全卷积网络

    2、效果

    在这里插入图片描述
    个人使用fcn8s-resnet50作为backbone,且使用coco数据集的预训练权重,在pascal voc 2012的mean iou为70%左右。

    3、细节

    在这里插入图片描述
    全连接层的输入节点个数是固定的,所以分类网络的输入图像尺寸是固定的(在此之后可以使用全局平均池化层),所以作者把全连接层的权重转化为卷积层中。
    convlization详细理解:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    【参考】
    b站:霹雳吧啦Wz

    展开全文
  • Pytorch搭建FCN网络

    2021-07-08 17:28:10
    Pytorch搭建FCN网络
  • python所写的语义分割代码,采用Pytorch框架,代码完整,完美运行。
  • FCN网络结构解析

    2021-11-03 17:01:02
    Q1: 为什么要用FCN? A1:应为和以前网络R-CNN,SDS相比提升比较大 Q2:与CNN什么区别? A2:使用全卷积层代替全连接层 Q3:为什么要进行代替? A3:1.全连接层训练时输入节点个数是固定的,如果输入节点...
  • FCN网络训练 菜鸟版

    2020-12-24 12:01:22
    论文全名:Fully Convolutional Networks for Semantic Segmentation全卷积神经网络 FCN代码运行详解:运行平台:Ubuntu 14.04 + cudnn71.代码准备:下载新版caffe: https://github.com/BVLC/caffe下载fcn代码: ...
  • 当目标检测网络架构中将分类网络与检测网络进行卷积共享时,分类任务需要特征具有平移不变性,而检测任务要求对目标的平移做出准确响应,因此R-FCN网络主要解决了“图像分类网络的位置不敏感性”和“目标检测网络的...
  • 基于pytorch的FCN网络简单实现

    千次阅读 多人点赞 2020-07-29 11:48:48
    参考知乎专栏实现FCN网络https://zhuanlan.zhihu.com/p/32506912 import torch from torch import nn import torch.nn.functional as f import torchvision import torchvision.transforms as tfs from torch.utils....
  • FCN网络实现了端到端的图像分割,去除了卷积网络的全连接层,采用反卷积的方式,实现像素级别的分割,并加入skip方式,提升了分割性能。 【2】训练步骤 文件目录展示 【2.1】打开python-mvisdom.se...
  • FCN网络结构

    千次阅读 2019-06-16 16:07:31
  • 深度学习网络的发展以及FCN网络的介绍
  • FCN网络个人理解版,欢迎提出宝贵意见
  • 本文是对上述博客的凝练 CNN与FCN区别 ...2 CNN网络在卷积之后会接上若干个全连接层,映射成固定长度的特征向量 FCN将传统CNN中的全连接层转化成一个个的卷积层 3FCN可以接受任意尺寸的输入图...
  • 2 FCN网络结构 再对比下图的VGG16网络结构 VGG16网络结构大体分为两部分,一是13个卷积层,二是3个全连接层,输入图像经过卷积和池化,下采样到512维的矩阵,最后拉平Flatten()成一维的向量,经过两次n-—&...
  • FCN网络(Fully Convolutional Networks for Semantic Segmentation)

    万次阅读 多人点赞 2019-04-26 18:53:12
    因为FCN网络中所有的层都是卷积层,故称为全卷积网络。 全卷积神经网络主要使用了三种技术: 卷积化(Convolutional) 上采样(Upsample) 跳跃结构(Skip Layer) 二.网络结构 F...
  • Pytorch官方实现的FCN网络结构
  • Pytorch复现FCN网络

    千次阅读 热门讨论 2020-04-03 14:52:32
    Pytorch复现FCN网络详解(可复现) 1、环境配置 windows10,pytorch=1.3,python=3.6 参考博客:https://github.com/wkentaro/pytorch-fcn 本文FCN完整复现代码:...
  • FCN网络理解

    千次阅读 2019-02-27 16:51:11
    传统的基于卷积神经网络的分割方法的做法通常是:为了对一个像素分类,使用该像素周围的一个图像块作为卷积神经网络的输入用于训练和预测。这会使得存储开销很大。eg:对每个像素使用的图像块的大小为15*15,则所...
  • 首先是数据的预处理部分,由于FCN不限制输入图片的尺寸大小,所以预处理部分较为精简,只需要转换为tensor格式,再进行一个标准化即可 之后便需要定义一个onehot函数,用于对标签图的处理,其作用是将标签转化为一...
  • 代季峰,何恺明,孙剑论文链接:论文传送门代码链接:matlab版,python版方法概括R-FCN解决问题——目标检测整个R-FCN的结构一个base的conv网络如ResNet101, 一个RPN(Faster RCNN来的),一个position sensiti...
  • FCN网络训练 终极版

    万次阅读 多人点赞 2016-10-09 20:33:34
    前言之前写过两个版本的FCN网络训练,一个是基于caffe-future(原博地址),一个是基于官方Caffe的FCN(原博地址)。结果有很多人都咨询一些问题,由于一直有项目和论文的任务,因此一直没有注意到大家的问题,知道...
  • 拟议的FCN模型 生成的数据集中的训练样本(左:数据,右:标签) 安装(Linux) 分叉 设置virtualenv并安装依赖项./setup_virtualenv.sh 安装PyTorch ./setup_pytorch.sh 激活virtualenv,启动Jupyter Notebook...
  • 参考文献:https://www.jianshu.com/p/29604b12f776
  • FCN(完全卷积网络)中最简单,最容易使用的pytorch实现

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,389
精华内容 5,755
关键字:

fcn网络

友情链接: 61IC_S4282.rar