tensorflow tf.space_to_batchnd函数理解

本文介绍了 TensorFlow 中如何使用 space_to_batchnd 函数实现空洞卷积,详细解释了该函数的作用、工作原理,并结合官方源码和实例进行解析,帮助理解空洞卷积的转换过程。
摘要由CSDN通过智能技术生成

最近需要将tensorflow转ncnn模型, 发现无论是普通的卷积还是分组卷积, 只要有dilation > 1的情况出现, tensorflow在做空洞卷积的时候, 就会执行:

  1. SpaceToBatchND操作
  2. conv操作
  3. BathToSpaceND操作

其中, 第二步的conv操作已经是普通的卷积操作了, 即dilation=1的普通卷积.
tensorflow这样做的目的, 是不改变kernel的值, 而是事先根据dilation的值改变featuremap的值(通过SpaceToBatchND函数), 然后再做普通的卷积, 最后再通过BatchToSpaceND, 将featuremap转换为原有的featuremap直接执行空洞卷积应该得到的结果. 不清楚的看下图:
在这里插入图片描述
在featuremap为4x4, kernel 为2x2, dilation=2的情况下, 卷积核在featuremap上的每次取值为上图中包含相同图标的四个值. 如果直接按照这个方式来做空洞卷积, 那么速度就会非常慢, 所以tensorflow推出SpaceToBatchND函数, 根据dilation的值,提前把featuremap上应该参与卷积的位置给提出来, 然后组成一个大的batch, 接着和kernel做普通的dilation=1的卷积, 最后再根据BatchToSpaceND返回原来应有的结果. 理解了这个, 那么这两个函数的具体操作就很容易理解了, 根据官方源码的介绍:
SpaceToBatchND

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
tf.space_to_batch_ndTensorFlow中的函数,用于将输入的tensor转换为由空间维度(如图像的高度和宽度)和批处理维度组成的新的tensor。 在深度学习中,通常会对图像进行批处理处理,即同时处理多个图像。然而,有些情况下,我们可能想要对大尺寸的图像进行处理,但是由于内存限制或硬件限制,不能一次性处理整个图像。这时,就可以使用tf.space_to_batch_nd函数将大尺寸的图像分割成小块,并进行批处理处理。 tf.space_to_batch_nd函数接受一个4维的输入张量,可以是图像数据或其他具有空间维度的数据。函数通过两个参数来控制输入张量的转换行为: 1. block_shape:一个1-D整数张量,表示将输入张量的每个空间维度划分成多少个块。该参数的长度必须与输入张量的维度相同,且每个值必须大于0。 2. paddings:一个2-D整数张量,表示对输入张量中空间维度块的填充大小。该参数的形状必须与block_shape的长度相同,每个值表示在对应维度上的填充大小。 在转换时,函数会根据block_shape的值将输入张量的空间维度进行切分,然后在每个切分块的周围进行填充。最后,将切分后的块整理成批处理的形式,即将空间维度放在批处理的维度之后。 tf.space_to_batch_nd函数的返回值是一个新的tensor,其形状与输入张量的形状有关。通过这个函数,我们可以方便地对大尺寸的图像进行批处理处理,以提高模型的训练速度和效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值