深度学习中的反向卷积

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自:opencv学堂

图像卷积最常见的一个功能就是输出模糊(smooth)图像,通过卷积实现了像素的扩散效应,常见的卷积操作是由卷积核+输入图像组成,卷积核(filter)是一个窗口区域,在输入图像上从左到右,从上到下进行窗口范围内系数与像素值的点乘求和操作,输出作为中心像素点的卷积结果。对图像进行卷积模糊的效果如下:

图像反卷积的含义是对模糊图像进行反向模糊去除,让图像重新变得清晰化,本质上是一种图像去模糊算法,而且它可以看出是图像卷积模糊的反向操作,OpenCV在其3.4版本中新增了移动图像去模糊算法,通过反卷积操作实现。其原理主要是基于PSF进行重新估算模糊半边,然后进行反向卷积算计得到。简单的模糊图像与反卷积/去模型效果如下:



关于深度学习中的卷积层作用与声明,可以参考公众号文章:
卷积神经网络是如何实现不变性特征提取的
深度学习中的反向卷积
深度学习中的反向卷积跟图像的反卷积去模糊有本质区别,深度学习中的反向卷积本质上是转置卷积操作,常见在图像语义分割网络FCN、对抗生成网络中DCGAN中。专置卷积的作用对卷积层的解码,实现从低维特征向量向高维特征空间的映射,生成与输入大小完全一致的feature maps。对于一个正常的卷积操作:


输入是4x4大小,卷积核3x3大小,步长是1,输出是2x2大小,如果对它们近一步分析就是知道,输入是4x4=16维度的数据,输出是2x2=4维的数据,展开的卷积核权重系数如下:

它是一个16x4的矩阵,现在我们需要输入是4维度,输出是16维度,相当于对这个矩阵进行了转置操作,转置卷积就是这样出来的。常见的转置卷积操作有如下两种:

单位步长
填充周围为零,通过填充输入来计算转置卷积,通过这种方式把反向/转置卷积,当成一个正常的卷积操作。输入2x2,输出4x4,步长1,卷积核3x3,操作演示如下:

分步步长
通过对每一行每一列分步进行填充,得到输入填充好的输入,然后再进行正常的卷积操作,这种方法更加的合理。输入=3x3,填充=2,步长等于1的分步卷积方式的转置操作输出5x5的feature显示如下:

在这里需要特别注意的是上述对转置卷积的步长跟正向卷积的步长不是一样的,单位步长的转置卷积步长=S,输入图像H=W=N,则输出图像大小为 H=W=SXN,这个必须保持一致。
Tensorflow中转置卷积代码演示如下:
import tensorflow as tfimport numpy as np

def test_conv2d_transpose():    # input (batch_size, height, width, channels) - 2x2x1 image in batch of 1    x = tf.constant(np.array([[        [[1], [2]],        [[3], [4]]    ]]), tf.float32)
    # 3x3x1 filter    f = tf.constant(np.array([        [[[1]], [[1]], [[1]]],        [[[1]], [[1]], [[1]]],        [[[1]], [[1]], [[1]]]    ]), tf.float32)
    # transposed-convolution operator    conv = tf.nn.conv2d_transpose(x, f, output_shape=(1, 4, 4, 1), strides=[1, 2, 2, 1], padding='SAME')
    # run it    with tf.Session() as session:        result = session.run(conv)        print(result)
    assert (np.array([[        [[1.0], [1.0],  [3.0], [2.0]],        [[1.0], [1.0],  [3.0], [2.0]],        [[4.0], [4.0], [10.0], [6.0]],        [[3.0], [3.0],  [7.0], [4.0]]]]) == result).all()
test_conv2d_transpose()
下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值