Partial Convolution implement Tensorflow 1.X version

inpainting里面重要的一个工作是Nvidia的Partial Convolution部分卷积,该卷积包含两个分支,一个是更新mask图像,另一个则是根据mask图进行部分的卷积。
下面是他的1.x版本的实现代码如下:

def pc_conv(x, mask, cnum, ksize, stride, test ,name='pconv'):
    b, h, w, c = int(x.shape[0]), int(x.shape[1]), int(x.shape[2]), int(x.shape[3])
    with tf.variable_scope(name_or_scope=name):
        w = tf.get_variable(name='conv2d/kernel', shape=[ksize, ksize, c, cnum], dtype=tf.float32)
        b = tf.get_variable(name='conv2d/bias', shape=[cnum], dtype=tf.float32)
    
        # conv(x*m)
        x1 = tf.nn.conv2d(x*mask, w, strides=[1, stride, stride, 1], padding='SAME')
    
        # no grad conv(m)
        w_noGrad = tf.ones_like(w, dtype=tf.float32)            
        sum_m = tf.nn.conv2d(mask, w_noGrad, strides=[1, stride, stride, 1], padding='SAME')
        mask_one = tf.ones_like(mask)
        sum_1 = tf.nn.conv2d(mask_one,w_noGrad, strides=[1, stride, stride, 1], padding='SAME')

        # feature output
        output = tf.nn.bias_add((x1*sum_1)/(sum_m+1e-8), b, name='feature_output')

        # update mask
        mask_ouput = tf.clip_by_value(sum_m, 0, 1,name='mask_output')
    return output, mask_ouput
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值