首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用于FCN型网络的转置卷积TensorFlow填充

FCN(Fully Convolutional Network)是一种常用于图像语义分割的深度学习网络模型。在FCN中,转置卷积(Transpose Convolution)被广泛应用于将低分辨率的特征图恢复到原始输入图像的尺寸。

转置卷积是一种反卷积操作,通过在输入特征图之间插入一些填充值来扩大特征图的尺寸。TensorFlow是一个流行的深度学习框架,提供了丰富的转置卷积函数和工具来支持FCN网络的构建和训练。

转置卷积的填充(Padding)是指在转置卷积操作中对输入特征图进行填充的方式。填充可以在转置卷积过程中保持特征图的尺寸,并且有助于提取更丰富的特征信息。在TensorFlow中,填充可以通过设置转置卷积函数的padding参数来实现。

TensorFlow提供了两种常用的填充方式:SAME和VALID。SAME填充方式会在输入特征图的周围添加适当数量的填充值,使得转置卷积后的特征图尺寸与输入特征图尺寸相同。VALID填充方式则不进行填充,转置卷积后的特征图尺寸会缩小。

对于FCN型网络,填充方式的选择通常取决于应用场景和网络设计需求。如果需要保持特征图尺寸不变,可以选择SAME填充方式;如果可以接受特征图尺寸缩小,可以选择VALID填充方式。

在TensorFlow中,可以使用tf.nn.conv2d_transpose函数来实现转置卷积操作,并通过设置padding参数来指定填充方式。具体使用方法和示例可以参考腾讯云的TensorFlow产品文档:TensorFlow产品文档

总结起来,FCN型网络中的转置卷积在图像语义分割等任务中起到重要作用,通过填充方式可以控制特征图的尺寸变化,TensorFlow提供了丰富的函数和工具来支持转置卷积操作的实现。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 举世瞩目的「深度神经网络」如何应用于移动端?

    随着深度学习算法在图像领域中的成功运用,学术界的目光重新回到神经网络上;而随着 AlphaGo 在围棋领域制造的大新闻,全科技界的目光都聚焦在“深度学习”、“神经网络”这些关键词上。与大众的印象不完全一致的是,神经网络算法并不算是十分高深晦涩的算法;相对于机器学习中某一些数学味很强的算法来说,神经网络算法甚至可以算得上是“简单粗暴”。只是,在神经网络的训练过程中,以及算法的实际运用中,存在着许多困难,和一些经验,这些经验是比较有技巧性的。 有道云笔记不久前更新的文档扫描功能中使用了神经网络算法。本文试图以文

    08

    转置卷积详解

    前面文章对卷积做了讲解,感觉既然重新整理,就将系列概念整体做个梳理,也算是将自己知道的所有东西拿来献丑把。   转置卷积(Transposed Convolution)是后来的叫法,一开始大家都是称逆卷积/反卷积(Deconvolution),这个概念是在图像分割任务中被提出来的,图像分割需要逐像素的操作,对每一个像素做一个分割,将其归类到不同的物体当中。   这个任务大家很自然的想要使用卷积神经网络来完成,那就得先使用卷积神经网络提取特征,但是卷积神经网络中的两大主要构件,卷积层和下采样层会使得图像的尺寸不断缩小。这个就与逐像素的分类不符,因为逐像素分割的话是需要输出和输入大小是一致的。   针对这个问题,有人提出了先使用卷积核下采样层逐层的提取特征,然后通过上采样再将特征图逐渐的恢复到原图的尺寸。而这个上采样一开始就是通过反卷积来实现的。如果说卷积核下采样的过程特征图是变小的,那么上采样之后特征图应该变大。   我们应该熟悉卷积的输出尺寸公式 o u t = ( F − K + 2 P ) / s + 1 out=(F-K+2P)/s+1 out=(F−K+2P)/s+1,其中F表示输入特征图的尺寸,K表示卷积核的尺寸,P表示padding,S表示卷积的步长。我们都通过这个公式来计算卷积的输出特征图尺寸。举例来说明,一个4×4的输入特征图,卷积核为3×3,如果不使用paddng,步长为1,则带入计算 o u t = ( 4 − 3 ) / 1 + 1 out=(4-3)/1+1 out=(4−3)/1+1为2。   我们已经在im2col算法的介绍中讲解了卷积的实现,实际上这个步骤是通过两个矩阵的乘法来完成的,我们不妨记为 y = C x y=Cx y=Cx,如果要上采样,我们希望给输出特征图乘一个参数矩阵,然后把尺寸还原回去,根据数学知识,我们给特征图矩阵 y y y左乘一个{C^T},就能得到 C T y = C T C x C^Ty=C^TCx CTy=CTCx, C C C的列数等于 x x x的行数, C T C C^TC CTC的行数和列数都等于x的行数,乘完之后,得到的结果与 x x x形状相同。这就是转置卷积名字的来源。有一些工作确实是这样实现的。   我们也能很自然的得出结论,我们不需要给输出特征图左乘 C T C^T CT,显然只要和这个矩阵形状相同,输出的结果就和原特征图尺寸相同,而且这个操作同样可以使用卷积来实现,那我们只要保证形状一致,然后参数我们可以自己训练,这样尺寸的问题解决了,而且特征的对应也有了,是可以训练的,一举两得。 im2col讲解的内容,卷积是 ( C o u t , C i n ∗ K h ∗ K w ) (C_{out},C_{in}*K_h*K_w) (Cout​,Cin​∗Kh​∗Kw​)的卷积核乘 ( C i n ∗ K h ∗ K w , H N ∗ W N ) (C_{in}*K_h*K_w,H_N*W_N) (Cin​∗Kh​∗Kw​,HN​∗WN​)的特征图,得到 ( C o u t , H N ∗ W N ) (C_{out},H_N*W_N) (Cout​,HN​∗WN​)的结果。现在对卷积核做一个转置 ( C i n ∗ K h ∗ K w , C o u t ) (C_{in}*K_h*K_w,C_{out}) (Cin​∗Kh​∗Kw​,Cout​)乘 ( C o u t , H N ∗ W N ) (C_{out},H_N*W_N) (Cout​,HN​∗WN​)得到一个 ( C i n ∗ K h ∗ K w , H N ∗ W N ) (C_{in}*K_h*K_w,H_N*W_N) (Cin​∗Kh​∗Kw​,HN​∗WN​)的特征图。   除了以上内容这里还有一点其他需要补充的东西,比如在caffe中除了im2col函数之外,还有一个函数是col2im,也就是im2col的逆运算。所以对于上面的结果caffe是通过col2im来转换成特征图的。但是col2im函数对于im2col只是形状上的逆函数,事实上,如果对于一个特征图先执行im2col再执行col2im得到的结果和原来是不相等的。   而在tensorflow和pytorch中,这一点是有差异的,两者是基于特征图膨胀实现的转置卷积操作,两者是是通过填充来进行特征图膨胀的,之后可能还会有一个crop操作。之所以需要填充,是因为想要直接通过卷积操作来实现转置卷积,干脆填充一些值,这样卷积出来的特征图尺寸自然就更大。   但是两者从运算上来讲都无法对原卷积进行复原,只是进行了形状复原而已。   到了最后就可以讨论形状的计算了,转置卷积是卷积的形状逆操作,所以形状计算就是原来计算方式的逆函数。 o u t = ( F − K + 2 P ) / s + 1 out

    02

    Caffe实现上采样(upsample)方法总结

    CNN的下采样(subsample)在几乎所有的模型结构中都会出现,比如stride>1的卷积操作,pooling操作,都会减少特征图的长宽,起到下采样的效果。与之相对的就是上采样(upsample)操作了,顾名思义,上采样在CNN模型中的作用上增大特征图的长宽,比如都变为原来的2倍。上采样在模型构建中并不像下采样那么频繁被使用,一般情况下,会在下面几个应用中用到上采样操作: 1.segmetation网络,因为segmentation需要还原到特征图到原始输入图像的尺寸; 2.图像生成任务,比如GAN,AVE等,也需要还原到原始输入图像的尺寸; 3.CNN可视化,通过反卷积将卷积得到的feature map还原到像素空间,来观察feature map对哪些pattern相应最大,即可视化哪些特征是卷积操作提取出来的; 那么在Caffe中,都有哪些上采样操作呢?

    02

    那些一键抠图的软件是怎么做到的?这些语义分割方法了解一下

    在深度学习时代到来之前,大量的图像处理技术被用来将图像分割成一些感兴趣的区域(ROI)。下面列出了一些常用的方法。 灰度分割 这是最简单的语义分割形式,它包括将一个区硬编码的规则或某个区域必须满足的特定的标签属性赋予这个区域。可以根据像素的属性(如灰度值)来构建这样的规则。「分裂-合并」算法就是一种用到了灰度分割技术的方法。该算法递归地将图像划分成若干子区域,直到可以为划分出的子区域分配一个标签,然后通过合并将相邻的带有相同标签的子区域融合起来。 该方法存在的问题是,规则必须是硬编码的。此外,仅使用灰度信息来表示复杂的类(比如人)是极其困难的。因此,需要特征提取和优化技术来恰当地学习这些复杂类所需的表征形式。

    04

    基于深度学习的语义分割技术总览

    用卷积神经网络分类(全卷积网络FCN),与普通CNN网络不通的是,FCN的分类层是卷积层,普通网络为全连接层。方法介绍如下:  最近的语义分割架构一般都用卷积神经网络(CNN)为每个像素分配一个初始类别标签。卷积层可以有效地捕捉图像中的局部特征,并以层级的方式将许多这样的模块嵌套在一起,这样 CNN 就可以试着提取更大的结构了。通过一系列卷积捕捉图像的复杂特征,CNN 可以将一张图的内容编码为紧凑表征。  但为了将单独的像素映射给标签,我们需要将标准 CNN 编码器扩展为编码器-解码器架构。在这个架构中,编码器使用卷积层和池化层将特征图尺寸缩小,使其成为更低维的表征。解码器接收到这一表征,用通过转置卷积执行上采样而「恢复」空间维度,这样每一个转置卷积都能扩展特征图尺寸。在某些情况下,编码器的中间步骤可用于调优解码器。最终,解码器生成一个表示原始图像标签的数组。

    02
    领券