CV/DL基础知识 之 反卷积参数推导

1,卷积参数表达式:

输入size    :in
输出size    :out
卷积核size:k
步长            :s
padding    : p

out = [ (in - k + 2p)/s ] + 1     (1)
             其中“ [] ”表示向下取整

那么:

in = ( out - 1 )*s + k - 2p + x          (2)
             其中 x = (in - k + 2p)%s,是公式(1)向下取整时丢掉的部分,%求余

2,反卷积的运算过程:

反卷积的作用是: 恢复某个卷积(k, p, s)造成的特征图size变化(下降)。

反卷积的参数和卷积的参数在数量和作用上基本一致,因为卷积和反卷积本质上是同一个操作(这一点后面会详细说明)

相应的,我们使用下列符号标记:
    输入size    :din
    输出size    :dout
    卷积核size:dk
    步长            :ds
    padding    : dp
除此之外,反卷积还有一个output_padding参数,我们用dpout表示

反卷积的计算过程等价于:
1,首先根据ds,对输入特征图进行填充。填充的方式是在输入特征图的相邻两个元素之间填充(ds-1)个0,如图1(a->b)所示(假设ds=2)。填充后特征图size为:(din-1) * ds + 1
2,对1的结果使用(dk-dp-1)进行padding(和卷积操作中的padding一致),如图1(b->c)所示(假设dp=1,dk=3) , padding后的特征图size为:(din-1) * ds + 1 + 2 * (dk-dp-1)
3,对2的结果使用dpout进行output_padding,即在特征图的上方和右侧各填充dpout个元素。注意output_padding与padding不同,仅在特征图的一侧进行填充,如图1(c->d)所示(假设dpout=1)。如果你细心的话,看到这里你应该发现,dpout和其他反卷积参数一样,也在卷积操作中有对应的参数,只不过是个隐参数,没错,就是x。output_padding后特征图size为:(din-1) * ds + 1 + 2*(dk-dp-1) + dpout
4,在3的结果上进行**【步长为1,卷积核为dk,padding为0】的卷积操作**,得到的结果就是反卷积的结果了,那么,反卷积输出的size为: [(din-1) * ds + 1 + 2*(dk-dp-1) + dpout - dk ] / 1 + 1 = (din-1) * ds + dk - 2 * dp + dpout
在这里插入图片描述

3,反卷积参数的推导

如前所述,我们使用反卷积的目的是:恢复某个卷积(k, p, s)造成的特征图size变化(下降)。

即,反卷积的输入din = out,我们希望找到合适的参数[dk, ds, dp, dpout],使得反卷积的输出dout=in
将其带入公式(2),有:
dout = ( din - 1 )*s + k - 2p + x          (3)

通过 2中对反卷积计算过程的讨论,我们知道有:
dout = (din-1) * ds + dk - 2 * dp + dpout          (4)

联立(3)(4),消去dout:
( din - 1 )*s + k - 2p + x = (din-1) * ds + dk - 2 * dp + dpout          (5)

通过公式(5)我们可以选定合适的[dk, ds, dp, dpout],当然,可能的组合有很多种

一般在实际应用中,我们使用ds = s,你可以通过我们在第2部分讨论的ds的作用思考为什么这么做。
我们也经常使用dk = k

那么就有:
– 2 * dp + dpout = - 2 * p + x          (6)

一般来说,选择dp = p, dpout = x,不过,正如我们在第2部分关于dpout的讨论,它填充到特征图一侧的,而(dk-dp-1)是填充到特征图两侧的,所以我更倾向于建议选择尽可能小的dpout。

值得注意的是,上面的推导是我们想构造一个针对某特定卷积(k, p, s)的反卷积的参数计算方法。
很多时候,我们只考虑将某个输入din上采样为dout,即不关心特征图从in=dout下采样到out=din的方式是怎样的(即不关心用一个还是多个卷积层还是池化进行的下采样)。
这时候,我们可以直接使用公式(4)计算反卷积的参数,当然,这有很多种参数组合
或者,更一般的,我们这样做:

假设in=dout下采样到out=din是通过一个卷积层完成的,推测这个卷积层应该有的参数k, s, p,然后按照前述方法计算反卷积参数。

4,后记

有一点不明白的地方是,为什么反卷积使用(dk-dp-1)进行padding,直接使用dp进行padding,即定义dp的含义为padding的size不是更直观吗?

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值